「Amazon SageMaker JumpStartを使用したゼロショットテキスト分類」
Zero-shot Text Classification using Amazon SageMaker JumpStart
自然言語処理(NLP)は、機械学習(ML)の分野であり、コンピュータにテキストや音声の理解能力を人間と同じように与えることに関心があります。最近では、トランスフォーマーアーキテクチャのような最新のアーキテクチャが使われており、テキスト要約、テキスト分類、エンティティ認識などのNLPの下流タスクでほぼ人間のパフォーマンスを達成しています。
大規模言語モデル(LLM)は、数億(BERT)から兆(MiCS)のパラメータを持つ大量の未ラベルテキストでトレーニングされたトランスフォーマーベースのモデルであり、そのサイズのため、単一のGPUでのトレーニングは実用的ではありません。その複雑さのため、ゼロからLLMをトレーニングすることは非常に困難なタスクであり、ほとんどの組織が負担できるものではありません。NLPの下流タスクでは、一般的な方法として、事前にトレーニングされたLLMを取り、ファインチューニングすることです。ファインチューニングの詳細については、Amazon SageMakerのファイナンシャルデータ向けAmazon SageMaker JumpStartでのFoundation Modelsのドメイン適応ファインチューニングおよびAmazon SageMakerでHugging Faceを使用したトランスフォーマーランゲージモデルのファインチューニングを参照してください。
NLPにおけるゼロショット学習は、事前にトレーニングされたLLMが明示的にトレーニングされていないタスクに対してレスポンスを生成することを可能にします(ファインチューニングなしでも)。特にテキスト分類に関して言えば、ゼロショットテキスト分類は、NLPモデルを使用してトレーニングデータに属さないクラスのテキストを分類する自然言語処理のタスクです。これは、監督分類とは異なり、NLPモデルがトレーニングデータのクラスに属するテキストのみを分類できるものです。
最近、Amazon SageMaker JumpStartでのゼロショット分類モデルのサポートを開始しました。SageMaker JumpStartは、Amazon SageMakerのMLハブであり、事前にトレーニングされたFoundation Models(FM)、LLM、ビルトインアルゴリズム、およびソリューションテンプレートにアクセスすることで、迅速にMLを始めるのに役立ちます。この記事では、SageMaker Jumpstartで事前にトレーニングされたモデルを使用してゼロショット分類を実行する方法を示します。SageMaker Jumpstart UIとSageMaker Python SDKを使用してソリューションをデプロイし、利用可能なモデルを使用して推論を実行する方法を学びます。
ゼロショット学習
ゼロショット分類は、トレーニングデータに存在しなかったクラスに属する新しい、未知の例を分類するモデルのパラダイムです。たとえば、人間の言語を理解するようにトレーニングされた言語モデルを使用して、ニューイヤーリゾリューションのツイートをキャリア
、健康
、金融
などの複数のクラスに分類することができますが、言語モデルは明示的にテキスト分類のタスクにトレーニングされていません。これは、モデルをファインチューニングする場合とは異なり、後者は追加のトレーニングを必要としません。
以下の図は、転移学習(左)とゼロショット学習(右)の違いを示しています。
Yinらは、自然言語推論(NLI)を使用してゼロショット分類器を作成するためのフレームワークを提案しました。このフレームワークは、分類されるシーケンスをNLIの前提とし、各候補ラベルから仮説を構築することで機能します。たとえば、シーケンスが政治
クラスに属するかどうかを評価したい場合、仮説を「このテキストは政治についてです。」と構築することができます。帰結と矛盾の確率は、ラベルの確率に変換されます。NLIは、前提と仮説の2つの文を考慮します。タスクは、前提が与えられた場合に仮説が真(帰結)または偽(矛盾)であるかを判断することです。以下の表にいくつかの例を示します。
前提 | ラベル | 仮説 |
ある東アジアの国の人物の制服を検査する男性。 | 矛盾 | その男性は寝ています。 |
年上の男性と年下の男性が微笑んでいます。 | 中立 | 2人の男性が床で遊ぶ猫に笑っています。 |
複数の男性がプレーしているサッカーゲーム。 | 帰結 | 何人かの男性がスポーツをしています。 |
ソリューション概要
この記事では、以下の内容について説明します:
- SageMaker JumpStart UIを使用して、事前学習済みのゼロショットテキスト分類モデルをデプロイし、短いテキストデータを使用してデプロイされたモデルで推論を実行する方法
- SageMaker Python SDKを使用して、SageMaker JumpStartの事前学習済みのゼロショットテキスト分類モデルにアクセスし、推論スクリプトを使用してリアルタイムのテキスト分類ユースケースのためにモデルをSageMakerエンドポイントにデプロイする方法
- SageMaker Python SDKを使用して、事前学習済みのゼロショットテキスト分類モデルにアクセスし、バッチテキスト分類ユースケースのためにSageMakerバッチ変換を使用する方法
SageMaker JumpStartは、一連の人気のあるMLタスクにわたるさまざまな事前学習済みモデルに対して、ワンクリックでの微調整とデプロイを提供しており、共通のビジネス問題を解決するためのエンドツーエンドのソリューションの選択肢も提供しています。これらの機能により、MLプロセスの各ステップでの負荷を軽減し、高品質なモデルの開発を簡素化し、展開までの時間を短縮することができます。JumpStartのAPIを使用すると、自分のデータセットで広範な事前学習済みモデルをプログラムでデプロイおよび微調整することができます。
JumpStartモデルハブでは、転移学習とカスタムデータセットでの微調整を可能にする多数のNLPモデルにアクセスできます。この執筆時点では、JumpStartモデルハブにはStable Diffusion、Flan T5、Alexa TM、Bloomなどの人気モデルを含む300以上のテキストモデルがあります。
このセクションの手順に従うと、AWSアカウントに費用がかかるインフラストラクチャがデプロイされますので注意してください。
スタンドアロンのゼロショットテキスト分類モデルのデプロイ
このセクションでは、SageMaker JumpStartを使用してゼロショット分類モデルをデプロイする方法を説明します。Amazon SageMaker StudioのJumpStartランディングページから事前学習済みモデルにアクセスできます。以下の手順を完了してください:
- SageMaker Studioで、JumpStartランディングページを開きます。SageMaker JumpStartへのナビゲーションの詳細については、「JumpStartの開き方と使用方法」を参照してください。
- Text Modelsのカルーセル内で、「Zero-Shot Text Classification」モデルカードを探します。
- View modelを選択して、
facebook-bart-large-mnli
モデルにアクセスします。または、検索バーでゼロショット分類モデルを検索し、SageMaker JumpStartのモデルに移動できます。 - デプロイ構成、SageMakerホスティングインスタンスタイプ、エンドポイント名、Amazon Simple Storage Service(Amazon S3)バケット名、およびその他の必要なパラメータを指定します。
- オプションで、AWS Identity and Access Management(IAM)ロール、VPC設定、およびAWS Key Management Service(AWS KMS)暗号化キーなどのセキュリティ設定を指定できます。
- Deployを選択してSageMakerエンドポイントを作成します。
この手順には数分かかります。完了すると、ゼロショット分類モデルをホストするSageMakerエンドポイントで推論を実行できます。
次のビデオでは、このセクションの手順の実際の操作方法を説明しています。
SageMaker SDKを使用してJumpStartをプログラムで使用する
SageMaker StudioのSageMaker JumpStartセクションのクイックスタートソリューションの下に、ソリューションテンプレートがあります。SageMaker JumpStartのソリューションテンプレートは、多くの一般的なMLユースケースに対するワンクリックのエンドツーエンドソリューションです。この執筆時点で、需要予測、詐欺検出、個別の推奨など、複数のユースケースに対して20以上のソリューションが利用可能です。
「Hugging Faceを使用したゼロショットテキスト分類」ソリューションは、特定のラベルのためのモデルのトレーニングが必要なく、事前学習済みのテキスト分類器を使用してテキストを分類する方法を提供します。このソリューションのデフォルトのゼロショット分類モデルは、facebook-bart-large-mnli(BART)モデルです。このソリューションでは、2015年の新年の抱負データセットを使用して抱負を分類します。ソリューションのアセットには、Resolution_Category
(正解ラベル)とtext
のカラムのみを含んだ元のデータセットのサブセットが含まれています。
入力データにはテキスト文字列、分類のための希望するカテゴリのリスト、および同期(リアルタイム)推論の場合に分類がマルチラベルかどうかを示すものが含まれます。非同期(バッチ)推論の場合、テキスト文字列のリスト、各文字列のカテゴリのリスト、および分類がマルチラベルかどうかをJSON行形式のテキストファイルで提供します。
推論の結果は、次のスクリーンショットのようなJSONオブジェクトです。
元のテキストはsequence
フィールドにあり、テキスト分類に使用されるラベルはlabels
フィールドにあり、各ラベルに割り当てられた確率(出現順に同じ順序で)はscores
フィールドにあります。
Hugging Faceソリューションを使用してゼロショットテキスト分類を展開するには、次の手順を完了します:
- SageMaker JumpStartランディングページで、ナビゲーションペインでモデル、ノートブック、ソリューションを選択します。
- ソリューションセクションで、すべてのソリューションを探索を選択します。
- ソリューションページで、Hugging Faceモデルカードのゼロショットテキスト分類を選択します。
- デプロイの詳細を確認し、同意する場合は開始を選択します。
デプロイでは、リアルタイム推論のためのSageMakerリアルタイムエンドポイントとバッチ変換結果を格納するためのS3バケットがプロビジョニングされます。
次のダイアグラムは、この方法のアーキテクチャを示しています。
ゼロショット分類モデルを使用したリアルタイム推論の実行
このセクションでは、Python SDKを使用してSageMakerエンドポイントを介してリアルタイムでゼロショットテキスト分類(利用可能なモデルのいずれかを使用)を実行する方法について説明します。
-
まず、モデルへの推論ペイロードリクエストを設定します。これはモデルに依存しますが、BARTモデルの場合、入力は次の構造のJSONオブジェクトです:
{ "inputs": # 分類するテキスト "parameters": { "candidate_labels": # テキスト分類に使用するラベルのリスト "multi_label": True | False } }
-
BARTモデルは
candidate_labels
で明示的にトレーニングされていません。テキストシーケンスを未知のクラスに分類するためにゼロショット分類技術を使用します。次のコードは、新年の抱負データセットと定義されたクラスを使用した例です:classification_categories = ['Health', 'Humor', 'Personal Growth', 'Philanthropy', 'Leisure', 'Career', 'Finance', 'Education', 'Time Management'] data_zero_shot = { "inputs": "#newyearsresolution :: read more books, no scrolling fb/checking email b4 breakfast, stay dedicated to pt/yoga to squash my achin' back!", "parameters": { "candidate_labels": classification_categories, "multi_label": False } }
-
次に、ゼロショットペイロードを使用してSageMakerエンドポイントを呼び出すことができます。SageMakerエンドポイントは、SageMaker JumpStartソリューションの一部としてデプロイされます。
response = runtime.invoke_endpoint(EndpointName=sagemaker_endpoint_name, ContentType='application/json', Body=json.dumps(payload)) parsed_response = json.loads(response['Body'].read())
-
推論応答オブジェクトには、元のシーケンス、スコアの高い順にソートされたラベル、および各ラベルごとのスコアが含まれています:
{'sequence': "#newyearsresolution :: read more books, no scrolling fb/checking email b4 breakfast, stay dedicated to pt/yoga to squash my achin' back!", 'labels': ['Personal Growth', 'Health', 'Time Management', 'Leisure', 'Education', 'Humor', 'Career', 'Philanthropy', 'Finance'], 'scores': [0.4198768436908722, 0.2169460505247116, 0.16591140627861023, 0.09742163866758347, 0.031757451593875885, 0.027988269925117493, 0.015974704176187515, 0.015464971773326397, 0.008658630773425102]}
Python SDKを使用してSageMakerのバッチ変換ジョブを実行する
このセクションでは、SageMaker Python SDKを使用して、ゼロショット分類モデルfacebook-bart-large-mnli
を使用したバッチ変換推論を実行する方法について説明します。以下の手順を実行してください:
-
JSON lines形式で入力データをフォーマットし、ファイルをAmazon S3にアップロードします。SageMakerバッチ変換は、S3ファイルにアップロードされたデータポイントで推論を実行します。
-
以下のパラメータを使用して、モデルデプロイメントアーティファクトをセットアップします:
-
model_id –
huggingface-zstc-facebook-bart-large-mnli
を使用します。 -
deploy_image_uri –
image_uris
Python SDK関数を使用して、model_id
のための事前構築されたSageMaker DockerイメージのAmazon Elastic Container Registry(Amazon ECR)URIを取得します。 -
deploy_source_uri –
script_uris
ユーティリティAPIを使用して、事前学習モデルの推論を実行するためのスクリプトが含まれるS3 URIを取得します。script_scope
をinference
と指定します。 -
model_uri – 指定された
model_id
のAmazon S3からモデルアーティファクトを取得するためにmodel_uri
を使用します。#imports from sagemaker import image_uris, model_uris, script_uris, hyperparameters #set model id and version model_id, model_version, = ( "huggingface-zstc-facebook-bart-large-mnli", "*", ) # Retrieve the inference Docker container URI. This is the base Hugging Face container image for the default model above. deploy_image_uri = image_uris.retrieve( region=None, framework=None, # Automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type="ml.g4dn.xlarge", ) # Retrieve the inference script URI. This includes all dependencies and scripts for model loading, inference handling, and more. deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference") # Retrieve the model URI. This includes the pre-trained model and parameters. model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")
-
-
HF_TASK
を使用して、Hugging Face transformersパイプラインのタスクを定義し、HF_MODEL_ID
を使用してテキストの分類に使用するモデルを定義します:# Hub model configuration <https://huggingface.co/models> hub = { 'HF_MODEL_ID':'facebook/bart-large-mnli', # The model_id from the Hugging Face Hub 'HF_TASK':'zero-shot-classification' # The NLP task that you want to use for predictions }
タスクの完全なリストについては、Hugging FaceドキュメントのPipelinesを参照してください。
-
SageMakerバッチ変換ジョブでデプロイするHugging Faceモデルオブジェクトを作成します:
# Create HuggingFaceModel class huggingface_model_zero_shot = HuggingFaceModel( model_data=model_uri, # トレーニング済みのSageMakerモデルへのパス env=hub, # Hubからモデルをロードするための設定 role=role, # エンドポイントを作成するためのIAMロール transformers_version="4.17", # 使用されるTransformersのバージョン pytorch_version="1.10", # 使用されるPyTorchのバージョン py_version='py38', # 使用されるPythonのバージョン )
-
バッチジョブを実行するためのトランスフォームを作成します:
# Create transformer to run a batch job batch_job = huggingface_model_zero_shot.transformer( instance_count=1, instance_type='ml.m5.xlarge', strategy='SingleRecord', assemble_with='Line', output_path=s3_path_join("s3://",sagemaker_config['S3Bucket'],"zero_shot_text_clf", "results"), # 入力と同じS3パスを使用して出力を保存します )
-
S3データを入力としてバッチ変換ジョブを開始します:
batch_job.transform( data=data_upload_path, content_type='application/json', split_type='Line', logs=False, wait=True )
バッチ処理のジョブは、SageMakerコンソールで監視することができます(ナビゲーションペインの推論の下にあるバッチ変換ジョブを選択します)。ジョブが完了したら、output_path
で指定されたS3ファイルでモデルの予測結果を確認できます。
SageMaker JumpStartで利用可能なすべての事前学習済みモデルのリストについては、「Built-in Algorithms with pre-trained Model Table」を参照してください。ゼロショットテキスト分類を行うことができるモデルをすべて検索バーでキーワード「zstc」(ゼロショットテキスト分類の略)を使用して検索します。
クリーンアップ
ノートブックの実行が完了したら、このガイドで展開されたアセットによって発生するコストが停止するように、プロセスで作成されたすべてのリソースを削除してください。デプロイされたリソースをクリーンアップするためのコードは、ゼロショットテキスト分類のソリューションとモデルに関連付けられたノートブックに提供されています。
デフォルトのセキュリティ設定
SageMaker JumpStartモデルは、以下のデフォルトのセキュリティ設定を使用して展開されます:
- モデルはデフォルトのSageMaker実行ロールで展開されます。独自のロールを指定するか、既存のロールを使用することもできます。詳細については、SageMakerロールを参照してください。
- モデルはVPCに接続せず、モデル用にVPCがプロビジョニングされません。セキュリティオプション内からモデルに接続するためのVPC構成を指定することができます。詳細については、「Give SageMaker Hosted Endpoints Access to Resources in Your Amazon VPC」を参照してください。
- デフォルトのKMSキーがモデルのアーティファクトの暗号化に使用されます。独自のKMSキーを指定するか、既存のキーを使用することもできます。詳細については、「Using server-side encryption with AWS KMS keys (SSE-KMS)」を参照してください。
SageMakerのセキュリティ関連トピックについて詳しくは、「Configure security in Amazon SageMaker」を参照してください。
結論
この記事では、SageMaker JumpStart UIを使用してゼロショット分類モデルを展開し、展開されたエンドポイントを使用して推論を行う方法を紹介しました。SageMaker JumpStart New Year’s resolutionsソリューションを使用して、SageMaker Python SDKを使用してエンドツーエンドのソリューションを構築し、ゼロショット分類アプリケーションを実装する方法を示しました。SageMaker JumpStartは、コンピュータビジョン、自然言語処理、レコメンデーションシステムなどのタスクに対する数百の事前学習済みモデルとソリューションへのアクセスを提供しています。自分自身でソリューションを試してみて、ご意見をお聞かせください。
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
- 「機械学習の方法の比較:従来の方法と費用削減の代替方法 – 本当に効果があるのはどれか?」
- 「大規模言語モデルの謎解き:インフルエンス関数とそのスケーラビリティの深い探求」
- ロボットの再定義:パデュー大学の革新的なマシンビジョンソリューション
- AgentBenchをご紹介します:さまざまな状況で大規模な言語モデルをエージェントとして評価するために開発された多次元ベンチマークです
- 「仮想マシンのゲームパフォーマンスを向上させるためのガイド」
- ホームブリューや仮想マシンなしでMacBook M1またはM2にHadoopをインストールする方法
- 「多言語音声技術の障壁の克服:トップ5の課題と革新的な解決策」