「Amazon SageMaker JumpStartを使用してFalconでHCLS文書要約アプリケーションを作成する」

「Amazon SageMaker JumpStartを活用してFalconでHCLS文書要約アプリケーションを開発する方法」

ヘルスケアとライフサイエンス(HCLS)の顧客は、彼らのデータからより多くの情報を得るために、生成的AIをツールとして採用しています。使用例には、ドキュメントの要約があります。これは、読者が文書の重要なポイントに焦点を当てるのを助け、非構造化のテキストを標準化された形式に変換して重要な属性を強調するためのものです。ユニークなデータ形式と厳格な規制要件があるため、顧客は、最もパフォーマンスが高く、コスト効果の高いモデルを選択する選択肢を求めています。また、彼らのビジネスユースケースに合わせるための必要なカスタマイズ(ファインチューニング)を行う能力も求めています。この記事では、Amazon SageMaker JumpStartを使用してFalconの大規模言語モデル(LLM)を展開し、LangChainとPythonを使用して長いドキュメントを要約する方法について説明します。

ソリューションの概要

Amazon SageMaker は、製品の推奨、パーソナライゼーション、インテリジェントショッピング、ロボット工学、音声アシスタントデバイスなど、実世界の機械学習(ML)アプリケーションの開発におけるAmazonの20年以上の経験に基づいて構築されています。 SageMakerは、データサイエンティスト、MLエンジニア、ビジネスアナリストがMLでイノベーションするためのツールを提供するHIPAA対応のマネージドサービスです。 SageMakerには、共同作業用に特別に設計された統合開発環境(IDE)であるAmazon SageMaker Studioが含まれており、それ自体がSageMaker JumpStartと呼ばれる統合ハブ内のさまざまなクイックスタートソリューションと事前トレーニング済みのMLモデルを含んでいます。 SageMaker JumpStartを使用すると、Falcon LLMなどの事前トレーニング済みモデルと、サンプルノートブックとSDKサポートが組み込まれたハブ内の統合開発環境(IDE)を使用して、これらの強力な変換モデルを実験して展開することができます。 SageMaker StudioとSageMaker JumpStartを使用して、AWSアカウント内で独自の生成モデルを展開してクエリを実行することができます。

推論ペイロードデータがVPCを離れないようにすることもできます。モデルを単一テナントエンドポイントとしてプロビジョニングし、ネットワーク分離を使用して展開できます。さらに、SageMaker JumpStart内のプライベートモデルハブ機能を使用して、セキュリティ要件を満たす選択されたモデルのセットを編集および管理し、承認されたモデルをそこに保存することができます。 SageMakerは、HIPAA BAA、SOC123、およびHITRUST CSFの対象です。

Falcon LLMは、Technology Innovation Institute(TII)の研究者がAWSを使用して1兆トークン以上でトレーニングした大規模言語モデルです。 Falconにはさまざまなバリエーションがあり、その主要な構成要素であるFalcon 40BとFalcon 7Bは、それぞれ400億と70億のパラメータから構成されています。それらは、命令の従属などの特定のタスク向けに調整されたバージョンがあります。 Falconは、テキスト要約、感情分析、問題解決、会話など、さまざまなタスクで優れたパフォーマンスを発揮します。 この記事では、テキスト要約を実験するために、あなたのAWSアカウントにFalcon LLMを展開するための手順を提供します。

SageMaker JumpStartモデルハブには、各モデルを展開してクエリするための完全なノートブックが含まれています。執筆時点では、SageMaker JumpStartモデルハブには6つのバージョンのFalconがあります。それらは、Falcon 40B Instruct BF16、Falcon 40B BF16、Falcon 180B BF16、Falcon 180B Chat BF16、Falcon 7B Instruct BF16、およびFalcon 7B BF16です。この記事では、Falcon 7B Instructモデルを使用します。

次のセクションでは、Falcon 7BをSageMaker Jumpstartで展開してドキュメント要約を開始する方法を示します。

事前準備

このチュートリアルでは、SageMakerドメインを持つAWSアカウントが必要です。まだSageMakerドメインを持っていない場合は、Amazon SageMakerドメインに登録して作成してください。

SageMaker JumpStartを使用してFalcon 7Bを展開する

モデルを展開するには、次の手順を完了します:

  1. SageMakerコンソールからSageMaker Studio環境に移動します。
  2. IDE内のナビゲーションペインのSageMaker JumpStartの下にあるモデル、ノートブック、ソリューションを選択します。
  3. Falcon 7B Instructモデルを推論用のエンドポイントに展開します。

SageMaker JumpStartからFalcon-7B-Instructを選択する

これにより、Falcon 7B Instruct BF16モデルのモデルカードが開かれます。このページでは、デプロイトレーニングのオプションの他に、SageMaker Studioでのサンプルノートブックを開くためのリンクも見つけることができます。この投稿では、サンプルノートブックを使用してモデルを展開します。

  1. ノートブックを開くを選択します。

SageMaker JumpStartモデル展開ページ

  1. ノートブックの最初の4つのセルを実行して、Falcon 7B Instructエンドポイントを展開します。

デプロイされたJumpStartモデルは展開されたJumpStartアセットページで確認できます。

  1. ナビゲーションペインのSageMaker Jumpstartの下にある展開されたJumpStartアセットを選択します。
  2. モデルエンドポイントのタブを選択して、エンドポイントのステータスを表示します。

SageMaker JumpStart展開モデルページ

Falcon LLMエンドポイントが展開されたら、モデルをクエリする準備ができています。

最初のクエリを実行する

クエリを実行するには、次の手順を完了します:

  1. ファイルメニューから新規ノートブックを選択して、新しいノートブックを開きます。

また、完成したノートブックはこちらからダウンロードすることもできます。

SageMaker Studioノートブックを作成する

  1. 表示されたら、イメージ、カーネル、インスタンスタイプを選択します。この記事では、データサイエンス3.0イメージ、Python 3カーネル、ml.t3.mediumインスタンスを選択します。

SageMaker Studioノートブックカーネルの設定

  1. 最初のセルに次の2行を入力してBoto3とJSONモジュールをインポートします:
import jsonimport boto3
  1. Shift + Enterを押してセルを実行します。
  2. 次に、エンドポイントを呼び出す関数を定義することができます。この関数はディクショナリペイロードを受け取り、それを使ってSageMakerランタイムクライアントを呼び出します。そして、レスポンスを逆シリアル化し、入力と生成されたテキストを印刷します。
newline、bold、unbold = '\n'、'\033[1m'、'\033[0m'endpoint_name = 'ENDPOINT_NAME'def query_endpoint(payload):     client = boto3.client("runtime.sagemaker")     response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType="application/json", Body=json.dumps(payload).encode("utf-8"))     model_predictions = json.loads(response["Body"].read())     generated_text = model_predictions[0]["generated_text"]     print (         f"入力テキスト:{payload["inputs"]}{newline}"         f"生成されたテキスト:{bold}{generated_text}{unbold}{newline}")

ペイロードには、プロンプトやモデルに渡される推論パラメーターが含まれています。

  1. これらのパラメーターを使用して、モデルの出力をユースケースに合わせて微調整できます:
payload = {     "inputs": "ジラファトロンは、地球上で最も素晴らしい動物であるキリンに夢中です。ジラファトロンは、他のすべての動物がキリンの壮大な威厳と比べて無関係であると信じています。\nダニエル: こんにちは、ジラファトロン!\nジラファトロン:",     "parameters":{         "max_new_tokens": 50,         "return_full_text": False,         "do_sample": True,         "top_k":10         }}

要約プロンプトでクエリを実行

この投稿では、要約をデモンストレーションするためにサンプルの研究論文を使用しています。例のテキストファイルは、バイオ医学文献の自動テキスト要約に関するものです。以下の手順を完了してください:

  1. PDFをダウンロードして、テキストをdocument.txtという名前のファイルにコピーします。
  2. SageMaker Studioで、アップロードアイコンを選択し、ファイルをSageMaker Studioインスタンスにアップロードします。
SageMaker Studioへのファイルのアップロード

Falcon LLMは、テキスト要約に対するサポートを提供しています。

  1. 次の関数を作成して、document.txtを要約するためにプロンプトエンジニアリングの技術を使用しましょう:
def summarize(text_to_summarize):     summarization_prompt = """以下のテキストを処理し、後続の指示を実行します:{text_to_summarize}前のテキストの要約を提供してください。"""     payload = {         "inputs": summarization_prompt,         "parameters":{             "max_new_tokens": 150,             "return_full_text": False,             "do_sample": True,             "top_k":10             }     }     response = query_endpoint(payload)     print(response)     with open("document.txt") as f:     text_to_summarize = f.read()summarize(text_to_summarize)

長いドキュメントの場合、エラーが表示されることに注意してください。Falconを含むすべてのLLMには、入力として渡されるトークンの数に制限があります。この制限を回避するために、LangChainの拡張要約機能を使用できます。これにより、はるかに大きな入力がLLMに渡されることができます。

要約チェーンのインポートと実行

LangChainは、開発者やデータサイエンティストが複雑なMLインタラクションを管理せずにカスタムの生成アプリケーションを素早く構築、チューニング、展開できるオープンソースのソフトウェアライブラリです。ジェネレーティブAI言語モデルの一般的なユースケースの多くをいくつかのコード行で抽象化するために使用されます。LangChainのAWSサービスへの対応には、SageMakerエンドポイントのサポートも含まれています。

LangChainは、LLMへのアクセスが容易なインターフェースを提供します。プロンプトテンプレートやプロンプトチェーンのツールなどの機能があります。これらのチェーンは、言語モデルが単一の呼び出しでサポートすることのできるテキストドキュメントよりも長いテキストドキュメントの要約に使用できます。長いドキュメントを要約するためには、マップリデュース戦略を使用して、管理可能なチャンクに分割し、要約して、結合し(必要に応じて再度要約する)ことができます。

  1. LangChainをインストールしましょう:
%pip install langchain
  1. 関連モジュールをインポートし、長いドキュメントをチャンクに分割します:
import langchainfrom langchain import SagemakerEndpoint, PromptTemplatefrom langchain.llms.sagemaker_endpoint import LLMContentHandlerfrom langchain.chains.summarize import load_summarize_chainfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.docstore.document import Documenttext_splitter = RecursiveCharacterTextSplitter(                    chunk_size = 500,                    chunk_overlap  = 20,                    separators = [" "],                    length_function = len                )input_documents = text_splitter.create_documents([text_to_summarize])
  1. LangChainがFalconと効果的に動作するために、有効な入力と出力のデフォルトコンテンツハンドラクラスを定義する必要があります:
class ContentHandlerTextSummarization(LLMContentHandler):    content_type = "application/json"    accepts = "application/json"    def transform_input(self, prompt: str, model_kwargs={}) -> bytes:        input_str = json.dumps({"inputs": prompt, **model_kwargs})        return input_str.encode("utf-8")    def transform_output(self, output: bytes) -> json:        response_json = json.loads(output.read().decode("utf-8"))        generated_text = response_json[0]['generated_text']        return generated_text.split("summary:")[-1]    content_handler = ContentHandlerTextSummarization()
  1. LangChainでマップリデュースの要約手法を使用する場合、PromptTemplateオブジェクトをカスタムプロンプトとして定義することができます。これはオプションの手順ですが、要約チェーンの読み込み呼び出し内のパラメータが未定義の場合、デフォルトでマッピングプロンプトと結合プロンプトが提供されます。
map_prompt = """このテキストの簡潔な要約を数文で書いてください:{text}簡潔な要約:"""map_prompt_template = PromptTemplate(                        template=map_prompt,                         input_variables=["text"]                      )combine_prompt = """以下の要約を結合し、数文でそれらの要約の最終要約を生成してください:{text}最終要約:"""combine_prompt_template = PromptTemplate(                            template=combine_prompt,                             input_variables=["text"]                          )      
  1. LangChainはSageMaker推論エンドポイントでホストされるLLMをサポートしているため、AWS Python SDKの代わりにLangChainを介してアクセス性を向上させるために接続を初期化することができます:
summary_model = SagemakerEndpoint(                    endpoint_name = endpoint_name,                    region_name= "us-east-1",                    model_kwargs= {},                    content_handler=content_handler                )
  1. 最後に、次のコードを使用して要約チェーンをロードし、入力ドキュメントに対して要約を実行することができます:
summary_chain = load_summarize_chain(llm=summary_model,                                     chain_type="map_reduce",                                      map_prompt=map_prompt_template,                                     combine_prompt=combine_prompt_template,                                     verbose=True                                    ) summary = summary_chain({"input_documents": input_documents, 'token_max': 700}, return_only_outputs=True)print(summary["output_text"])   

verboseパラメータがTrueに設定されているため、マップリデュース手法の中間出力がすべて表示されます。これは最終要約にたどり着くまでのイベントのシーケンスを追いかけるのに役立ちます。このマップリデュース手法により、モデルの最大入力トークン制限よりもはるかに長いドキュメントを効果的に要約することができます。

クリーンアップ

推論エンドポイントの使用が終わったら、不要な費用を発生させないように削除することが重要です。次のコードを使用して削除します:

client = boto3.client('runtime.sagemaker')client.delete_endpoint(EndpointName=endpoint_name)

SageMaker JumpStartで他の基盤モデルを使用する

文書要約にSageMaker JumpStartで利用可能な他の基盤モデルを活用するためには、セットアップとデプロイに最小限の手間が必要です。LLMは入力と出力の形式の構造が時折異なり、SageMaker JumpStartに新しいモデルとプリメイドソリューションが追加されると、タスクの実装に応じて以下のコードの変更が必要になる場合があります:

  • LangChainを使用しないsummarize()メソッドを介して要約を実行している場合は、payloadパラメータのJSON構造とquery_endpoint()関数内のresponse変数の処理を変更する必要があります
  • LangChainのload_summarize_chain()メソッドを介して要約を実行している場合、ContentHandlerTextSummarizationクラスのtransform_input()transform_output()関数を変更して、LLMが期待するペイロードとLLMが返す出力を正しく処理する必要があります

ファンデーションモデルは、推論の速度や品質だけでなく、入力および出力形式も異なります。期待される入力および出力に関するLLMの関連情報ページを参照してください。

結論

Falcon 7B Instructモデルは、SageMaker JumpStartモデルハブで利用可能であり、さまざまなユースケースでのパフォーマンスが確認されています。この投稿は、SageMaker JumpStartを使用して独自のFalcon LLMエンドポイントを環境にデプロイし、SageMaker Studioから最初の実験を行う方法を示しており、モデルの迅速なプロトタイピングと本番環境へのシームレスな移行が可能です。FalconとLangChainを使用することで、規模に応じた長文医療およびライフサイエンス文書を効果的に要約することができます。

AWSでジェネレーティブAIを使用する方法についての詳細は、AWSにおけるジェネレーティブAIのための新ツールの発表を参照してください。この投稿で説明されている方法を使用して、医療およびライフサイエンス志向のGenAIアプリケーションの要約の証明概念の実験と構築を開始することができます。また、Amazon Bedrockが一般に利用可能となった場合、Amazon BedrockとLangChainを使用して文書の要約を実装する方法を紹介するフォローアップ投稿を公開します。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「画像のためのモダンなセマンティック検索」

「数年前の「あの一枚の写真」を見つけたいんですね場面に関するいくつかの具体的な情報を覚えているんですが、Apple Photos...

人工知能

「仕事の未来:スキルアップしないと取り残される」

AIの仕事への二重の影響、再スキル化の重要性、および労働者、企業、政府などに関連する倫理的な課題を探求してください

機械学習

「ディープランゲージモデルは、コンテキストから次の単語を予測することを学ぶことで、ますます優れてきていますこれが本当に人間の脳が行っていることなのでしょうか?」

ディープラーニングは、テキスト生成、翻訳、および補完の分野で最近大きな進歩を遂げています。周囲の文脈から単語を予測す...

機械学習

コードのための大規模な言語モデルの構築とトレーニング:StarCoderへの深い探求

イントロダクション こんにちは、テック愛好家の皆さん!今日は、大規模な言語モデル(LLM)を構築してトレーニングする魅力...

人工知能

「AIを活用したポッドキャストの始め方と成長方法」

「誰でもポッドキャストを持っているように感じるかもしれませんが、ポッドキャストを始めることはまだ大きなチャンスです特...

データサイエンス

「生成AIのためのモダンなMLOpsプラットフォーム」

ジェネレーティブAI用のモダンなMLOpsプラットフォームは、機械学習オペレーションの実践をジェネレーティブモデルの特徴とシ...