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

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 ユーザー」ロールを追加します[保存] をクリックするだけです。

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 モデルを初期化します。これにより "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 つのチャンクに焦点を当て、より正確で一貫性のある出力を生成できます。

エンべディングは、コンテンツを数値のベクトルとして表現する方法です。これにより、コンピュータは、ショット検出やキーフレーム抽出などの従来の方法(動画の場合、単語データの場合)よりも高度な方法でデータの意味を理解できます。

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 Vector Search を使用することもできます。ドキュメントを保存し、ベクトルストアとして ChromaDB にインデックス登録します。ChromaDB は、LLM で使用するベクトル エンベディングの保存と取得や、データのセマンティック検索を行うために使用されます。

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

Retriever チェーンを作成する

質問に答える 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 プロダクトのドキュメントをご覧ください。