https://d226lax1qjow5r.cloudfront.net/blog/blogposts/sentiment-api-analysis-comparison-dr/TW_EN_Sentiment-Analysis_1200x675.jpg

センチメント分析APIの比較

最終更新日 May 11, 2021

所要時間:2 分

2人の間で交わされる文書によるコミュニケーションは、感情を解釈しようとする際にしばしば困難を伴う。オンライン上の会話は誤解されやすく、望ましくない、あるいは予期せぬ結果を招きやすい。

センチメント分析によって、プログラム的にテキストから意味を抽出することができるようになり、開発者は、ほとんど自動化できるフィードバックループを持つアプリケーションを構築できるようになる。

テキストを分析し、人々を適切なチャネルにルーティングする能力を持つことで、満足度が低く、追加支援やその他の介入が必要な顧客を見つけることができます。

ソーシャルメディア上であれ、サポート・チャネルであれ、テキスト・コミュニケーションを利用するビジネスであれば、事後またはリアルタイムの学習目的のために、この分析から大きな利益を得ることができます。開発者として、私たちはこの機能を簡単に組織に提供することができます。

概要

この記事では、4つのセンチメント分析クラウド・サービスを比較する: Amazon Comprehend, Azure Text Analytics, Google 自然言語および IBM ワトソン トーン アナライザー.

テキスト入力として Nexmo着信メッセージウェブフックを使い、テキストメッセージごとにサービスから即座にフィードバックできるようにした。その過程で、私はいくつかのメモを取るようにし、あなたがプロバイダーを評価するのに役立つようにここに整理しました。

精度と採点

各サービスは若干異なる採点システムを採用している。しかし、各サービスとも信頼度の基準として 1を信頼度の基準として使用する傾向があります。数値が 1 に近ければ近いほど、そのサービスはセンチメントが正確であると確信しています。Watson Tone Analyzer は、センチメントに次のようなラベルを追加します。 joy, sadnessanalyticalのようにセンチメントにラベルを追加し、センチメントをさらに分類しようとします。

以下のテストで判明したように、言い回しや意図が単純であれば、センチメントの精度は簡単です。しかし、スピーチにおける人間の文脈は、皮肉のような言葉の使用でセンチメントを劇的に変化させる可能性があります。皮肉やその他の言語デバイスは、センチメント分析を100%正確なものにすることを難しくします。

「私は幸せだ

どのサービスでも、それほど苦労することなく、ポジティブで楽しい反応が返ってきた。

  • アマゾンの理解 Positive - 0.9970158338546753

  • Azure Text Analytics API 0.9928278923034668

  • グーグル自然言語API 0.800000011920929

  • ワトソン・トーン・アナライザー 1 - Joy

「私は悲しい。

もう一つの簡単なテストでは、ネガティブなセンチメントが返ってきた。ここでは、Googleがネガティブなセンチメントにマイナスの数字を使っていることに注目してほしい。

  • アマゾンの理解 Negative - 0.9563825130462646

  • Azure Text Analytics API 0.0036676526069641113

  • グーグル自然言語API -0.20000000298023224

  • ワトソン・トーン・アナライザー 1 - Sadness

"今日はポップクイズがあってよかった"

3つ目のテストでは、わざと誤解を招くような文章を使った。このフレーズは皮肉である可能性が高く、感情はハッピーとは正反対になる。どのサービスも、ポジティブな感情が正確であるという自信は薄かったが、グーグルはそれに従った。

  • アマゾンの理解 Positive - 0.978675365447998

  • Azure Text Analytics API 0.887139081954956

  • グーグル自然言語API 0.800000011920929

  • ワトソン・トーン・アナライザー 0.899749 - Joy

特徴

この記事の主な焦点はセンチメント分析である。ここに挙げたすべてのサービス・プロバイダーは、最低限これだけは提供している。Google、Azure、Amazonは、エンティティ分析、構文分析、コンテンツ分類、キーワード抽出などの自然言語処理ツールも提供している。IBM Watson Tone Analyzerは、センチメント分析だけを提供する。

追加機能の価格もプロバイダーによって異なるので、利用を予定している場合は、最初に必ず費用を確認すること。

対応言語

対応言語はサービスによってかなり異なる。Watson Tone Analyzerは英語とフランス語しかサポートしておらず、最も少ない。他のサービスはすべて、少なくともこれらに多くの追加言語を提供している。共通言語はドイツ語、フランス語、イタリア語、スペイン語、英語、ポルトガル語だ。

Amazon Comprehendの言語サポート

Azureテキスト分析言語サポート

Google Natural Language API 言語サポート

ワトソン・トーン・アナライザー言語サポート

使いやすさ

センチメント分析は、各クラウド・プロバイダーで確立された機能である。各サービスのセットアップは、小さな例外を除いてほとんど同じだった。典型的な要件は、サービスをオンにすることと、サービスまたは認証ユーザーから直接認証情報を取得することである。

どのサービスも、セットアップと利用を簡単にする機能を組み込んだSDKを提供している。

アマゾンの理解

Amazon Comprehendリクエストは、複数のフレーズを一度に渡すために配列を使用し、インデックスを参照したオブジェクトで応答します。 Positive, Negative, NeutralMixedスコアを使用するインデックス参照オブジェクトで応答する。このように複数のスコアを使用することで、フレーズがより複雑で、単に1つのスコアカテゴリーに収まらない場合に便利であることがわかる。

リクエスト

function analyzeTone(params) {
  var obj = {
    LanguageCode: "en",
    TextList: [
      params.text,
    ]
  };
    var comprehend = new AWS.Comprehend({region: process.env.AWS_REGION});
    comprehend.batchDetectSentiment(obj, function (err, data) {
    if (err) {
      console.log(err, err.stack);
    }
    else{
      console.dir(data, {depth: null})
    }
  });
}

応答

{
  ResultList: [
    {
      Index: 0,
      Sentiment: 'POSITIVE',
      SentimentScore: {
        Positive: 0.9970158338546753,
        Negative: 0.0002091785572702065,
        Neutral: 0.002759476425126195,
        Mixed: 0.000015530584278167225
      }
    }
  ],
  ErrorList: []
}

もしこれを試してみたいなら、以下のレポがある。 Amazon Comprehend用のレポがあります。

Amazon Comprehend API ドキュメント

Azure Text Analytics API

リクエスト

Azure Text Analytics も複数行のテキストに配列を使いますが、その場合は textidをオブジェクトとして渡す必要がある。レスポンスは他のサービスと比べると少し物足りない。 negativepositive.

function analyzeTone(params) {
  const creds = new CognitiveServicesCredentials.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': process.env.TEXT_ANALYTICS_SUBSCRIPTION_KEY } });
  const client = new TextAnalyticsAPIClient.TextAnalyticsClient(creds, process.env.TEXT_ANALYTICS_ENDPOINT);

  const inputDocuments = {documents:[
      {id:"1", text:params.text}
  ]}

  const operation = client.sentiment({multiLanguageBatchInput: inputDocuments})
  operation
  .then(result => {
      console.dir(result, {depth: null})
  })
  .catch(err => {
      throw err;
  });

}

応答

{ documents: [ { id: '1', score: 0.9928278923034668 } ], errors: [] }

もしこれを試してみたいなら、以下のレポがある。 Amazon Comprehend用のレポがあります。

Azure Text Analytics API ドキュメント

グーグル自然言語API

Google Natural Language APIは、一度に1つのドキュメントを受け付けるメソッドを提供しているため、より実質的な使用で追加のトラフィックにつながる可能性があります。レスポンスは-1.0を negativeと 1.0 positiveまた、スコアの絶対値であるマグニチュードスコアも提供する。また、2つの undefined回答には、追加調査にもかかわらず未解明のキーが2つある。

リクエスト

// Google Cloud Sentiment Analysis
const client = new language.LanguageServiceClient();

function analyzeTone(params) {
  let document = {
    content: params.text,
    type: 'PLAIN_TEXT',
  };

  client.analyzeSentiment({document: document})
      .then(results => {
        console.dir(results, {depth: null})
      })
      .catch(err => {
        console.log('error', err);
      });
}

応答

[
  {
    sentences: [
      {
        text: { content: 'I am happy!', beginOffset: -1 },
        sentiment: { magnitude: 0.800000011920929, score: 0.800000011920929 }
      }
    ],
    documentSentiment: { magnitude: 0.800000011920929, score: 0.800000011920929 },
    language: 'en'
  },
  undefined,
  undefined
]

これをテストしたい場合は、以下のレポを参照してください。 Google自然言語APIのレポがあります。

Google 自然言語 API ドキュメント

ワトソン・トーンアナライザー

ワトソン・トーン・アナライザーも1つのテキスト入力を受け付けるが、フラグ sentencesをtrueに設定する。レスポンスは0から1のスコアの範囲を返します。 tone_idを含むことができる: anger, fear, joy, sadness, analytical, confident, tentative.トーンは、フレーズの意味を少し形づくるのに役立ち、より人間的な文脈を提供する。

リクエスト

// IBM Watson Tone Analysis
var toneAnalyzer = new ToneAnalyzerV3({
  iam_apikey: process.env.TONE_ANALYZER_IAM_APIKEY,
  url: process.env.TONE_ANALYZER_URL,
  version: '2017-09-21'
});

function analyzeTone(params) {
  let toneParams = {
    tone_input: { 'text': params.text},
    content_type: 'application/json',
  };

  toneAnalyzer.tone(toneParams)
      .then(toneAnalyzer => {
        console.dir(toneAnalyzer, {depth: null})
      })
      .catch(err => {
        console.log('error', err);
      });
}

応答

{
  document_tone: { tones: [ { score: 1, tone_id: 'joy', tone_name: 'Joy' } ] }
}

これを試してみたい方は、以下のレポをご覧ください。 IBM Watson Tone Analyzerのレポがあります。

ワトソン・トーン分析資料

コスト

これらのサービスの料金設定は、一見すると少しわかりにくいが、いくつか考え、計算した結果、その内訳を知ることができた。

アマゾンとグーグルはともに、以下のような金額を請求している。 units.アマゾンの単位は100文字で最低300文字、グーグルは1000文字のブロックを使い、1-1000文字を同額としている。Azureも1000文字単位で課金しているが、これを次のように呼んでいる。 text records.IBMはAPIコールで測定する。

そう考えると、異なるコストを正規化する最も簡単な方法は、標準的なシステム(より高いコストでより高い計算能力が利用可能)で月間50万件のボリュームを持つ1000文字のメッセージを例として使用することです。ボリューム・プライシングは、あなたの特定のケースに役立つかもしれません。

Provider Free Tier Cost Normalized Cost*
Amazon Comprehend N/A Up to 10M Units - $0.0001 $500
Azure Text Analytics API 5,000 Text Records/Month 0-500K - $2 per 1,000 text records $1000
Google Natural Language API 5,000 Units/Month 5K+ -1M $1.00/1000 units $500
Watson Tone Analyzer 2,500 API Calls/Month 1-250K @ $0.0088
250K-500K @ $0.0013
$2437

* 月間500,000,000文字送信した場合のコスト - 10/11/19現在 - 変更される場合があります。

総括

これらのサービスをすべて見て回ることは、楽しい練習であり、センチメント分析の力について学ぶ良い経験になりました。各ベンダーは十分な機能と精度を提供しています。4つのプロバイダーの中から1つを選択する際には、言語ニーズに基づいて評価し、各サービスはボリュームに応じて減少するため、使用量に基づいてコストの内訳を決定するようにしてください。

Amazon Comprehendは、追加機能があり、低価格で、基本的な言語をサポートしているので、私の一番の選択です。セットアップも簡単で、使い勝手もよく、レスポンス・オブジェクトの詳細もとても便利です。

これらのサービスのいずれか、またはすべてを試してみたい方は Nexmo Extendチームが作成したサンプルコードをご覧ください。

シェア:

https://a.storyblok.com/f/270183/384x384/444c073b5e/kellyjandrews.png
Kelly J Andrews元チームメンバー

ケリー・J・アンドリュースはネクスモの開発者支持者であり、5歳で初めてBASICを使い、30年以上コンピュータをいじってきた。

1997年に初めてウェブページを作り、初めてJavaScriptを試してみて初めて、彼は真の天職を見つけた。ケリーは今、JavaScript、テスト可能なコード、そして迅速なデリバリーのために戦っている。

カラオケを歌ったり、マジックを披露したり、カブスやファイティング・アイリッシュを応援したり。