Amazon Web Services ブログ

Comprehend フライホイールを使用したAmazon Comprehendカスタムモデルの継続的な学習の簡略化

翻訳はソリューションアーキテクトの濱野谷(@yoshiehm)が担当しました。原文はこちらです。

Amazon Comprehendは、既製のインテリジェンスを備えた自然言語処理 (NLP) を使用してドキュメントの内容に関するインサイトを抽出するマネージド AI サービスです。Amazon Comprehend は、文書内のエンティティ、キーフレーズ、言語、センチメント、その他の共通要素を認識することでインサイトを高めます。
Comprehendのカスタム分類カスタムエンティティ認識を使用してカスタムモデルをトレーニングできるため、顧客は分類モデルやエンティティ認識モデルをゼロから構築するアプローチを取ることなく、要件に合わせてすぐにNLP機能を試すことができます。

現在、ユーザーはカスタムモデルの構築、トレーニング、保守に多額のリソースを投資しています。ただし、これらのモデルは現実世界の変化に強く影響を受けます。たとえば、2020年以降、COVIDは企業が文書から抽出する必要のある新しいエンティティタイプになりました。そのためには、顧客は既存のエンティティ抽出モデルを、COVIDを含む新しいトレーニングデータで再トレーニングする必要があります。カスタムComprehend ユーザーは、モデルのパフォーマンスを手動で監視してドリフトを評価し、データを管理してモデルを再トレーニングし、パフォーマンスを向上させる適切なモデルを選択する必要があります。

Comprehend フライホイールは Amazon Comprehend の新しいリソースで、時間をかけてカスタムモデルを改善するプロセスを簡略化します。フライホイールを使用して、新しいカスタムモデルバージョンのトレーニングと評価に関連するタスクを調整できます。フライホイールを作成して既存のトレーニング済みモデルを使用することも、Amazon Comprehend でフライホイール用の新しいモデルを作成してトレーニングすることもできます。フライホイールはアカウントに(Amazon S3に)データレイクを作成し、モデルのすべてのバージョンのすべてのトレーニングおよびテストデータを管理および保存します。データセットを作成することで、定期的に新しいラベル付きデータ(モデルの再トレーニング用)をフライホイールで利用できるようになります。新しいデータセットをカスタムモデルに組み込むには、フライホイールイテレーションを作成して実行します。フライホイールイテレーションは、新しいデータセットを使用してアクティブなモデルバージョンを評価し、新しいモデルバージョンをトレーニングするワークフローです。

既存のモデルバージョンと新しいモデルバージョンの品質メトリクスに基づいて、推論ジョブに使用したいフライホイールモデルのバージョンに、アクティブなモデルバージョンを設定します。フライホイールのアクティブなモデルバージョンを使用して、カスタム解析 (リアルタイムまたは非同期ジョブ) を実行できます。フライホイールモデルをリアルタイム分析に使用するには、フライホイールのエンドポイントを作成する必要があります。

この記事では、特定のテキストに特定のラベルを割り当てることができるカスタムテキスト分類器を作成する方法 (機械学習 の予備知識は不要) を紹介します。また、フライホイールを使用して新しいモデルバージョンのトレーニングを調整し、新しいラベル付きデータを使用してモデルの精度を向上させる方法についても説明します。

前提条件

このチュートリアルを完了するには、AWS アカウントと、アカウント内の AWS Identity and Access Management (IAM)、Amazon S3、および Amazon Comprehend でリソースを作成するためのアクセス権が必要です。

  • ユーザーがフライホイール操作 ( CreateFlywheelDeleteFlywheelUpdateFlywheelCreateDatasetStartFlywheelIteration ) にアクセスできるように IAM ユーザー権限を設定します。
  • (オプション) データレイク用 AWS KMS キーのアクセス権限を AWS KMS キーに設定します。
  • Amazon Comprehend にデータレイクへのアクセスを許可するデータアクセスロールを作成します。

Amazon Comprehend の IAM ポリシーの作成については、「Amazon Comprehend のための Identity and Access Management」を参照してください。

この記事では、Xiang ZhangとYann LeCunによる Text Understanding from Scratch のYahooコーパスを使用します。データには AWS Open Data Registry からアクセスできます。スクリプトとデータ準備と構造の詳細については、「Building a custom classifier using Amazon Comprehend」のセクション4「Preparing data」を参照してください。

または、次の 2 つのコマンドラインを入力して、準備したデータをダウンロードする方法がさらに便利になります。

Admin:~/environment $ aws s3 cp s3://aws-blogs-artifacts-public/artifacts/ML-13607/custom-classifier-partial-dataset.csv .

Admin:~/environment $ aws s3 cp s3://aws-blogs-artifacts-public/artifacts/ML-13607/custom-classifier-complete-dataset.csv .

custom-classifier-partial-dataset.csv (約 15,000 ドキュメント) データセットを使用して、カスタム分類器の初期バージョンを作成します。次に、完全なデータセット custom-classifier-complete-dataset.csv (約 100,000 ドキュメント) を使用して、モデルの初期バージョンの再トレーニングをオーケストレーションするフライホイールを作成します。フライホイールの反復をトリガーしてモデルを再トレーニングすると、カスタムモデルの2つのバージョンのモデルパフォーマンスメトリクスを評価し、よりパフォーマンスの高いものをアクティブなモデルバージョンとして選択し、同じバージョンを使用してリアルタイムでカスタム分類を行います。

ソリューション概要

以下の手順に従って環境とデータレイクを設定し、Comprehend フライホイールイテレーションを作成してカスタムモデルを再トレーニングしてください。

  1. 環境のセットアップ
  2. S3 バケットの作成
  3. カスタム分類器のトレーニング
  4. フライホイールの作成
  5. データセットの設定
  6. フライホイールの反復をトリガーする
  7. アクティブモデルバージョンの更新
  8. フライホイールによるカスタム分類
  9. リソースをクリーンアップする

1. 環境のセットアップ

Amazon Comprehend と対話するには、AWS マネジメントコンソールAWS コマンドラインインターフェイス (AWS CLI)、または Amazon Comprehend API を使用します。詳細については、「Amazon Comprehend の開始方法」を参照してください。

この投稿では、AWS CLI を使用してリソースを作成および管理します。AWS Cloud9 は、コードの記述、実行、デバッグができるクラウドベースの統合開発環境 (IDE) です。コードエディター、デバッガー、ターミナルが含まれています。AWS Cloud9 には AWS CLI があらかじめパッケージ化されています。

環境を設定するには、「AWS Cloud9 で環境を作成する」を参照してください。

2. S3バケットの作成

  1. 2 つの S3 バケットを作成
    • 1 つはデータセット custom-classifier-partial-dataset.csvcustom-classifier-complete-dataset.csv を管理するためのものです。
    • 1 つは Comprehend フライホイールのデータレイク用です。
  2. 次のコマンドを使用して最初のバケットを作成します (‘123456789012’ はアカウント ID に置き換えてください)。
    $ aws s3api create-bucket --acl private --bucket '123456789012-comprehend' --region us-east-1
  3. フライホイールのデータレイクとして使用するバケットを作成します。
    $ aws s3api create-bucket --acl private --bucket '123456789012-comprehend-flywheel-datalake' --region us-east-1
  4. トレーニングデータセットを「123456789012-comprehend」バケットにアップロードします。
    $ aws s3 cp custom-classifier-partial-dataset.csv s3://123456789012-comprehend/
    
    $ aws s3 cp custom-classifier-complete-dataset.csv s3://123456789012-comprehend/

3. カスタム分類器のトレーニング

次のコマンドを使用して、データセット : custom-classifier-partial-dataset.csv を使用してカスタム分類子 : yahoo-answers-version1 を作成します。データアクセスロール ARN と S3 バケットの場所を独自のものに置き換えます。

$ aws comprehend create-document-classifier  --document-classifier-name "yahoo-answers-version1"  --data-access-role-arn arn:aws:iam::123456789012:role/comprehend-data-access-role  --input-data-config S3Uri=s3://123456789012-comprehend/custom-classifier-partial-dataset.csv  --output-data-config S3Uri=s3://123456789012-comprehend/TrainingOutput/ --language-code en

上記の API 呼び出しの結果、次の出力が得られます。

{  "DocumentClassifierArn": "arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1"}

CreateDocumentClassifier は、カスタム分類器モデルのトレーニングを開始します。トレーニングの進捗状況をさらに詳しくトラックするには、DescribeDocumentClassifier を使用してください。

$ aws comprehend describe-document-classifier --document-classifier-arn arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1

{ "DocumentClassifierProperties": { "DocumentClassifierArn": "arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1", "LanguageCode": "en", "Status": "TRAINED", "SubmitTime": "2022-09-22T21:17:53.380000+05:30", "EndTime": "2022-09-22T23:04:52.243000+05:30", "TrainingStartTime": "2022-09-22T21:21:55.670000+05:30", "TrainingEndTime": "2022-09-22T23:04:17.057000+05:30", "InputDataConfig": { "DataFormat": "COMPREHEND_CSV", "S3Uri": "s3://123456789012-comprehend/custom-classifier-partial-dataset.csv" }, "OutputDataConfig": { "S3Uri": "s3://123456789012-comprehend/TrainingOutput/333997476486-CLR-4ea35141e42aa6b2eb2b3d3aadcbe731/output/output.tar.gz" }, "ClassifierMetadata": { "NumberOfLabels": 10, "NumberOfTrainedDocuments": 13501, "NumberOfTestDocuments": 1500, "EvaluationMetrics": { "Accuracy": 0.6827, "Precision": 0.7002, "Recall": 0.6906, "F1Score": 0.693, "MicroPrecision": 0.6827, "MicroRecall": 0.6827, "MicroF1Score": 0.6827, "HammingLoss": 0.3173 } }, "DataAccessRoleArn": "arn:aws:iam::123456789012:role/comprehend-data-access-role", "Mode": "MULTI_CLASS" }}

前述の create-document-classifier コマンドの結果として作成されたカスタム分類器の初期バージョンのコンソールビュー

モデルパフォーマンス

Statusに「Trained」と表示されると、分類器は使用可能になります。モデルの初期バージョンのF1スコアは0.69です。F1-Score は機械学習における重要な評価指標です。精度と再現率という 2 つの競合指標を組み合わせて、モデルの予測性能を要約します。

4. フライホイールの作成

次のステップとして、更新されたデータセット (custom-classifier-complete-dataset.csv) を使用してモデルの新しいバージョンを作成します。再トレーニングでは、Comprehend フライホイールを使用して、モデルの再トレーニングプロセスの調整と簡略化を行います。

(この場合のように) 既存のトレーニング済みモデル用にフライホイールを作成することも、フライホイール用に新しいモデルをトレーニングすることもできます。フライホイールを作成すると、Amazon Comprehend はデータレイクを作成し、モデルの各バージョンのトレーニングデータやテストデータなど、フライホイールに必要なすべてのデータを保持します。Amazon Comprehend がデータレイクを作成すると、Amazon S3 ロケーションに次のフォルダ構造が設定されます。

Datasets 
Annotations pool 
Model datasets 
	(data for each version of the model) 
	VersionID-1 
			Training 
			Test 
			ModelStats 
	VersionID-2 
			Training 
			Test 
			ModelStats 

警告:Amazon Comprehend は、データレイクフォルダーの構成とコンテンツを管理します。データレイクフォルダーを変更すると、フライホイールが正しく動作しない場合があります。

フライホイールの作成方法 (既存のカスタムモデル用):

注:既存のトレーニング済みモデルバージョン用のフライホイールを作成する場合、モデルタイプとモデル構成は事前設定されています。

モデル ARN、データアクセスロール、およびデータレイク S3 URI を必ずリソースの ARN に置き換えてください。「S3 バケットのセットアップ」ステップで作成した 2 番目の S3 バケット 123456789012-comprehend-flywheel-datalake をフライホイールのデータレイクとして使用します。

$ aws comprehend create-flywheel --flywheel-name custom-model-flywheel-test --active-model-arn arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1 --data-access-role-arn arn:aws:iam::123456789012:role/comprehend-data-access-role --data-lake-s3-uri s3://123456789012-comprehend-flywheel-datalake/

上記の API 呼び出しの結果、FlywheelArn が生成されます。

{ "FlywheelArn": "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test"}

フライホイールのコンソールビュー

5. データセットの設定

ラベル付きのトレーニングデータまたはテストデータをフライホイールに追加するには、Amazon Comprehend コンソールまたは API を使用してデータセットを作成します。

  1. 次のコンテンツを含む inputConfig.json ファイルを作成します。
    {"DataFormat": "COMPREHEND_CSV","DocumentClassifierInputDataConfig": {"S3Uri": "s3://123456789012-comprehend/custom-classifier-complete-dataset.csv"}}
  2. アカウントの関連するフライホイール ARN を使用してデータセットを作成します。
    $ aws comprehend create-dataset --flywheel-arn "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test" --dataset-name "training-dataset-complete" --dataset-type "TRAIN" --description "my training dataset" --input-data-config file://inputConfig.json
  3. これにより、データセットが作成されます。
    {   "DatasetArn": "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test/dataset/training-dataset-complete"   }

6. フライホイールのイテレーションをトリガーする

フライホイールイテレーションを使用すると、新しいモデルバージョンの作成と管理が容易になります。ユーザーは、S3 バケットのデータレイクの「model stats」フォルダーでデータセットごとのメトリクスを表示することもできます。次のコマンドを実行して、フライホイールのイテレーションを開始します。

$ aws comprehend start-flywheel-iteration \--flywheel-arn  "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test"

レスポンスには次の内容が含まれます。

{ "FlywheelArn": "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test", "FlywheelIterationId": "20220922T192911Z"}

フライホイールを実行すると、新しいイテレーションが作成され、更新されたデータセットを使用して新しいモデルバージョンをトレーニングおよび評価します。パフォーマンスが既存のアクティブモデルバージョンよりも優れている場合は、新しいモデルバージョンを昇格できます。

フライホイールイテレーションの結果

7. アクティブモデルバージョンの更新

最近のイテレーションの結果、モデルのパフォーマンスが向上していることがわかります(上記で強調表示)。新しいモデルバージョンを推論用のアクティブモデルバージョンとして昇格させるには、updateFlyWheel API 呼び出しを使用してください。

$  aws comprehend update-flywheel --flywheel-arn arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test --active-model-arn  "arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1/version/Comprehend-Generated-v1-1b235dd0"

レスポンスには次の内容が含まれており、新しくトレーニングしたモデルがアクティブバージョンとしてプロモートされていることがわかります。

{"FlywheelProperties": {"FlywheelArn": "arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test","ActiveModelArn": "arn:aws:comprehend:us-east-1:123456789012:document-classifier/yahoo-answers-version1/version/Comprehend-Generated-v1-1b235dd0","DataAccessRoleArn": "arn:aws:iam::123456789012:role/comprehend-data-access-role","TaskConfig": {"LanguageCode": "en","DocumentClassificationConfig": {"Mode": "MULTI_CLASS"}},"DataLakeS3Uri": "s3://123456789012-comprehend-flywheel-datalake/custom-model-flywheel-test/schemaVersion=1/20220922T175848Z/","Status": "ACTIVE","ModelType": "DOCUMENT_CLASSIFIER","CreationTime": "2022-09-22T23:28:48.959000+05:30","LastModifiedTime": "2022-09-23T07:05:54.826000+05:30","LatestFlywheelIteration": "20220922T192911Z"}}

8. フライホイールによるカスタム分類

フライホイールのアクティブモデルバージョンを使用して、カスタム分類の分析ジョブを実行できます。これは、リアルタイム分析と非同期分類ジョブのどちらにも使用できます。

  • 非同期ジョブ : StartDocumentClassificationJob API リクエストを使用して、カスタム分類用の非同期ジョブを開始します。DocumentClassifierArn パラメータの代わりに FlywheelArn パラメータを指定してください。
  • リアルタイム分析 : エンドポイントを使用してリアルタイム分析を実行します。エンドポイントを作成するときは、モデル ARN の代わりにフライホイール ARN を使用して設定します。リアルタイム解析を実行するときは、フライホイールに関連するエンドポイントを選択します。Amazon Comprehend は、フライホイールのアクティブモデルバージョンを使用して分析を実行します。

次のコマンドを実行してエンドポイントを作成します。

$ aws comprehend create-endpoint --endpoint-name custom-classification-endpoint --flywheel-arn arn:aws:comprehend:us-east-1:123456789012:flywheel/custom-model-flywheel-test --desired-inference-units 1

警告:このエンドポイントについては、作成してから削除されるまで課金されます。課金されないように、使用していないときは必ずエンドポイントを削除してください。

API の場合は、ClassifyDocument API オペレーションを使用してください。EndpointArn パラメーターにフライホイールのエンドポイントを指定するか、コンソールを使用してドキュメントをリアルタイムで分類します。

料金詳細

フライホイール API は無料です。ただし、カスタムモデルのトレーニングと管理には料金がかかります。モデルトレーニングには 1 時間あたり 3 USD (秒単位で請求)、カスタムモデル管理には 1 か月あたり 0.50 USD が課金されます。カスタム分類とエンティティ推論のリクエストを同期する場合は、適切なスループットでエンドポイントをプロビジョニングします。詳細については、「Comprehend Pricing」をご覧ください。

9. リソースをクリーンアップする

説明したように、エンドポイントを起動してから削除されるまで課金されます。エンドポイントが不要になったら、コストが発生しないように削除する必要があります。「エンドポイント」セクションから、必要なときにいつでも簡単に別のエンドポイントを作成できます。詳細については、「エンドポイントの削除」を参照してください。

結論

この投稿では、Comprehendのフライホイールの機能と、それによってカスタムモデルの再トレーニングと改善のプロセスを簡略化する方法について説明しました。次のステップの一環として、次のことを検討してください。

  • SDK やコンソールなどの他のメディアから Comprehend フライホイールリソースを作成および管理します。
  • このブログでは、トレーニング済みのカスタムモデル用のフライホイールを作成しました。フライホイールを作成して、そのためのモデルをゼロからトレーニングするという選択肢もあります。
  • カスタムエンティティレコグナイザーにはフライホイールを使用してください。

さまざまな可能性がありますが、Amazon Comprehend を自然言語処理のユースケースでどのように使用しているかを見るのを楽しみにしています。楽しい学習と実験を!


著者について

Supreeth S Angadi は AWS のグリーンフィールドスタートアップソリューションアーキテクトであり、AI/ML テクニカルフィールドコミュニティのメンバーでもあります。ML Core、SaaS、フィンテックのスタートアップ企業と緊密に連携して、クラウドへの移行を加速できるよう支援しています。Supreethは家族や友人と過ごすのが好きで、サッカーをするのが大好きで、非常にスポーツ通です。「DJ」(ゴールデンレトリバー)と散歩をしたり、キャッチボールをしなければ、彼の一日は終わりません。


翻訳はソリューションアーキテクトの濱野谷(@yoshiehm)が担当しました。原文はこちらです。