Vertex AI를 사용한 동영상 분석용 생성형 AI

1. 소개

Google의 생성형 AI 기능을 사용해 YouTube에서 회사 또는 제품에 대한 인플루언서의 조회수를 분석하는 방법을 알아보세요.

LLM이 출현하면서 대차대조표, 소셜 미디어 플랫폼의 조회수와 같은 다양한 소스에서 얻은 통계를 활용함에 따라 인플루언서의 의견이 더욱 쉬워졌습니다.

특히 기술 및 미디어 분야의 소셜 미디어 인플루언서 금융 업계는 점점 더 조직 또는 경쟁 기업의 주요 지지자로 인식되고 있습니다. 제품 및 정책

빌드할 항목

이 Codelab에서는 Vertex AI 및 Langchain의 PaLM2 모델이 YouTube 인플루언서 분석 솔루션에 어떻게 결합되는지 살펴봅니다.

환경

https://colab.research.google.com/#create=true로 이동하여 Google Colab 샌드박스 환경에서 새 노트북을 만듭니다.

2. 패키지 설치 및 인증

새 노트북의 첫 번째 셀에서 다음 명령어를 사용하여 필요한 패키지를 설치합니다.

!pip install google-cloud-aiplatform
!pip install langchain
!pip install chromadb
!pip install pytube
!pip install youtube-transcript-api
!pip install gradio
from google.cloud import aiplatform

위의 패키지를 설치한 후 런타임 머신을 다시 시작하라는 메시지가 표시됩니다. 런타임 다시 시작을 클릭하거나 런타임 메뉴에서 런타임 다시 시작을 선택하세요.

Google Cloud 계정 인증

계정에 Vertex AI 사용자 역할이 있어야 합니다.

  • Google Cloud 콘솔을 열고 IAM 및 관리 서비스를 검색합니다. '주제별 보기'의 '권한' 탭에서 '액세스 권한 부여'를 선택합니다. 주 구성원을 입력 / 선택한 후 'Vertex AI 사용자' 역할을 추가합니다. SAVE(저장)를 클릭합니다.

c6d26238f3d57a45.png

이제 Colab 탭으로 돌아가서 현재 작업 파일의 두 번째 셀에 아래 코드 스니펫을 입력합니다. 그러면 인증이 확인됩니다.

from google.colab import auth as google_auth
google_auth.authenticate_user()

액세스를 허용하라는 메시지가 표시됩니다. 계속 진행합니다.

3. 초기화 및 가져오기

다음 셀에 아래 스니펫을 입력하여 프로젝트를 초기화합니다.

import vertexai
PROJECT_ID = "<projectid>" #enter your project id here
vertexai.init(project=PROJECT_ID)

솔루션을 위한 라이브러리 가져오기

다음 명령어를 사용하여 필요한 라이브러리를 가져옵니다.

from langchain.document_loaders import YoutubeLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import VertexAI

Vertex AI LLM 모델 초기화

이 코드 스니펫을 사용하여 Vertex AI LLM 모델을 초기화합니다. 이렇게 하면 'llm'이 초기화됩니다. Vertex AI의 Text-Bison 모델을 활용할 수 있습니다

!python3 -m pip install langchain

llm = VertexAI(
model_name="text-bison@001",
max_output_tokens=256,
temperature=0.1,
top_p=0.8,
top_k=40,
verbose=True,
)

4. 임베딩 시작

Vertex AI 임베딩을 사용하여 동영상 청크를 임베딩으로 변환합니다. 코드의 이 부분에서는 임베딩 객체만 초기화합니다. 저장 및 검색 섹션에서는 동영상에서 만든 청크에 임베딩을 적용합니다.

생성형 AI에서 청크는 큰 콘텐츠를 관리하기 쉬운 작은 조각 또는 '청크'로 나누는 프로세스입니다. 생성형 AI 모델은 한 번에 처리할 수 있는 데이터의 양에 제한이 있기 때문입니다. 모델은 데이터를 청크 처리하여 한 번에 하나의 청크에 집중하고 더 정확하고 일관된 출력을 생성할 수 있습니다.

임베딩은 콘텐츠를 숫자 벡터로 표현하는 방법입니다. 이를 통해 컴퓨터는 장면 감지 또는 키프레임 추출과 같은 기존 방법보다 더 정교한 방식으로 데이터의 의미를 이해할 수 있습니다(동영상이나 단어 모음, 언어 데이터인 경우).

from langchain.embeddings import VertexAIEmbeddings

# Embedding
EMBEDDING_QPM = 100
EMBEDDING_NUM_BATCH =5
embeddings = VertexAIEmbeddings(
    requests_per_minute=EMBEDDING_QPM,
    num_instances_per_batch=EMBEDDING_NUM_BATCH,
)

5. 동영상 로드 및 청크

요약하거나 질문할 동영상을 로드합니다.

loader = YoutubeLoader.from_youtube_url("https://www.youtube.com/watch?v=A8jyW_6hCGU&t=161s", add_video_info=True)
result = loader.load()

동영상 분할

재귀 문자 분할 기법을 사용하여 동영상을 여러 단위로 분할합니다.

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=0)
docs = text_splitter.split_documents(result)
print(f"# of documents = {len(docs)}")

6. 저장 및 가져오기

문서 저장

이 연습에서는 ChromaDB를 사용합니다. Vertex AI 벡터 검색을 사용할 수도 있습니다. 문서를 벡터 저장소로 저장하고 ChromaDB에 색인을 생성합니다. ChromaDB는 LLM에 사용할 벡터 임베딩을 저장 및 검색하고 데이터에 대한 시맨틱 검색을 수행하는 데 사용됩니다.

db = Chroma.from_documents(docs, embeddings)
retriever = db.as_retriever(search_type="similarity", search_kwargs={"k": 2})

검색 체인 만들기

질문에 답하기 위한 검색기 체인을 만듭니다. 여기에서 Vertex AI Text Bison 모델 LLM과 Chroma DB에서 임베딩을 가져오는 리트리버를 연결합니다.

qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True)

7. 프롬프트 정의

색인이 생성된 콘텐츠에서 질문하고 답변을 받는 프롬프트를 정의합니다.

def sm_ask(question, print_results=True):
  video_subset = qa({"query": question})
  context = video_subset
  prompt = f"""
  Answer the following question in a detailed manner, using information from the text below. If the answer is not in the text,say I dont know and do not generate your own response.

  Question:
  {question}
  Text:
  {context}

  Question:
  {question}

  Answer:
  """
  parameters = {
  "temperature": 0.1,
  "max_output_tokens": 256,
  "top_p": 0.8,
  "top_k": 40
  }
  response = llm.predict(prompt, **parameters)
  return {
  "answer": response

  }

8. LLM 애플리케이션 통합

시각적 프런트엔드 상호작용을 위해 LLM 애플리케이션을 GRadio와 통합합니다.

import gradio as gr
def get_response(input_text):
  response = sm_ask(input_text)
  return response

grapp = gr.Interface(fn=get_response, inputs="text", outputs="text")
grapp.launch()

9. 솔루션 테스트

이제 솔루션을 테스트해 보겠습니다. 위의 코드가 포함된 셀을 실행합니다. 셀 결과에서 UI를 보거나 생성된 링크를 클릭합니다. 입력-출력 구성요소로 인터페이스를 시각화할 수 있어야 합니다. 동영상에 질문을 입력하고 모델 응답을 확인합니다.

825c38058aab0aae.png

이제 YouTube 동영상을 통합하고 Vertex AI PaLM API 모델을 사용하여 분석할 수 있습니다. 이를 더 확장하여 데이터베이스 또는 데이터 웨어하우스와 통합할 수 있습니다. 사용 가능한 모델에 대한 자세한 내용은 Vertex AI LLM 제품 문서를 참조하세요.

10. 축하합니다.

축하합니다. Vertex AI 텍스트 생성 LLM을 프로그래매틱 방식으로 사용하여 SQL 쿼리만 사용하는 데이터에 대한 텍스트 분석을 수행했습니다. 사용 가능한 모델에 대한 자세한 내용은 Vertex AI LLM 제품 문서를 확인하세요.