1. 소개
Google의 생성형 AI 기능을 사용하여 YouTube 인플루언서의 회사 또는 제품에 대한 의견을 분석하는 방법을 알아봅니다.
LLM이 등장하면서 대차대조표, 소셜 미디어 플랫폼의 조회수, 인플루언서 의견과 같은 다양한 소스의 통계를 활용하는 것이 훨씬 쉬워졌습니다.
특히 기술 및 금융 분야의 소셜 미디어 인플루언서는 조직 또는 경쟁업체의 제품 및 정책을 지지하는 핵심 인물로 간주되는 경우가 늘고 있습니다.
빌드할 항목
이 Codelab에서는 VertexAI의 PaLM2 모델과 Langchain이 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 사용자' 역할을 추가하고 저장합니다.

이제 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 모델을 초기화합니다. 이렇게 하면 Vertex AI의 Text-Bison 모델로 'llm'이 초기화됩니다.
!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 모델이 한 번에 처리할 수 있는 데이터 양에 제한이 있기 때문입니다. 데이터를 청크로 나누면 모델이 한 번에 하나의 청크에 집중하여 더 정확하고 일관된 출력을 생성할 수 있습니다.
임베딩은 콘텐츠를 숫자 벡터로 표현하는 방법입니다. 이를 통해 컴퓨터는 동영상의 경우 샷 감지 또는 키프레임 추출과 같은 기존 방법보다 더 정교한 방식으로 데이터의 의미를 이해할 수 있으며, 언어 데이터의 경우 bag-of-words를 사용할 수 있습니다.
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()
동영상 분할
Recursive Character splitter 기법을 사용하여 동영상을 여러 청크로 분할합니다.
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를 보거나 생성된 링크를 클릭합니다. 입력-출력 구성요소로 인터페이스를 시각화할 수 있습니다. 동영상에 질문을 입력하고 모델의 대답을 확인합니다.

이제 YouTube 동영상을 통합하고 Vertex AI PaLM API 모델을 사용하여 분석할 수 있습니다. 데이터베이스 또는 데이터 웨어하우스와 통합하도록 확장할 수도 있습니다. 사용 가능한 모델에 대한 자세한 내용은 Vertex AI LLM 제품 문서를 참고하세요.
10. 축하합니다.
축하합니다. Vertex AI 텍스트 생성 LLM을 프로그래매틱 방식으로 사용하여 SQL 쿼리만 사용하는 데이터에 대해 텍스트 분석을 수행했습니다. 사용 가능한 모델에 대한 자세한 내용은 Vertex AI LLM 제품 문서를 참고하세요.