Vertex AI を使用した動画分析用の生成 AI

1. はじめに

Google の生成 AI 機能を使用して、YouTube のインフルエンサーが企業や商品についてどのように発言しているかを分析する方法について説明します。

LLM の登場により、バランスシート、ソーシャル メディア プラットフォームのビュー、インフルエンサーの意見など、さまざまなソースから分析情報を取得することがはるかに簡単になりました。

特にテクノロジーと金融の世界では、ソーシャル メディア インフルエンサーが組織や競合他社の製品やポリシーの重要な支持者として認識されることが増えています。

作成するアプリの概要

この Codelab では、VertexAI と 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 ユーザー」ロールを追加して保存します。

c6d26238f3d57a45.png

Colab のタブに戻り、現在の作業ファイルの 2 番目のセルに次のコード スニペットを入力します。これにより、認証が確認されます。

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 モデルが一度に処理できるデータ量に上限があるためです。データをチャンク化することで、モデルは一度に 1 つのチャンクに集中し、より正確で一貫性のある出力を生成できます。

エンベディングは、コンテンツを数値のベクトルとして表現する方法です。これにより、動画の場合はショット検出やキーフレーム抽出、言語データの場合は 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()

動画を分割する

再帰文字分割手法を使用して、動画を複数のチャンクに分割します。

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})

リトリーバー チェーンを作成する

質問に答えるための retriever チェーンを作成します。ここでは、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 プロダクトのドキュメントをご覧ください。