独自のデータを使用した要約と質問応答に生成 AI 基盤モデルを使用する | アマゾン ウェブ サービス

独自のデータを使用した要約と質問応答に生成 AI 基盤モデルを使用する | アマゾン ウェブ サービス

大規模言語モデル (LLM) を使用すると、複雑なドキュメントを分析し、質問に対する要約と回答を提供できます。 ポスト ドメイン適応 財務データの Amazon SageMaker JumpStart での基盤モデルの微調整 独自のデータセットを使用して LLM を微調整する方法について説明します。 安定した LLM を取得したら、その LLM をビジネス ユーザーに公開して、数百ページにもなる新しいドキュメントを処理することをお勧めします。 この投稿では、ビジネス ユーザーが任意の長さの PDF ドキュメントを処理できるようにするリアルタイム ユーザー インターフェイスを構築する方法を示します。 ファイルが処理されたら、文書を要約したり、内容について質問したりできます。 この投稿で説明されているサンプル ソリューションは、次のサイトから入手できます。 GitHubの.

財務書類の操作

四半期収益報告書や株主向けの年次報告書などの財務諸表は、多くの場合、数十ページまたは数百ページに及びます。 これらの文書には、免責事項や法律用語などの定型文が多数含まれています。 これらの文書の XNUMX つから重要なデータ ポイントを抽出したい場合は、興味深い事実を特定できるように、時間と定型言語の知識が必要です。 そしてもちろん、一度も見たことのない文書について LLM に質問することはできません。

要約に使用される LLM には、モデルに渡されるトークン (文字) の数に制限があり、一部の例外を除いて、通常は数千トークンを超えません。 これにより、通常、長い文書を要約することができなくなります。

私たちのソリューションは、LLM の最大トークン シーケンス長を超えるドキュメントを処理し、そのドキュメントを LLM が質問応答に利用できるようにします。

ソリューションの概要

私たちのデザインには XNUMX つの重要な要素があります。

  • ビジネス ユーザーが PDF をアップロードして処理できるインタラクティブな Web アプリケーションがあります。
  • langchain ライブラリを使用して、大きな PDF をより管理しやすいチャンクに分割します。
  • 検索拡張生成技術を使用して、LLM がこれまでに見たことのない新しいデータについてユーザーが質問できるようにします。

次の図に示すように、React JavaScript で実装されたフロントエンドを使用します。 Amazon シンプル ストレージ サービス (Amazon S3) バケットの前にある アマゾンCloudFrontの。 フロントエンド アプリケーションを使用すると、ユーザーは PDF ドキュメントを Amazon S3 にアップロードできます。 アップロードが完了したら、次の機能を利用してテキスト抽出ジョブをトリガーできます。 アマゾンテキストラック。 後処理の一環として、 AWSラムダ 関数は、ページ境界を示す特別なマーカーをテキストに挿入します。 そのジョブが完了したら、テキストを要約したり、テキストに関する質問に答えたりする API を呼び出すことができます。

独自のデータを使用した要約と質問応答に生成 AI 基盤モデルを使用する |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。

これらの手順の一部には時間がかかる場合があるため、アーキテクチャでは分離された非同期アプローチが使用されます。 たとえば、ドキュメントを要約する呼び出しは、メッセージを Amazon シンプル キュー サービス (Amazon SQS) キュー。 別の Lambda 関数がそのメッセージを取得し、 Amazon エラスティック コンテナ サービス (アマゾン ECS) AWSファーゲート タスク。 Fargate タスクは アマゾンセージメーカー 推論エンドポイント。 非常に長い PDF を要約するには、Lambda 関数が使用できる以上の時間とメモリが必要になる可能性があるため、ここでは Fargate タスクを使用します。 要約が完了すると、フロントエンド アプリケーションは結果を Amazon DynamoDB 列で番号の横にあるXをクリックします。

要約には、AI21 の Summarize モデルを使用します。これは、 Amazon SageMaker ジャンプスタート。 このモデルは最大 10,000 ワード (約 40 ページ) のドキュメントを処理しますが、langchain のテキスト スプリッターを使用して、LLM への各要約呼び出しの長さが 10,000 ワード以下であることを確認します。 テキスト生成には Cohere の Medium モデルを使用し、埋め込みには GPT-J を、どちらも JumpStart 経由で使用します。

要約処理

大きなドキュメントを処理する場合は、ドキュメントをより小さな部分に分割する方法を定義する必要があります。 Amazon Textract からテキスト抽出結果を取得すると、大きなテキストの塊 (構成可能なページ数)、個々のページ、および改行にマーカーを挿入します。 Langchain はこれらのマーカーに基づいて分割し、トークン制限を下回る小さなドキュメントを組み立てます。 次のコードを参照してください。

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

要約チェーン内の LLM は、SageMaker エンドポイントの薄いラッパーです。

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

質問に答える

検索拡張生成方法では、最初に文書を小さなセグメントに分割します。 各セグメントのエンベディングを作成し、langchain のインターフェイスを介してオープンソースの Chroma ベクトル データベースに保存します。 データベースを AmazonElasticファイルシステム 後で使用するための (Amazon EFS) ファイル システム。 次のコードを参照してください。

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

埋め込みの準備ができたら、ユーザーは質問することができます。 ベクトル データベースを検索して、質問に最もよく一致するテキスト チャンクを見つけます。

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

最もよく一致するチャンクを取得し、それをテキスト生成モデルのコンテキストとして使用して質問に答えます。

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

ユーザーエクスペリエンス

LLM は高度なデータ サイエンスを表しますが、LLM のユースケースのほとんどは、最終的には非技術ユーザーとの対話を伴います。 このサンプル Web アプリケーションは、ビジネス ユーザーが新しい PDF ドキュメントをアップロードして処理できる対話型の使用例を処理します。

次の図は、ユーザー インターフェイスを示しています。 ユーザーはまず PDF をアップロードします。 ドキュメントが Amazon S3 に保存されると、ユーザーはテキスト抽出ジョブを開始できるようになります。 それが完了すると、ユーザーは要約タスクを呼び出したり、質問したりできます。 ユーザー インターフェイスには、チャンク サイズやチャンクのオーバーラップなどのいくつかの高度なオプションが表示されます。これは、新しいドキュメントでアプリケーションをテストする上級ユーザーにとって役立ちます。

ユーザーインターフェース

次のステップ

LLM は、重要な新しい情報検索機能を提供します。 ビジネス ユーザーは、これらの機能に簡単にアクセスできる必要があります。 今後の取り組みについては、次の XNUMX つの方向性を考慮する必要があります。

  • Jumpstart 基盤モデルですでに利用可能な強力な LLM を活用してください。 わずか数行のコードで、サンプル アプリケーションは AI21 と Cohere の高度な LLM をデプロイし、テキストの要約と生成に利用できます。
  • これらの機能を技術者以外のユーザーも利用できるようにします。 PDF ドキュメントを処理するための前提条件はドキュメントからテキストを抽出することであり、要約ジョブの実行には数分かかる場合があります。 そのためには、非同期バックエンド処理機能を備えたシンプルなユーザー インターフェイスが必要になります。これは、Lambda や Fargate などのクラウドネイティブ サービスを使用して簡単に設計できます。

PDF ドキュメントは半構造化情報であることにも注意してください。 セクション見出しなどの重要な手がかりは、フォント サイズやその他の視覚的な指標に依存しているため、プログラムで識別するのが困難です。 情報の基礎となる構造を特定すると、少なくとも LLM が無制限の長さの入力を処理できるようになるまでは、LLM がデータをより正確に処理するのに役立ちます。

まとめ

この投稿では、ビジネス ユーザーが要約や質問に答えるために PDF ドキュメントをアップロードおよび処理できる対話型 Web アプリケーションを構築する方法を説明しました。 Jumpstart 基盤モデルを利用して高度な LLM にアクセスし、テキスト分割と検索拡張生成技術を使用して長いドキュメントを処理し、LLM が情報として利用できるようにする方法を確認しました。

現時点では、これらの強力な機能をユーザーが利用できるようにしない理由はありません。 を使用し始めることをお勧めします。 ジャンプスタート基盤モデル


著者,

著者の写真ランディ・デフォー AWS のシニア プリンシパル ソリューション アーキテクトです。 彼はミシガン大学で修士号を取得しており、そこで自動運転車のコンピューター ビジョンに取り組みました。 彼はコロラド州立大学で MBA も取得しています。 Randy は、ソフトウェア エンジニアリングから製品管理に至るまで、テクノロジー分野でさまざまな役職を歴任してきました。 氏は 2013 年にビッグデータ分野に参入し、引き続きその分野の探索を続けています。 彼は ML 分野のプロジェクトに積極的に取り組んでおり、Strata や GlueCon などの数多くのカンファレンスで講演を行っています。

タイムスタンプ:

より多くの AWS機械学習