Amazon Comprehend で実装する自然言語処理 - 感情分析とエンティティ抽出の活用
Comprehend による感情分析、エンティティ抽出、カスタム分類モデルの構築を解説します。
Comprehend の概要
Comprehend は 25 以上の言語に対応した自然言語処理 (NLP) の API を提供するサービスです。テキストを入力すると、感情分析、エンティティ抽出、キーフレーズ抽出、言語検出、構文解析の結果を返します。ML の専門知識なしに NLP 機能をアプリケーションに組み込めます。カスタム分類モデルとカスタムエンティティ認識で、業界固有のテキスト分類にも対応します。内部では転移学習を活用した事前トレーニング済みモデルが動作しており、少量のラベル付きデータからでもカスタムモデルを構築できる点が、独自の ML パイプラインを構築する場合と比較した大きな利点です。
感情分析とカスタムモデル
感情分析 API はテキストの感情を Positive、Negative、Neutral、Mixed の 4 カテゴリで判定し、各カテゴリの信頼度スコアを返します。EC サイトのレビュー分析やコールセンターの通話テキスト分析に活用できます。カスタム分類はラベル付きのトレーニングデータを用意し、業界固有のカテゴリでテキストを分類するモデルを構築します。マルチクラス分類 (1 ドキュメントに 1 ラベル) とマルチラベル分類 (1 ドキュメントに複数ラベル) の両方に対応し、CSV または拡張マニフェスト形式でトレーニングデータを投入します。カスタムモデルのトレーニングには最低 50 ドキュメント/クラスが推奨され、精度向上には 1000 ドキュメント以上のデータが効果的です。PII 検出は GDPR や個人情報保護法への対応で、テキスト内の個人情報を自動検出してマスキングします。
PII 検出とリアルタイム分析
Comprehend の PII 検出 API はテキスト内の個人情報 (氏名、住所、電話番号、メールアドレス、クレジットカード番号、社会保障番号) を自動検出し、位置情報と信頼度スコアを返します。 ContainsPiiEntities API で PII の有無を判定し、 DetectPiiEntities API で具体的な位置を特定します。リアルタイム分析エンドポイントを作成すると、カスタム分類モデルやカスタムエンティティ認識モデルを常時稼働させ、 API コールで即座に推論結果を取得できます。非同期バッチジョブは S3 上の大量ドキュメントを一括処理し、結果を S3 に出力します。 Comprehend Medical は医療テキストに特化し、薬品名、疾患名、処置名を抽出します。 Comprehend の理論と実装を深く理解するには、専門書籍 (Amazon)が役立ちます。
設計のベストプラクティスと落とし穴
Comprehend を本番に組み込む際、いくつかの設計上の注意点があります。まず API のスロットリング制限として、同期 API は 1 アカウントあたりデフォルトで秒間 10〜20 リクエストの制限があり、大量トラフィックを捌くにはバッチ処理への切り替えまたは Service Quotas での上限引き上げ申請が必要です。次に、1 リクエストあたりのテキストサイズは同期 API で最大 5000 バイト (UTF-8) という制約があり、長文ドキュメントはチャンク分割が必須です。分割の際はセンテンス境界で切ることで、感情スコアの精度低下を防げます。カスタムモデルの運用では、Flywheel を活用した継続的な再トレーニングが推奨されます。Flywheel はモデルのパフォーマンスを自動監視し、精度が低下した際に新データで再学習を実行します。また、リアルタイムエンドポイントは推論ユニット単位で常時課金されるため、リクエスト頻度が低い場合は Lambda で同期 API を呼ぶ構成の方がコスト効率に優れます。
他サービスとの比較
NLP の実装方法として Comprehend 以外に SageMaker で独自モデルを構築する方法と、Bedrock の大規模言語モデル (LLM) を利用する方法があります。Comprehend は事前構築された NLP API として即座に利用開始でき、感情分析やエンティティ抽出のような定型タスクに最適です。SageMaker は Hugging Face の Transformers モデルをファインチューニングするなど自由度が高い反面、トレーニングインフラの管理とモデルのホスティングが必要になります。Bedrock の LLM はプロンプトだけでゼロショット分類が可能ですが、1 トークンあたりのコストが Comprehend の文字単価より高く、大量テキストのバッチ分析には向きません。判断の指針として、定型 NLP タスクで高スループットが必要なら Comprehend、独自の損失関数やアーキテクチャが必要なら SageMaker、少量かつ柔軟な分類タスクなら Bedrock が適しています。また、Google Cloud Natural Language API や Azure Text Analytics と比較した場合、Comprehend は AWS エコシステム (S3、Lambda、Kinesis) との統合が最もシームレスで、IAM による細かなアクセス制御が可能な点が差別化要素です。
Comprehend の料金体系
Comprehend の料金は API コールの文字数で課金されます。感情分析、エンティティ抽出、キーフレーズ抽出はそれぞれ 100 文字単位 (最低 300 文字) で、10 万ユニットあたり約 1 ドルです。カスタムモデルのトレーニングは 1 時間あたり約 3 ドル、リアルタイムエンドポイントは推論ユニットあたり約 0.50 ドル/時です。バッチ処理はリアルタイム API より単価が低く、大量ドキュメントの分析に適しています。リアルタイムエンドポイントは常時課金されるため、トラフィックが少ない時間帯はエンドポイントを削除し、非同期ジョブに切り替えることでコストを削減します。Comprehend Flywheel でモデルの継続的な改善を自動化し、再トレーニングの運用負荷を軽減します。
まとめ
Comprehend は感情分析、エンティティ抽出、PII 検出などの NLP 機能を API で提供するサービスです。カスタム分類モデルで業界固有のテキスト分類に対応し、バッチ処理とリアルタイムエンドポイントで多様な分析ワークロードを処理します。Comprehend Medical で医療テキストの薬品名や疾患名の抽出にも対応します。