「Amazon SageMaker 上での LLM を使用した多言語対応の知識型ビデオおよび音声の質疑応答システム」
Multilingual QA system for knowledge-based video and audio using LLM on Amazon SageMaker
デジタルアセットは、デジタル化が進む世界において、企業の製品、サービス、文化、ブランドアイデンティティの重要な視覚的表現です。デジタルアセットは、記録されたユーザーの行動と共に、インタラクティブでパーソナライズされた体験を提供することで、顧客エンゲージメントを促進し、企業がターゲットオーディエンスとより深い関係を築くのに役立ちます。デジタルアセット内の特定のコンテンツを効率的に発見し、検索することは、ワークフローの最適化、コラボレーションの効率化、適切なコンテンツの対象オーディエンスへの配信にとって重要です。ある研究によると、2021年までに、ビデオは消費者インターネットトラフィックの81%を占めています。この観察結果は驚くべきことではありません。ビデオとオーディオは、より没入型の体験を提供し、自然にターゲットオーディエンスとより高い感情的レベルで関わる強力なVoAGIです。
企業が大量のデジタルアセットを蓄積するにつれて、それらを効果的に組織化・管理し、その価値を最大化することはますます困難になります。従来、企業はこれらのデジタルアセットにキーワード、タイトル、説明などのメタデータを付加して、関連コンテンツの検索と取得を容易にしてきました。しかし、これには設計が行き届いたデジタルアセット管理システムと、まず最初にこれらのアセットを格納するための追加の取り組みが必要です。現実には、ほとんどのデジタルアセットには、効率的なコンテンツ検索を可能にする情報を提供するメタデータが欠けています。さらに、全体のファイルの異なるセグメントの分析を行い、そこに含まれている概念を発見する必要があります。これには時間がかかり、多くの手作業が必要です。
特に自然言語処理と理解(NLPおよびNLU)の領域での生成的AIは、テキストの理解と分析の方法を革新し、より効率的かつ大規模に深い洞察を得ることを可能にしました。大規模言語モデル(LLM)の進歩により、テキストのより豊かな表現が可能となり、デジタルアセットのより良い検索機能が提供されるようになりました。検索補完生成(RAG)は、LLMや高度なプロンプト技術を基に構築されたアプローチであり、企業のデジタルアセットストアに隠された情報に基づいてより正確な回答を提供する人気のある手法です。LLMの埋め込みモデル、パワフルなインデクサーとリトリーバーを活用することで、RAGは話されたまたは書かれたクエリを理解し、知識ベース内で最も関連性の高い情報を迅速に見つけることができます。以前の研究では、RAGを使用して企業のプライベートドメイン知識と接続するQ&Aソリューションを提供する方法が示されています。しかし、すべての種類のデジタルアセットの中でも、ビデオとオーディオアセットが最も一般的で重要です。
RAGベースのビデオ/オーディオ質問応答ソリューションは、非テキストコンテンツのトレーニングおよび参照資料の場所特定のビジネス問題を解決する可能性があります。これらのアセットに関連付けられたタグやメタデータが限られているため、ソリューションではユーザーがチャットボットと対話し、クエリに対する回答を取得することを試みています。これは、特定のビデオトレーニングへのリンク(「Amazon S3データストレージトレーニングのリンクが必要です」)、ドキュメントへのリンク(「機械学習について学ぶためのリンクが必要です」)、またはビデオでカバーされた質問(「S3バケットの作成方法を教えてください」)などが含まれます。チャットボットからの応答は、質問に直接回答するだけでなく、ユーザーのリクエストに最も関連性の高いコンテンツのソースビデオへのリンクと、そのコンテンツの特定のタイムスタンプも含まれます。
- 「AmazonショッピングがAmazon Rekognitionコンテンツモデレーションを使用して商品レビューの有害な画像を確認する方法」
- 「8月7日〜13日のトップ投稿:ChatGPTを忘れて、この新しいAIアシスタントははるかに先行しており、あなたの仕事のやり方を永遠に変えるでしょう」
- 「HeyGenを使ってリアルなAI生成アバターを作る方法」
この記事では、Amazon SageMaker上でビデオとオーディオアセット向けのQ&Aソリューションを構築するためのRAGのパワーをどのように活用するかを示します。
ソリューションの概要
次の図は、ソリューションアーキテクチャを示しています。
ワークフローは主に以下のステージで構成されています:
- 音声-to-テキストモデルによるビデオからテキストへの変換とテキストとビデオの整列と組織化。データはAmazon Simple Storage Service(Amazon S3)に保存されます。
- LLMsとLangChainを使用したRAGアプローチによるインテリジェントなビデオ検索の有効化。ユーザーはLLMsによって生成された回答とタイムスタンプを持つ関連ソースを取得できます。
- LLMsを使用したマルチ機能チャットボットの構築。SageMakerで、前述の2つのソリューションがラップされて展開されます。
詳細な実装については、GitHubリポジトリを参照してください。
前提条件
このソリューションの一部として作成されたリソースを管理するための権限を持つAWS Identity and Access Management(IAM)ロールが設定されたAWSアカウントが必要です。詳細については、AWSアカウントの作成を参照してください。
Amazon SageMaker Studioを初めて使用する場合は、まずSageMakerドメインを作成する必要があります。また、対応するSageMakerの処理およびホスティングインスタンスのサービスクオータを増やす必要がある場合があります。ビデオデータの前処理には、ml.p3.2xlargeのSageMaker処理インスタンスを使用します。Falcon-40Bのホスティングには、ml.g5.12xlargeのSageMakerホスティングインスタンスを使用します。
音声からテキストに変換する:音声認識モデルと文の埋め込みモデルを使用して
ビデオやオーディオデジタルコンテンツを検索し、ビデオからLLMsへの文脈情報を提供するためには、すべてのメディアコンテンツをテキストに変換し、その後テキストデータをNLPの一般的な手法で処理する必要があります。さまざまなシナリオに対応するために、このタスクには以下のオプションを提供しています:
- Amazon TranscribeとAmazon Translate – 各ビデオやオーディオファイルが1つの言語のみを含む場合は、オーディオとビデオファイルを転写するAWSのマネージドサービスであるAmazon Transcribeを選択することを強くお勧めします。同じ言語に翻訳する必要がある場合は、マルチリンガル翻訳をサポートするAWSのマネージドサービスであるAmazon Translateも使用できます。
- Whisper – 実世界のユースケースでは、ビデオデータには外国語学習ビデオなど、複数の言語が含まれる場合があります。Whisperはマルチタスクの音声認識モデルであり、マルチリンガルの音声認識、音声翻訳、および言語識別を実行できます。Whisperモデルを使用してビデオデータの異なる言語を検出し、転写し、すべての異なる言語を1つの言語に翻訳することができます。同じ言語で知識ベース上でRAGソリューションを実行することが重要です。OpenAIはWhisper APIを提供していますが、この投稿ではHugging FaceのWhisperモデルを使用しています。
このタスクは既存のデータ上でAmazon SageMaker Processingジョブで実行しています。このタスクの実行方法の詳細については、data_preparation.ipynb
を参照してください。
ビデオデータをオーディオデータに変換する
Amazon Transcribeはビデオとオーディオデータの両方を処理できますが、Whisperモデルはオーディオデータのみを受け入れることができます。両方のオプションを動作させるためには、ビデオデータをオーディオデータに変換する必要があります。次のコードでは、ライブラリmoviepy
のVideoFileClip
を使用してこのジョブを実行しています:
from moviepy.editor import VideoFileClip
video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_path)
オーディオデータを転写する
オーディオデータが準備できたら、2つの転写オプションから選択できます。前述した基準に基づいて、自分のユースケースに最適なオプションを選択できます。
オプション1:Amazon TranscribeとAmazon Translate
最初のオプションは、Amazon TranscribeとAmazon TranslateなどのAmazon AIサービスを使用して、ビデオとオーディオデータセットの転写結果を取得することです。このオプションを選択する際は、以下のGitHubの例を参照してください。
オプション2:Whisper
Whisperモデルは最大30秒のオーディオデータを処理できます。大きなオーディオデータを処理するために、transformers.pipeline
を使用してWhisperで推論を実行します。RAGで関連するビデオクリップを検索したり、コンテンツを生成する際には、関連クリップのタイムスタンプが重要な参照情報です。そのため、return_timestamps
をONにしてタイムスタンプ付きの出力を取得します。また、generate_kwargs
内のlanguage
パラメータを設定することで、1つのビデオファイル内の異なる言語をすべて同じ言語に転写および翻訳することができます。stride_length_s
は各チャンクの左右のストライドの長さです。このパラメータを使用することで、Whisperモデルが各チャンクで推論を行う際により多くのコンテキストを見ることができ、より正確な結果が得られます。以下のコードを参照してください:
from transformers import pipeline
import torch
target_language = "en"
whisper_model = "whisper-large-v2"
device = "cuda:0" if torch.cuda.is_available() else "cpu"
pipe = pipeline(
"automatic-speech-recognition",
model=f"openai/{whisper_model}",
device=device
)
generate_kwargs = {"task":"transcribe", "language":f"<|{target_language}|>"}
prediction = pipe(
file_path,
return_timestamps=True,
chunk_length_s=30,
stride_length_s=(5),
generate_kwargs=generate_kwargs
)
pipe
の出力は、text
とchunks
の項目を含む辞書形式のデータです。text
には転写結果全体が含まれ、chunks
にはタイムスタンプと対応する転写結果のチャンクが含まれています(以下のスクリーンショットを参照)。チャンクのデータを使用してさらなる処理を行います。
前のスクリーンショットに示されているように、多くの文章が切り落とされ、異なるチャンクに分割されています。チャンクをより意味のあるものにするためには、切り落とされた文章を結合し、次のステップでタイムスタンプを更新する必要があります。
文章の整理
文を結合するために非常にシンプルなルールを使用します。チャンクがピリオド(.
)で終わる場合は、何も変更しません。それ以外の場合は、次のチャンクと結合します。以下のコードスニペットは、この変更を行う方法を説明しています:
prev_chunk = None
new_chunks = []
for chunk in chunks:
if prev_chunk:
chunk['text'] = prev_chunk['text'] + chunk['text']
chunk['timestamp'] = (prev_chunk['timestamp'][0], chunk['timestamp'][1])
if not chunk['text'].endswith('.'):
prev_chunk = chunk
else:
new_chunks.append(chunk)
prev_chunk = None
音声からテキストに変換された元のチャンクと比較すると、元々切り落とされていた完全な文を取得できます。
文章のチャンク化
ドキュメント内のテキストコンテンツは通常、段落ごとに整理されます。各段落は同じトピックに焦点を当てています。段落ごとにチャンク化することで、テキストをより意味のあるベクトルに埋め込むことができ、検索の精度を向上させることができるかもしれません。
ドキュメント内の通常のテキストコンテンツとは異なり、トランスクリプションモデルからの転写は段落に分けられていません。オーディオファイルには一部の停止があるにもかかわらず、これを文の段落分けに使用することはできません。一方、langchain
では、意味的に関連するコンテンツを同じチャンクに保つ再帰的なチャンク化テキスト分割関数RecursiveCharacterTextSplitter
を提供しています。チャンクにタイムスタンプを保持する必要があるため、独自のチャンク化プロセスを実装しています。Pythonを使用してテキストを段落にチャンク化する方法に触発されたポスト「How to chunk text into paragraphs using python」に基づいて、文間の類似性に基づいて文をチャンク化します。基本的なアイデアは、隣接する文と最も類似性が低い文を分割ポイントとして取ることです。文の埋め込みにはall-MiniLM-L6-v2
を使用しています。このアプローチの説明については、元のポストを参照してください。元のソースコードにいくつかの細かい変更を加えていますので、実装については当社のソースコードを参照してください。このプロセスの主要な部分は以下の通りです:
# 文を埋め込む
model_name = "all-minilm-l6-v2"
model = SentenceTransformer(model_name)
embeddings = model.encode(sentences_all)
# 類似性行列を作成
similarities = cosine_similarity(embeddings)
# 関数を適用します。長い文の場合は、10文以上を使用することをお勧めします
minmimas = activate_similarities(similarities, p_size=p_size, order=order)
# 空の文字列を作成
split_points = [each for each in minmimas[0]]
text = ''
para_chunks = []
para_timestamp = []
start_timestamp = 0
for num, each in enumerate(sentences_all):
current_timestamp = timestamps_all[num]
if text == '' and (start_timestamp == current_timestamp[1]):
start_timestamp = current_timestamp[0]
if num in split_points:
para_chunks.append(text)
para_timestamp.append([start_timestamp, current_timestamp[1]])
text = f'{each}. '
start_timestamp = current_timestamp[1]
else:
text+=f'{each}. '
if len(text):
para_chunks.append(text)
para_timestamp.append([start_timestamp, timestamps_all[-1][1]])
文の埋め込みによるチャンク化の効率を評価するために、さまざまなチャンク化メカニズム間で定性的な比較を行いました。このような比較の基礎となる仮定は、チャンク化されたテキストがより意味的に異なり、分離されているほど、Q&Aのために取得される関連性のないコンテキスト情報が少なくなり、回答がより正確で明確になるということです。同時に、LLMへ送られるコンテキスト情報が少ないため、推論のコストもトークンのサイズに応じて増加します。
PCAの最初の2つの成分を可視化し、高次元を2次元に削減しました。再帰的なチャンキングと比較して、文の埋め込みを使用したベクトル間の距離はより散らばっていることがわかります。つまり、チャンクはより意味的に分離されています。これは、クエリのベクトルが1つのチャンクのベクトルに近い場合、他のチャンクに近い可能性が少ないことを意味します。検索タスクでは、複数の意味的に類似したチャンクから関連情報を選択する機会が少なくなります。
チャンキングプロセスが完了したら、各チャンクのファイル名にタイムスタンプを付けて、単一のファイルとして保存し、それをS3バケットにアップロードします。
LangChainを使用したRAGベースのアプローチでインテリジェントなビデオ検索を有効にする
LangChainを使用したQ&AのためのRAGソリューションを構築するためには、通常4つのアプローチがあります:
- すべての情報をLLMに供給する
load_qa_chain
機能を使用する方法です。これは、コンテキストウィンドウのサイズとビデオおよびオーディオデータのボリュームを考慮すると、理想的なアプローチではありません。 - テキストスプリッター、テキスト埋め込みモデル、およびベクトルストアを必要とする
RetrievalQA
ツールを使用する方法です。 - テキストスプリッター、テキスト埋め込みモデル、およびベクトルストアを一度に構成する
VectorstoreIndexCreator
を使用する方法です。 - チャット履歴のメモリをQAソリューションにさらに追加する
ConversationalRetrievalChain
ツールを使用する方法です。
この記事では、明示的にカスタマイズして最適なエンジニアリングプラクティスを選択するために、2番目のアプローチを使用します。以下のセクションでは、各ステップを詳細に説明します。
ユーザーの入力クエリに基づいて関連コンテンツを検索するために、意味的な検索を使用しています。これにより、意図を理解し、有意義な検索を実行することができます。まず、事前にトレーニングされた埋め込みモデルを使用して、すべての転記テキストをベクトル空間に埋め込みます。検索時には、クエリも同じベクトル空間に埋め込まれ、ソースコーパスから最も近い埋め込みが見つかります。Amazon SageMaker JumpStartのQuestion answering using Retrieval Augmented Generation with foundation modelsで事前トレーニングされた埋め込みモデルを展開し、意味的な検索のための埋め込みを作成することができます。この記事では、オープンソースのLangChainライブラリを使用して、RAGベースのアプローチを使用したインテリジェントなビデオ検索ソリューションを作成するために類似の方法を採用します。LangChainは、言語モデルによって動作するアプリケーションを開発するためのオープンソースフレームワークです。LangChainは、さまざまなLLMに対して汎用的なインターフェースを提供します。
最初に、Amazon SageMaker JumpStartが提供する埋め込みモデルGPT-J 6BとHugging Faceの言語モデルFalcon-40B Instructを展開します。エンドポイントが準備できたら、Amazon SageMaker JumpStartのQuestion answering using Retrieval Augmented Generation with foundation modelsで説明されている手順と同様に、LangChain用のLLMモデルと埋め込みモデルを作成します。
以下のコードスニペットは、langchain.llms.sagemaker_endpoint.SagemakerEndpoint
クラスを使用してLLMモデルを作成し、ContentHandler
でLLMのリクエストとレスポンスペイロードを変換する方法を示しています:
from langchain.llms.sagemaker_endpoint import LLMContentHandler, SagemakerEndpoint
parameters = {
"max_new_tokens": 500,
}
class ContentHandler(LLMContentHandler):
content_type = "application/json"
accepts = "application/json"
def transform_input(self, prompt: str, model_kwargs={}) -> bytes:
self.len_prompt = len(prompt)
input_str = json.dumps({"inputs": prompt , "parameters": {**model_kwargs}})
return input_str.encode("utf-8")
def transform_output(self, output: bytes) -> str:
response_json = output.read()
res = json.loads(response_json)
print(res)
ans = res[0]['generated_text'][self.len_prompt:]
return ans
content_handler = ContentHandler()
sm_llm = SagemakerEndpoint(
endpoint_name=_MODEL_CONFIG_["huggingface-falcon-40b"]["endpoint_name"],
region_name=aws_region,
model_kwargs=parameters,
content_handler=content_handler,
)
SageMaker JumpStartの埋め込みモデルを使用する場合、LangChain SageMakerエンドポイント埋め込みクラスをカスタマイズして、モデルのリクエストとレスポンスをLangChainと統合する必要があります。LangChainドキュメントローダーを使用して処理済みのビデオトランスクリプトをロードし、インデックスを作成します。
LangChainのDirectoryLoader
パッケージを使用してテキストドキュメントをドキュメントローダーにロードします:
loader = DirectoryLoader("./data/demo-video-sagemaker-doc/", glob="*/.txt")
documents = loader.load()
次に、埋め込みモデルを使用してコンテンツの埋め込みを作成し、FAISSベクトルストアに埋め込みを保存してインデックスを作成します。このインデックスを使用して、入力クエリに意味的に類似する関連ドキュメントを検索します。このタスクを達成するには、VectorstoreIndexCreator
クラスを使用していくつかのコードを記述するだけです:
index_creator = VectorstoreIndexCreator(
vectorstore_cls=FAISS,
embedding=embeddings,
text_splitter=CharacterTextSplitter(chunk_size=500, chunk_overlap=0),
)
index = index_creator.from_loaders([loader])
これでインデックスを使用して関連コンテキストを検索し、正確な応答を生成するためにLLMモデルに渡すことができます:
index.query(question=question, llm=sm_llm)
SageMakerを使用して多機能のチャットボットを構築する
SageMakerで展開されたLLMを使用することで、ビジネスが高度なAIパワードアプリケーションを構築するのにこれらのモデルがどのように役立つかを示す多機能スマートチャットボットを構築することができます。この例では、チャットボットはStreamlitを使用してUIを構築し、LangChainフレームワークを使用してLLMを中心にさまざまなコンポーネントを連結します。SageMakerに展開されたテキストからテキストへの変換および音声からテキストへの変換のLLMを使用することで、このスマートチャットボットはテキストファイルとオーディオファイルからの入力を受け付けるため、ユーザーは入力ファイルとチャットすることができ、さらにこれをベースにアプリケーションを構築することができます。次のダイアグラムは、チャットボットのアーキテクチャを示しています。
ユーザーがテキストファイルをチャットボットにアップロードすると、チャットボットはコンテンツをLangChainメモリコンポーネントに配置し、ユーザーはアップロードされたドキュメントとチャットすることができます。この部分は、SageMakerを使用してドキュメントチャットボットを構築する以下のGitHubの例に触発されています。また、ユーザーがオーディオファイルをアップロードできるオプションも追加しています。その後、チャットボットは自動的にSageMakerエンドポイント上でホストされている音声からテキストへの変換モデルを呼び出して、アップロードされたオーディオファイルからテキストコンテンツを抽出し、テキストコンテンツをLangChainメモリに追加します。最後に、ユーザーが質問に回答する際にナレッジベースを使用するオプションを選択できるようにします。これは、前のダイアグラムに示されているRAGの機能です。前のセクションで提供されたノートブックに展開されているSageMakerエンドポイントを定義しています。Streamlitアプリケーションを実行する際に表示される実際のエンドポイント名を渡す必要があることに注意してください。エンドポイント名は、SageMakerコンソールのInferenceとEndpointsの下で表示されます。
Falcon_endpoint_name = os.getenv("falcon_ep_name", default="falcon-40b-instruct-12xl")
whisper_endpoint_name = os.getenv('wp_ep_name', default="whisper-large-v2")
embedding_endpoint_name = os.getenv('embed_ep_name', default="huggingface-textembedding-gpt-j-6b")
ナレッジベースオプションが選択されていない場合、会話チェーンを使用し、LangChainが提供するConversationBufferMemoryを使用してメモリコンポーネントを追加することで、ボットは現在の会話履歴を記憶することができます:
def load_chain():
memory = ConversationBufferMemory(return_messages=True)
chain = ConversationChain(llm=llm, memory=memory)
return chain
chatchain = load_chain()
前のセクションで示したRAGコンポーネントと同様のロジックを使用して、ドキュメント検索機能をコードに追加します。デモの目的で、SageMaker Studioのローカルストレージに保存されている転写テキストをドキュメントソースとしてロードします。Amazon OpenSearch Service、Amazon RDS、Amazon Kendraなど、選択したベクトルデータベースを使用して他のRAGソリューションを実装することもできます。
ユーザーが質問に対して知識ベースを使用する際、以下のコードスニペットはデータベースから関連するコンテンツを取得し、LLMが質問に答えるための追加の文脈を提供します。関連するドキュメントを検索する際に、FAISSが提供する具体的なメソッドsimilarity_search_with_score
を使用しました。これは、取得したソースファイルのメタデータと類似度スコアも提供できるためです。返される距離スコアはL2距離です。したがって、スコアが低いほど良いです。これにより、入力クエリに関連するソースビデオの正確なタイムスタンプなど、ユーザーにより多くの文脈を提供するためのオプションが増えます。ユーザーがUIからRAGオプションを選択すると、チャットボットはLangChainが提供するload_qa_chain
関数を使用して、入力プロンプトに基づいて回答を提供します。
docs = docsearch.similarity_search_with_score(user_input)
contexts = []
for doc, score in docs:
print(f"Content: {doc.page_content}, Metadata: {doc.metadata}, Score: {score}")
if score <= 0.9:
contexts.append(doc)
source.append(doc.metadata['source'].split('/')[-1])
print(f"\n INPUT CONTEXT:{contexts}")
prompt_template = """以下の文脈の断片を使用して、最後の質問に答えてください。答えがわからない場合は、わからないと言って、答えをでっち上げないでください。:\n\n{context}\n\nQuestion: {question}\nHelpful Answer:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain = load_qa_chain(llm=llm, prompt=PROMPT)
result = chain({"input_documents": contexts, "question": user_input},
return_only_outputs=True)["output_text"]
if len(source) != 0:
df = pd.DataFrame(source, columns=['knowledge source'])
st.data_editor(df)
チャットボットアプリを実行する
これでStreamlitアプリを実行する準備が整いました。SageMaker Studioでターミナルを開き、クローンしたGitHubリポジトリフォルダに移動します。必要なPythonパッケージをインストールする必要があります。これはrequirements.txt
ファイルで指定されています。Pythonの依存関係を準備するには、pip install -r requirements.txt
を実行します。
次に、環境変数内のエンドポイント名をアカウントにデプロイされたエンドポイントに基づいて更新するために、次のコマンドを実行します。 chatbot.py
ファイルを実行すると、環境変数に基づいて自動的にエンドポイント名が更新されます。
export falcon_ep_name=<アカウントにデプロイされたFalconエンドポイント名>
export wp_ep_name=<アカウントにデプロイされたWhisperエンドポイント名>
export embed_ep_name=<アカウントにデプロイされた埋め込みエンドポイント名>
streamlit run app_chatbot/chatbot.py --server.port 6006 --server.maxUploadSize 6
Streamlit UIにアクセスするには、SageMaker StudioのURLをコピーし、lab?
をproxy/[PORT NUMBER]/
で置き換えます。この投稿では、サーバーポートを6006
と指定したため、URLはhttps://<ドメインID>.studio.<リージョン>.sagemaker.aws/jupyter/default/proxy/6006/
のようになります。
アカウントの正しい値でドメインIDとリージョンを置き換えて、UIにアクセスします。
オーディオファイルでチャットする
会話のセットアップペインで、ローカルのテキストファイルまたはオーディオファイルを選択してチャットボットにアップロードします。オーディオファイルを選択すると、オーディオファイルを処理し、トランスクライブされたテキストをコンソールに表示するために自動的に音声からテキストのSageMakerエンドポイントが呼び出されます。以下のスクリーンショットに示すように、オーディオファイルに関する質問を続けることができ、チャットボットはオーディオコンテンツを記憶し、オーディオコンテンツに基づいてクエリに応答することができます。
Q&Aに知識ベースを使用する
特定のドメイン知識が必要な質問に回答する場合や、知識ベースを使用する場合は、「知識ベースを使用する」を選択してください。これにより、チャットボットは以前に構築された知識ベース(ベクトルデータベース)から関連する情報を取得し、質問に対する追加の文脈を提供するために使用できます。たとえば、知識ベースなしでチャットボットに「ファウンデーションモデルを最初にカスタマイズするための推奨方法は何ですか?」という質問をすると、チャットボットは以下のスクリーンショットに似た回答を返します。
この質問に回答するために知識ベースを使用すると、チャットボットは異なる回答を返します。デモビデオでは、SageMaker Jumpstartでモデルをカスタマイズする方法についてのSageMakerドキュメントを読みました。
出力には、対応するテキストの取得タイムスタンプと元のビデオファイル名も表示されます。ユーザーは元のビデオファイルに戻り、元のビデオ内の特定のクリップを見つけることができます。
この例のチャットボットは、ビジネスがさまざまなタイプのデジタルアセットを使用して知識ベースを強化し、従業員に多機能のサポートを提供して生産性と効率を向上させる方法を示しています。ドキュメント、オーディオおよびビデオデータセット、さらには画像データセットから知識データベースを構築し、すべてのリソースを統合することができます。SageMakerは高度なMLプラットフォームとして機能し、MLライフサイクル全体をカバーするSageMakerサービスの幅広さと深さにより、プロジェクトのアイデアを製品化するスピードを加速させることができます。
クリーンアップ
コストを節約するために、投稿の一部として展開したすべてのリソースを削除してください。提供されたノートブックのクリーンアップセクションに従ってプログラムでリソースを削除するか、SageMakerコンソールを使用して作成したSageMakerエンドポイントを削除することができます。
結論
LLMによって駆動される生成型AIモデルの登場は、ビジネスが情報から洞察を獲得し適用する方法を革新しました。この文脈の中で、ビデオやオーディオコンテンツを含むデジタルアセットは、製品、サービス、ブランドアイデンティティの視覚的な表現として重要な役割を果たしています。これらのアセット内の特定のコンテンツを効率的に検索し見つけることは、ワークフローの最適化、コラボレーションの向上、意図したオーディエンスに合わせた体験の提供にとって重要です。SageMakerの生成型AIモデルの力を活用することで、ビジネスはビデオやオーディオリソースのフルポテンシャルを引き出すことができます。生成型AIモデルの統合により、企業は効率的でインテリジェントな検索ソリューションを構築し、ユーザーがデジタルアセットから関連性の高いコンテキスト情報にアクセスできるようにすることができます。これにより、デジタルランドスケープにおける価値を最大化し、ビジネスの成功を促進することができます。
Amazon Web Servicesで生成型AIを使用する方法の詳細については、「Announcing New Tools for Building with Generative AI on AWS」を参照してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles