Amazon Comprehend で実装する自然言語処理 - 感情分析とエンティティ抽出の活用
Comprehend による感情分析、エンティティ抽出、カスタム分類モデルの構築を解説します。
Comprehend の概要
Comprehend は、機能ごとに対応する言語が異なる自然言語処理 (NLP) の API を提供するサービスです。テキストを入力すると、感情分析、エンティティ抽出、キーフレーズ抽出、言語検出、構文解析の結果を返します。ML の専門知識なしに NLP 機能をアプリケーションに組み込めます。カスタム分類モデルとカスタムエンティティ認識で、業界固有のテキスト分類にも対応します。内部では転移学習を活用した事前トレーニング済みモデルが動作しており、少量のラベル付きデータからでもカスタムモデルを構築できます。
感情分析とカスタムモデル
感情分析 API はテキストの感情を Positive、Negative、Neutral、Mixed の 4 カテゴリで判定し、各カテゴリの信頼度スコアを返します。EC サイトのレビュー分析やコールセンターの通話テキスト分析に活用できます。カスタム分類はラベル付きのトレーニングデータを用意し、業界固有のカテゴリでテキストを分類するモデルを構築します。マルチクラス分類 (1 ドキュメントに 1 ラベル) とマルチラベル分類 (1 ドキュメントに複数ラベル) の両方に対応し、CSV または拡張マニフェスト形式でトレーニングデータを投入します。CSV 形式のマルチクラス分類では、トレーニングに 1 クラスあたり最低 50 ドキュメントが要ります。PII 検出は、テキスト内の個人情報を自動検出してマスキングします。
PII 検出とリアルタイム分析
Comprehend の PII 検出 API はテキスト内の個人情報 (氏名、住所、電話番号、メールアドレス、クレジットカード番号、社会保障番号) を自動検出し、位置情報と信頼度スコアを返します (対応言語は英語とスペイン語)。 ContainsPiiEntities API で PII の有無を判定し、 DetectPiiEntities API で具体的な位置を特定します。リアルタイム分析エンドポイントを作成すると、カスタム分類モデルやカスタムエンティティ認識モデルを常時稼働させ、 API コールで推論結果を取得できます。非同期バッチジョブは S3 上の大量ドキュメントを一括処理し、結果を S3 に出力します。 Comprehend Medical は医療テキストに特化し、薬品名、疾患名、処置名を抽出します。
設計のベストプラクティスと落とし穴
Comprehend を本番に組み込む際、いくつかの設計上の注意点があります。まず、同期 API には動的なスロットリングがかかり (処理の余裕に応じて受け付ける数が段階的に増える)、大量のトラフィックにはバッチ処理への切り替えまたは Service Quotas での上限引き上げ申請を検討します。次に、感情分析と構文解析の同期 API は 1 ドキュメント 5 KB が上限で、長文ドキュメントはチャンクに分けて送ります。分割の際はセンテンス境界で切ると、文の途中で切れた断片を分析せずに済みます。カスタムモデルの運用では、再トレーニングの仕組みとして Flywheel があります。Flywheel はモデルのパフォーマンスを自動監視し、精度が低下した際に新データで再学習を実行します。また、リアルタイムエンドポイントは起動から削除まで課金されるので、リクエスト頻度が低い場合は Lambda から非同期ジョブを開始する構成も候補になります。
他サービスとの比較
NLP の実装方法として Comprehend 以外に SageMaker で独自モデルを構築する方法と、Bedrock の大規模言語モデル (LLM) を利用する方法があります。Comprehend は事前構築された NLP API として利用を始めやすく、感情分析やエンティティ抽出のような定型タスクに向いています。SageMaker は Hugging Face の Transformers モデルをファインチューニングするなど自由度が高い反面、トレーニングインフラの管理とモデルのホスティングが必要になります。Bedrock の LLM はプロンプトだけでゼロショット分類ができます。判断の指針として、定型 NLP タスクで高スループットが必要なら Comprehend、独自の損失関数やアーキテクチャが必要なら SageMaker、少量かつ柔軟な分類タスクなら Bedrock が適しています。また、Comprehend は AWS のサービス (S3、Lambda、Kinesis) と組み合わせられ、IAM でアクセスを細かく制御できます。
Comprehend の料金体系
Comprehend の料金は API コールの文字数で課金されます。感情分析、エンティティ抽出、キーフレーズ抽出は 100 文字を 1 ユニットとして数え、1 リクエストの最低は 3 ユニット (300 文字) です。カスタムモデルのトレーニングは時間あたりの料金 (秒単位の課金) で、リアルタイムエンドポイントは推論ユニット (1 つで毎秒 100 文字の処理) の数と稼働時間で課金されます。非同期の処理の料金は文字数で決まり、リアルタイムエンドポイントの料金は稼働している時間で決まります。トラフィックが少ない時間帯にエンドポイントを削除して非同期ジョブに切り替えると、その間はエンドポイントの稼働時間の料金がかかりません。Comprehend Flywheel で、モデルの継続的な改善の流れを組めます。
まとめ
Comprehend は感情分析、エンティティ抽出、PII 検出などの NLP 機能を API で提供するサービスです。カスタム分類モデルで業界固有のテキスト分類に対応し、バッチ処理とリアルタイムエンドポイントで多様な分析ワークロードを処理します。Comprehend Medical で医療テキストの薬品名や疾患名の抽出にも対応します。
参考資料 (AWS 公式)
本ページの一次情報は AWS 公式サイトと公式ドキュメントです。最新の仕様と料金は次の公式ページで確認できます。
本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。