電通総研 テックブログ

電通総研が運営する技術ブログ

Amazon Comprehendを初めて使ってみた

はじめまして。クロスイノベーション本部、新卒1年目の大岡叡です。

現在、技術職に配属された同期6名とともに7月から9月の3か月間にわたりシステム開発研修に取り組んでいます。研修では、運営側が定めた必須機能に加えてチームで考えた追加機能を自由に実装することが認められています。

私のチームではある追加機能を実装することを決定し、その中でテキストの感情分析を取り入れることにしました。

開発したシステムは AWS ECS on Fargate にデプロイすることが決まっており、また私が学生時代からAWSの資格勉強をしていたことから、テキストの感情分析には Amazon Comprehend を利用することにしました。それにあたり、Amazon Comprehendを調査し実際にどのように使うのか検証しました。

本記事では、Amazon Comprehendを調べてみて・触ってみて学んだことをまとめています。
同じように初めてAmazon Comprehendを触る方のヒントになればと思います。

Amazon Comprehendの概要

概要

Amazon ComprehendについてAWS公式サイトでは以下のように説明しています。要するに、Amazon Comprehendはテキストを様々な観点から分析してくれるツールです。

Amazon Comprehend は、機械学習 (ML) を使用してテキストから洞察を見つける自然言語処理 (NLP) サービスです。Amazon Comprehend は、Custom Entity Recognition、カスタム分類、キーフレーズ抽出、感情分析、エンティティ認識などの API を使用することにより、お使いのアプリケーションに NLP を簡単に統合できます。Amazon Comprehend API をお使いのアプリケーションに読み込むだけで、ソースとなるドキュメントやテキストの場所がわかります。API は、エンティティ、キーフレーズ、感情、言語を、アプリケーションで使用できる JSON 形式で出力します。
AWS公式サイトより引用)

感情分析について

Amazon Comprehend の感情分析は、テキストがどのような感情を持っているのかを分類して返してくれる機能です。判定される感情は主に以下の4種類です。

  • POSITIVE(ポジティブな内容)
  • NEGATIVE(ネガティブな内容)
  • NEUTRAL(中立的な内容)
  • MIXED(ポジティブ・ネガティブが混在)

APIにテキストを送信すると単に感情ラベルを返すだけでなく、それぞれの感情にどれくらいの確信度があるかをスコア(0.0~1.0)で返してくれます。
利用できるAPIは "DetectSentiment"、"BatchDetectSentiment"、"StartSentimentDetectionJob"の3種類です。本記事では、"DetectSentiment"と"BatchDetectSentiment"を紹介します。("StartSentimentDetectionJob"はS3上のテキストデータを対象に分析を行うAPIですが、研修で私のチームが構築しているシステムではテキストデータをS3に配置しないため説明を割愛いたします)


DetectSentiment API

1件のテキストを対象に感情を判定するAPIです。

リクエスト例

{
  "Text": "今日はとても良い気分です",
  "LanguageCode": "ja"
}

レスポンス例

{
    "Sentiment": "POSITIVE",
    "SentimentScore": {
        "Positive": 0.999679684638977,
        "Negative": 8.19311972009018e-05,
        "Neutral": 0.0002277959865750745,
        "Mixed": 1.0496267350390553e-05
    }
}

BatchDetectSentiment API

複数件(最大25件)のテキストをまとめて感情判定できるAPIです。

リクエスト例

{
  "TextList": [
    "今日は楽しい",
    "明日は不安だ"
  ],
  "LanguageCode": "ja"
}

レスポンス例

{
    "ResultList": [
        {
            "Index": 0,
            "Sentiment": "POSITIVE",
            "SentimentScore": {
                "Positive": 0.9967367053031921,
                "Negative": 7.083657692419365e-05,
                "Neutral": 0.0030982368625700474,
                "Mixed": 9.416837565368041e-05
            }
        },
        {
            "Index": 1,
            "Sentiment": "NEGATIVE",
            "SentimentScore": {
                "Positive": 0.0007383294287137687,
                "Negative": 0.9037773013114929,
                "Neutral": 0.09547645598649979,
                "Mixed": 7.853302122384775e-06
            }
        }
    ],
    "ErrorList": []
}

感情分析APIの料金

Amazon Comprehend の料金は、処理するテキスト量に応じた従量課金になっています。東京リージョンでの感情分析に関する料金は以下のとおりです(2025年9月2日時点)。

  • 0.0001 USD / 1 単位 (100文字ごと)
  • 日本語テキストを含む多言語に対応
  • 各リクエストにつき3単位 (300 文字)の最低料金が発生します。

具体的な料金例

1件あたりの料金

テキスト長 課金単位数 料金
100文字 3単位(最低料金適用) 0.0003 USD
300文字 3単位 0.0003 USD
500文字 5単位 0.0005 USD
1,000文字 10単位 0.001 USD

※ 300文字以下のテキストは最低料金(3単位 = 0.0003 USD)が適用されます。

月間利用量ごとの料金目安(500文字/件の場合)

件数 料金
1,000件/月 0.5 USD(約75円)
10,000件/月 5 USD(約750円)
100,000件/月 50 USD(約7,500円)

※ 1 USD = 150円で換算

シーケンス図

感情分析を検証するために、以下のシーケンス図に基づいたシステムを実装しました。私のチームで考えた追加機能では複数のテキストをまとめて分析するため、Amazon ComprehendのBatchDetectSentiment APIを使用しました。また、研修でNext.js と Spring Bootを用いた開発を行っているため、今回も同様の技術スタックを採用しています。


次のセクションから、このシーケンス図に基づいたシステムを用いて行った検証について説明します。今回は検証であるため、Next.jsとSpring Bootはlocalhostでホストしました。

入力したテキストを感情分析させる簡単な検証

このセクションでは入力したテキストを感情分析させる簡単な検証について説明します。以下のような画面で検証を行いました。
テキストボックスにテキストを入れ、分析するボタンを押下すると分析結果が表示されます。

単一テキスト分析

まず、1つのテキストを分析するケースを試してみました。

「今日は疲れたが、色々楽しいことがあった一日だった。」という文は、「疲れた」という NEGATIVE な要素と「楽しい」という POSITIVE な要素が混ざっているため、MIXED と判定されました。期待通りの結果となったため、正しく動作していると考えられます。

複数テキスト分析

続いて、複数のテキストを分析するケースを試してみました。


単一テキストと同様に問題なく分析してくれました。

補足
「かんぱーい!」はポジティブに判定されるのでは?と思い、Amazon Comprehend のレスポンスを確認したところ、POSITIVE 約30%、NEGATIVE 約7%、NEUTRAL約62%という結果でした。
確かに「かんぱーい!」と発していても、もし気が進まない飲み会だったらネガティブな感情も含まれますよね。

C:\Users\torut>aws comprehend detect-sentiment --region ap-northeast-1 --language-code "ja" --text "かんぱーい!"
{
   "Sentiment": "NEUTRAL",
   "SentimentScore": {
       "Positive": 0.3049440085887909,
       "Negative": 0.07437098026275635,
       "Neutral": 0.6194847822189331,
       "Mixed": 0.0012001828290522099
   }
}

具体的なユースケースを想定した検証

最後に、具体的なユースケースを想定し、アンケートの回答内容の感情分析を一括で行う検証を行いました。

結果は以下のようになりました。感情分析の結果も妥当であると感じました。

まとめ

今回、Amazon Comprehend を調査・検証してみて、特に印象に残ったのは 料金の安さバッチ処理の上限件数 です。
料金については、100文字単位で課金される仕組みですが、実際に計算してみると小規模な分析であればほとんどコストを気にせずに利用できることが分かりました。

一方で、BatchDetectSentiment API のリクエスト上限が1回あたり最大25件である点には注意が必要だと感じました。例えば 100 件を分析する場合、4 回に分けてリクエストを送る必要があります。実運用を考える際には、この制約を踏まえて処理設計を行う必要があると学びました。

そして、検証を通じて、Amazon Comprehendを利用するイメージがついたので、本検証を基に研修で開発しているシステムへの導入を進めていきたいと思います。

参考文献

私たちは一緒に働いてくれる仲間を募集しています!

電通総研 キャリア採用サイト 電通総研 新卒採用サイト

執筆:@ooka.toru
レビュー:@miyazawa.hibiki
Shodoで執筆されました