AWS re:Invent 2017で発表された新サービス「Amazon Comprehend」で口コミ分析してみた

みんなのウェディング Advent Calendar 2017 9日目の記事です。

ますます寒さ厳しくなる中、みなさまいかがお過ごしでしょうか。 みんなのウェディングのインフラエンジニア横山です。

11/27~12/1にかけてAWSのカンファレンスであるAWS re:Invent 2017が開催されました。 多数の新サービスがアナウンスされ、早速利用している方も多いのではないでしょうか。 弊社でも「Amazon Guard Durty」をお試しで導入しています。

AWS re:Invent 2017で発表された新サービス「Amazon Guard Durty」を早速使ってみた。

こちらの記事でもすこし触れておりますが、今回は同じく新サービスである、「Amazon Comprehend」を利用して口コミ分析をしてみたのでその結果についてレポートします。

Amazon Comprehendとは

「Amazon Comprehend」とは、AWSが提供する自然言語処理サービスです。大別すると以下の4つの機能があります。

  • DetectDominantLanguage – テキストに関する主要な言語を検出する。
  • DetectEntities – テキストにあるエンティティ(地名や人名、組織など)を検出し、JSON形式で結果を返す
  • DetectKeyPhrases – テキストにあるキーフレーズを検出し、JSON形式で結果を返す
  • DetectSentiment – テキストにある感情を検出し、POSITIVE/NEGATIVE/NEUTRAL、もしくは、MIXED を結果として返す

DetectDominantLanguageについては以下にあるように他言語対応していますが、残り3つの機能については英語、スペイン語のみとなっています(2017/12/8時点)。

https://docs.aws.amazon.com/comprehend/latest/dg/how-languages.html

今回は、DetectSentimentの機能を利用して弊社が運営するサービス、みんなのウェディングに寄せられた結婚式場の口コミについて、感情分析をしてみました。

<参考資料>

分析方法

現状では、英語、スペイン語しか対応していないため、日本語の文章をそのままいれてもエラーになります。 そこで、今回はGoogleのCloud Translate APIを利用して、口コミデータを英語に翻訳してから分析を実行することにしました。 流れとしては以下です。

  1. DBから口コミデータ取得
  2. Cloud Translate APIに口コミデータを渡して、英語に翻訳。
  3. 翻訳したデータをAmazon Comprehendに渡して、分析実行

利用したコードから、AWSとGoogleのAPIを利用している部分だけ抜粋して載せておきます。

def translate text
  url = URI.parse('https://translation.googleapis.com/language/translate/v2')
  params = {
    q: text,
    target: "en",
    source: "ja",
    key: <APIキー>
  }
  url.query = URI.encode_www_form(params)
  res = Net::HTTP.get_response(url)
  if res.code == "200" 
    return JSON.parse(res.body)["data"]["translations"].first["translatedText"]
  end
end

# arrayにはDBから取得した口コミテキスト(日本語)が入っている想定。
list = {}
array.each do |text|
  translated_text = translate text
  list[text] = translated_text
end

comprehend = Aws::Comprehend::Client.new(region: 'us-east-1')

list.each do |text,translated_text|
  if translated_text == nil
    retrun
  end
  resp = comprehend.detect_sentiment({
    text: translated_text, # required
    language_code: "en", # required, accepts en, es
  })
  puts text
  puts resp.sentiment
end

結果

comprehendによる分析結果として、POSITIVENEGATIVEMIXEDNEUTURALの4種類のスコアと、それらのうちもっともスコアが高い項目が何であるかが返ってきます。 https://docs.aws.amazon.com/comprehend/latest/dg/how-sentiment.html

結果の概要を説明すると、ユーザが口コミテキストとともに設定する口コミ評点が4以上のものについては、POSITIVEと判定され、逆に4以下のものについてはNEGATIVEと表示される傾向にありました。

※詳細な結果を知りたい方はぜひ当社にJOINしてください!

まとめ

「Amazon Comprehend」を利用した口コミ分析についてまとめてみました。 まだ日本語対応されていないので、英語に翻訳して分析するという無理矢理なやり方ですがそれなりの精度で判定できたと思います。 Cloud Translate APIのおかけですね。 日本語&東京リージョン対応したら今回の内容をアップデートして再び記事にしたいと思います。

みんなのウェディング Advent Calendar 2017、明日はtsubowishさんの記事です!

〜〜みんなのウェディングでは一緒に働く仲間を募集中!〜〜
本番環境でがんがんAWSのサービスを触りたい!チームでサービスをもっと成長させてみたい!そんなエンジニアやデザイナーの方は、ぜひお気軽に遊びに来て下さい!
月1ペースでボードゲーム会もやっています🐺