ヤマムギ

growing hard days.

*

Amazon Augmented AI (Amazon A2I) のチュートリアル

      2025/06/29

Amazon Augmented AI (Amazon A2I)を使ったことがありませんでしたので、チュートリアルをやってみました。
チュートリアル: Amazon A2I コンソールの使用を開始するに公開されている手順です。

準備

A2IはTextract向け、Rekognition向け、カスタムの3種類があって、チュートリアルではTextractとRekognitionそれぞれにサンプルの画像が用意されていました。

一応両方S3バケットを作ってアップロードしました。
リージョンはバージニア北部で実行しました。

  • Amazon Textract向けの画像

ワークチームの作成

A2Iは機械学習モデルの評価を人が行うために、モデル作成のワークフロー(MLOps)に組み込むためのサービスです。
作業する人のチームを先に設定します。
チームはプライベートで作成することもできますし、Amazon Mechanical Turkを使用してアウトソースしたりベンダーチームに依頼することもできます。
チュートリアルではプライベートチームを作成しました。

SageMaker AIの[Ground Truth]-[ラベリングワークフォース]でプライベートチームの作成をしました。

プライベートチームの認証はCognitoを使用しました。
ワーカーはEメールによる招待を設定しました。
イベントのSNSトピックへの通知もできましたが、今回は設定しませんでした。

Textract向けの人間によるレビューワークフローの作成

SageMaker AIの[Argumented AI]-[人間によるレビューワークフロー]で[Create human review workflow]を押下しました。

サンプル画像をアップロードしたS3バケットとプレフィックスのURIを設定しました。
IAMロールは新規作成もできます。
私は少し前に作っていたS3バケットへの権限があるIAMロールを選択しました。

ロールの許可ポリシーには、AWS管理ポリシーのAmazonSageMakerFullAccessと、S3のGetObject、PutObject、DeleteObject、ListBucketが設定されていました。
信頼ポリシーはPrincipalにsagemaker.amazonaws.comが設定されていました。

Task typeでは、Textractを選択しました。

チュートリアルにならって「Amazon Textract によって識別され、信頼スコアが指定範囲にあるすべてのフォームキーについて、人間によるレビューをトリガーします」を有効にしました。
識別信頼度しきい値: 「フォーム内で検出されたキーと値のペアについて、信頼スコアが次の範囲にある場合、人間によるレビューをトリガーします」では0~98を設定しました。
適格信頼度しきい値: 「フォーム内のキーと値のペアに含まれるテキストの信頼スコアが次の範囲にある場合、人間によるレビューをトリガーします」では0~98を設定しました。
これでほとんどの場合は人間によるレビューが必要になります。

他のオプションは「フォーム キーの信頼スコアに基づいて、または特定のフォーム キーが欠落している場合に、特定のフォーム キーの人間によるレビューをトリガーします。」と「フォームのサンプルをランダムに人間に送信してレビューしてもらいます。」でした。
今回はこれらは使用していません。

Worker task template creationではCreate from default templateを選択してテンプレート名を入力しました。

Task descriptionに説明を入力しました。
ここは日本語は使用できませんでした。

WorkersではPrivateで作成しておいたワークチームを選択しました。

ヒューマンループの開始

チュートリアルではPython boto3のサンプルコードがありましたが、CloudShellで簡単に実行したいので、CLIで実行しました。
次のコマンドからdocumentとFlowDefinitionArnを変更して実行しました。

開始後の確認

コンソールで人間によるレビューワークフローのHuman loopsを見に行くと、StatusがFailedになってました。

名前をクリックして、詳細を確認すると次のエラーメッセージがありました。

Task failed to render: [ MisconfiguredResource: ‘CORS is not correctly enabled on this object’s S3 bucket: s3://bucketname/a2i/sample-document-final.png’ ].

手順にはなかったように思いましたが、S3バケットのCORS設定が必要なんでしょうか。
設定して再度やってみましょう。

CORSを設定して、HumanLoopNameを別の名前にしてaws textract analyze-documentコマンドをもう一度実行しました。

In progressになりました!!
CORS設定が必要だったんですね。

人によるレビュー

ワークチームに設定したワーカーの受信メールを確認したら、メールが届いていました。

ジョブが作成されているので、[Start working]を押下してみました。

Textractによる抽出結果が表示されています。
すべてきれいに抽出されているようです。
Mail addressの最初のTownだけ不要そうなのでそれを削除線としてハイフンに書き換えて、Submitしました。

ジョブがなくなりました。

Human loopsを見に行くとそちらもCompletedになっていました。

出力データを確認する

Human loopsの名前をクリックして、Output locationにあるS3に保存されたoutput.jsonをダウンロードしてみます。

大きなJSONなので部分的に確認しました。

Textractがもともと抽出した情報がinputContentのaiServiceResponseのblocksにあります。

humanAnswersのblocksに人がチェックした後に送信した情報があります。

元の該当箇所では、”Town”となっていました。
信頼度のconfidenceは35.44533とかなり低い値です。

同じid値の箇所を”–“と修正したことがわかります。

モデルの推論結果に対して、人が関わって正しかったのか、正しくないのか、何がどう正しくなかったのかを送信できました。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , ,

ad

ad

  関連記事

AWS Application Discovery Serviceのエージェントを実行

本来はオンプレミスのサーバーにエージェントをインストールして、自動でアプリケーシ …

CloudFrontのカスタムヘッダーがなければALBのルーティングで403レスポンスを返す

大阪リージョンにはWAFがまだないです(2021年4月現在) 今のこのブログの構 …

IAMセッションポリシーの利用(GetFederationToken)

GetFederationTokenでのセッションポリシーは、呼び出し元のIAM …

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Microservices × Serverless On AWS」で運営と懇親会LTをしてきました

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …

Amazon InspectorによるLambda関数の脆弱性検出結果を確認しました

AWS re:Invent 2022期間内に発表されましたAmazon Insp …

Amazon Aurora Serverless のログをCloudWatch Logsに出力する

WordPress W3 Total Cache のDatabaseCacheを …

AWS CDKでクロススタックリファレンスをする

CloudFormationで複数のスタックで参照することがあります。 それをC …

AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)

Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …

Amazon Location Service入門ワークショップ-ジオフェンス

関連記事 Amazon Location Service入門ワークショップの前提 …

Amazon Elasticsearch ServiceにMySQLのデータを投入してkibanaで可視化してみる

MySQLのデータの可視化にAmazon Elasticsearch Servi …