AWS | Amazon ComprehendとAWS SDK for JavaScript v3で感情分析
Node.jsのアプリケーションからAmazon Comprehendを利用した感情分析を簡単に試せたのでメモです。
モチベーション
フォームで文章を投稿する際にネガティブな内容が含まれているものを投稿前にはじきたいと思い試してみました。
環境
Amazon Comprehendのセットアップ
設定は不要でした。
SDKのインストール
npm install @aws-sdk/client-comprehend
感情分析
シンプルです。SDKのinput, command, send辺りの流れが分かっていればドキュメントを見ながらすんなり実装出来ました。
ちなみに「BatchDetectDominantLanguageCommand」を使うと、文章からLanguageCodeを判定できそうでした。
import type { BatchDetectSentimentCommandInput } from "@aws-sdk/client-comprehend";
import { BatchDetectSentimentCommand } from "@aws-sdk/client-comprehend";
import { ComprehendClient } from "@aws-sdk/client-comprehend";
// Amazon Comprehend - Sentiment Analysis
const client = new ComprehendClient({ region: process.env.AWS_REGION });
const input: BatchDetectSentimentCommandInput = {
LanguageCode: "ja",
TextList: [message],
};
const command = new BatchDetectSentimentCommand(input);
const response = await client.send(command);
response.ResultList?.forEach((result) => {
console.log(result);
});
試しに実行
「テストですがどうでしょうか。」とういう文だと「NEUTRAL」となりました。
Sentiment: 'NEUTRAL',
SentimentScore: {
Mixed: 0.000049037294957088307,
Negative: 0.0005076299421489239,
Neutral: 0.9991795420646667,
Positive: 0.00026372866705060005
}
「にんじんは食べたくありません。」としても「NEUTRAL」となりました。おや?
Sentiment: 'NEUTRAL',
SentimentScore: {
Mixed: 0.012253671884536743,
Negative: 0.3177367150783539,
Neutral: 0.5984423160552979,
Positive: 0.07156732678413391
}
「私はにんじんが嫌いです。
にんじんは食べたくありません。」
と文を増やしてみると「NEGATIVE」となりました。短すぎると正しく?判定されないようです。
Sentiment: 'NEGATIVE',
SentimentScore: {
Mixed: 0.00031062617199495435,
Negative: 0.9847923517227173,
Neutral: 0.01425910834223032,
Positive: 0.0006378852413035929
}
さいごに
思った以上に簡単に実装できました。
SDKもどれかを使い出すと構造をシンプルに感じるので、他のサービスでも使いやすいですね。
Amazon Comprehendの料金も安いようなので、サイトに組み込むにもいいかもしれません(Web検索するとGCPなどと比較している方もいました)