Amazon Comprehendでエンティティごとの感情分析がリアルタイム分析でも出来るようになりました

2022.09.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

もう半年ほど前になりますが、Amazon Comprehend で文章を総括した感情分析ではなく、文章内のエンティティごとにそれぞれの感情分析結果を取得出来る機能がサポートされました。
以下の記事で紹介しております。

その際は非同期 API (分析ジョブ)でのみサポートされた機能でしたが、本日のアップデートで同期 API (リアルタイム分析) でもこの機能が使えるようになりました。

やってみる

マネジメントコンソール

分析ジョブの場合は以下のように Analytics type に Targeted sentiment を指定してジョブを実行すると、S3 に出力される結果ファイル上にエンティティごとの分析結果が出力されるという形でした。

リアルタイム分析ではテキストを入力してすぐに結果を得ることが出来ます。
以下は通常の感情分析です。

前述の記事のような以下の文章の場合だとポジティブとネガティブが混在したMixedという分析結果となっています。

The burger was very flavorful and the burger bun was excellent. However, customer service was slow.(ハンバーガーはとても風味豊かで、ハンバーガーパンは素晴らしかったです。しかし、顧客サービスは遅かった。)

エンティティごとの分析を行いたい場合は Targeted sentiment タブを選択するだけです。

見やすく整理されていて良いですね!
ここでは burger と burger bun にはポジティブで customer service にはネガティブであるという分析結果が確認出来ています。

AWS CLI で試してみる

機能をちょっと確認するくらいであればマネジメントコンソールで良いのですが、実際にソリューションに組み込むにあたっては API での利用が想定されているので、当然ながら AWS CLI などからも利用可能です。

detect-targeted-sentimentサブコマンドを利用します。

AWS CLI v1 の 1.25.79 以上でサポートされています。
いつもの流れですが v1 で先行導入され、本日時点で v2 はサポートされていないようです。気長に待ちましょう。

% aws-v1 comprehend detect-targeted-sentiment --text "The burger was very flavorful and the burger bun was excellent. However, customer service was slow." --language-code en --profile hoge
{
    "Entities": [
        {
            "DescriptiveMentionIndex": [
                0
            ],
            "Mentions": [
                {
                    "Score": 0.9999849796295166,
                    "GroupScore": 1.0,
                    "Text": "burger",
                    "Type": "OTHER",
                    "MentionSentiment": {
                        "Sentiment": "POSITIVE",
                        "SentimentScore": {
                            "Positive": 0.9999989867210388,
                            "Negative": 0.0,
                            "Neutral": 0.0,
                            "Mixed": 9.999999974752427e-07
                        }
                    },
                    "BeginOffset": 4,
                    "EndOffset": 10
                }
            ]
        },
        {
            "DescriptiveMentionIndex": [
                0
            ],
            "Mentions": [
                {
                    "Score": 0.9950069785118103,
                    "GroupScore": 1.0,
                    "Text": "burger bun",
                    "Type": "OTHER",
                    "MentionSentiment": {
                        "Sentiment": "POSITIVE",
                        "SentimentScore": {
                            "Positive": 0.9999970197677612,
                            "Negative": 1.9999999949504854e-06,
                            "Neutral": 0.0,
                            "Mixed": 0.0
                        }
                    },
                    "BeginOffset": 38,
                    "EndOffset": 48
                }
            ]
        },
        {
            "DescriptiveMentionIndex": [
                0
            ],
            "Mentions": [
                {
                    "Score": 0.9999899864196777,
                    "GroupScore": 1.0,
                    "Text": "customer service",
                    "Type": "ATTRIBUTE",
                    "MentionSentiment": {
                        "Sentiment": "NEGATIVE",
                        "SentimentScore": {
                            "Positive": 9.000000318337698e-06,
                            "Negative": 0.9999549984931946,
                            "Neutral": 6.000000212225132e-06,
                            "Mixed": 2.9000000722589903e-05
                        }
                    },
                    "BeginOffset": 73,
                    "EndOffset": 89
                }
            ]
        }
    ]
}

エンティティが配列で取得出来て、それぞれが Sentiment プロパティを持っています。

日本語では使えない

さて、非同期 API のときは英語のみサポートされていました。
今回のアップデート情報ではどの言語で使えるかが明記されていなかったのですが、念の為日本語でも確認してみましょうか。

通常の感情分析は日本語がサポートされています。

エンティティごとの感情分析は日本語はサポートされていないですね。
以下のような結果となりました。

これ以外にも言語ごとに Comprehend の機能サポート状況は異なっています。
最新のサポート状態は以下を確認しましょう。

さいごに

本日は Amazon Comprehendでエンティティごとの感情分析がリアルタイム分析でも出来るようになったので確認してみました。

今回のアップデートニュースとあわせて公開された公式ブログでは、Amazon Transcribe から文字起こしをし Comprehend のリアルタイム感情分析をするコンタクトセンターや BOT での利用シナリオが紹介されています。

英語という制約はありますが、リアルタイム分析で利用出来るようになったので活用出来るシーンが非常に広がったのではないかなと思います。