Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

Cloud Natural Language API で飲食店レビューの感情を分析する

こんにちは。中山です。
Google が提供する機械学習プロダクトのひとつである、Cloud Natural Language API
与えられたテキストの「構造」と「意味」を分析することができる、というこの API を使いまして、今回は、
飲食店のレビューのコメント内容から読み取れる感情と、その星の数には、相関関係があるのかどうか
ということについて、検証にチャレンジしてみたいと思います。

 

検証の方針

 
Cloud Natural Language API の公式の説明には、以下のようにあります。

Cloud Natural Language を使用すると、テキスト ドキュメント、ニュース記事、ブログ投稿に含まれている人、場所、イベントなど、多くの情報を抽出できます。ソーシャル メディア上のコメントから商品に対する感情を把握したり、コールセンターやメッセージ アプリに寄せられた消費者の意見から顧客満足度を分析したりできます。

今回は、このうちの 感情 の分析に着目し、

  • 飲食店レビューのコメントの文章が、ポジティブな感情で書かれているのか、あるいはネガティブな感情で書かれているのか
  • そのコメント文章から読み取れる感情のポジティブ/ネガティブが、星の数と相関関係にあるのかどうか

というアプローチで、検証してみたいと思います。

 

Cloud Natural Language API を使ってみる

 
まずは、Cloud Natural Language API の機能を試してみたいと思います。

1)Cloud Natural Language API を有効にする

Google Cloud Platform のメインページのメニューから、Natural Language をクリックして選択します。
 
 f:id:IntelligentTechnology:20190219121818p:plain:w240
 
表示されたページで

  • Create a custom model(独自のモデルをカスタマイズして作成する)
  • Use the pre-trained model(事前に学習済みのモデルを利用する)

のいずれかを選択する必要がありますので、ここでは Use the pre-trained model のほうを選びます。
 
f:id:IntelligentTechnology:20190219122002p:plain:w480
 
次に表示されたページで、以下の「有効にする」ボタンをクリックします。
 
 f:id:IntelligentTechnology:20190219140221p:plain:w480
 
今回使用する予定の「感情分析」の API は、若干の無料枠があるとのことですので、ひとまずは料金は気にせずに進めることにいたします。
 
f:id:IntelligentTechnology:20190219122310p:plain
 

2)プロジェクトの作成

一応、この Cloud Natural Language API を利用するためのプロジェクトも、Google Cloud Platform 上に作成いたしました。(NaturalLanguageLesson という名前のプロジェクトにしました。)
 
 f:id:IntelligentTechnology:20190219140801p:plain:w480
 

3)API Exploer を起動

Cloud Natural Language API を有効にしますと、Google Cloud Platform のメインページに以下のように表示されますので、
 
 f:id:IntelligentTechnology:20190219143334p:plain:w480
 
この中にある「API Explorer で試す」をクリックします。
 
 f:id:IntelligentTechnology:20190219141101p:plain:w400
 
次に表示されたページで、利用する API を選択します。今回は「感情分析」の機能を試しますので、以下から

  • language.documents.analyzeSentiment

を選択します。
 
f:id:IntelligentTechnology:20190219143528p:plain
 

4)API Exploer から API を呼び出す

表示されたページの Request Body 欄に、解析対象の文字列を以下のように入力します。

{
    "document": {
        "type": "PLAIN_TEXT",
        "language": "ja", 
        "content": "昨日のうどんはとてもおいしかった。今度はひやひやも試してみよう。"
    }
}

 
入力後は以下のような感じになります。
 
f:id:IntelligentTechnology:20190219144151p:plain
 
ここで Execute ボタンをクリックして、感情分析を実行します。
 

5)感情分析の結果を確認する

感情分析の結果は以下のように出力されます。
 
 f:id:IntelligentTechnology:20190219153308p:plain
 
ここで注目いたしますのが、分析結果に出力されている score の値です。
この score は、-1.0 〜 1.0 までの範囲の値をとり、1.0 に近づくほどポジティブ、逆に -1.0 に近づくほどネガティブな感情を表している、とのこと。

上記の分析の結果を見ますと、

文章 スコア
"昨日のうどんはとてもおいしかった。" 0.8
"今度はひやひやも試してみよう。" 0.3
(全体) 0.6

 
昨日のうどんはとてもおいしかった。」という文章の score は 0.8 ですので、かなりポジティブであることがわかります。
一方、「今度はひやひやも試してみよう。」の文章の score は、0.3 ですので、ややポジティブ寄りの、ニュートラルな感情表現だ、と判断することができます。
そして文章全体のスコアは、先頭の方に出力されている 0.6 という値です。文章全体としても、ポジティブな感情が読み取れる、と判断できそうです。
( magnitude の値は、その感情の強度を表している、とのこと。)
 

一方で、ややマイナスな印象を与える、
昨日のうどんはあまりおいしくなかった。今度はもっと早い時間に行ってみよう。
という文章の場合は、
 
f:id:IntelligentTechnology:20190219154717p:plain
 
以下のように「昨日のうどんはあまりおいしくなかった。」という文章の score が -0.9 となっていることからもわかるとおり、感情分析の結果としても、やはりネガティブな文章だと判断しているようです。
 
 f:id:IntelligentTechnology:20190219155300p:plain
 

飲食店レビューコメントを感情分析する

 

1)検証対象の選定

Cloud Natural Language API による感情分析の方法がわかったところで、実際に、飲食店のレビューコメントに対して、この感情分析を試してみたいと思います。

飲食店レビューと言えば、おなじみの食べログ
私の住んでいる香川県のランキングを見てみますと、

どういうわけかうどん屋ばかりでございました。
 
f:id:IntelligentTechnology:20190219171359p:plain
 ※食べログ( https://tabelog.com/ )より引用
 
今回、この中から検証対象として、

をピックアップしました。
こちらのお店、空港のテナントとして出店されているお店ではありますが、ほんとうにしっかりした麺を提供されている、本格的なうどん屋さんです(私も空港でうどんを食べるときは利用しています)。
しかし、空港内の店舗ということもあって、やや、お値段が高めに設定されていたりします。
そういうこともあって、星の数が(2019年2月時点で)全体で 3.47 と、良い評価と、そうでもない評価が入り混じっている状態。
 
 f:id:IntelligentTechnology:20190220093421p:plain:w360
 ※食べログ( https://tabelog.com/ )より引用
 
やや評価のわかれるレビューコメントにひそむ感情と、その星の数とのあいだに、果たして相関関係は見いだすことはできるのか。
さっそく、Cloud Natural Language API を用いて、各レビューのコメントを感情分析し、その score を算出してみます。
 

2)検証結果

 
はやし家製麺所 高松空港店のレビューコメント先頭30件について、そのコメント文章を感情分析しました。
その結果として導出された score を縦軸に、そのレビューの星の数を横軸にして、散布図として表したのがこちら。
 
f:id:IntelligentTechnology:20190220170929p:plain
 
Excel の CORREL 関数で求めたこの score と星の数の相関係数の値は、 0.321。一応、正の相関関係が見られます。上記の散布図中の近似曲線もやや右肩上がりの線として描画されました。
 

ちなみに、感情分析の score と、レビューの星の数とを単純に 1件目から 30件目まで並べたのがこちら。
 
f:id:IntelligentTechnology:20190220110806p:plain
 
この 2つの並びも、なんとなく似ているかなーというところ。結論としては「相関関係は、あるといえばある」くらいの感じでしょうか。
サンプル数も少ないので、なんとも言えないところもあるのですが、少なくとも、良い評価のレビューでは比較的ポジティブな表現が多く、そうでもない評価の場合は、ネガティブな感情を読み取れるような文章があった、ということは言えそうです。

実際に、「空港でこの水準のうどんを食べれるとは、非常に嬉しい」のようなコメントに対しては、score が 0.8 となっており、
「おうどんは残念ながらイマイチ」みたいなネガティブコメントに対しては、score も -0.8 と、ネガティブな判定をしていました。
Cloud Natural Language API の感情分析の判定基準としては、じゅうぶん実用的なものになっているのではないかと感じました。

一部で、星の数は多いのに、コメントがネガティブだと判断されていたり、逆に、星は少ないが、コメントはそれほどネガティブでない、というパターンもあり、そういうパターンでは、やはりそのコメントの中に本音が隠されているのかも、とも想像しました。
 

まとめ

 
この Cloud Native Language API のような、Google が提供する機械学習のプロダクトについては、すでに実用的な精度の機能が提供されてきているのだなぁと感じました。
機械学習やディープラーニングの機能を用いたソリューションを実現する場合でも、このようなサービスをうまく活用していくことが、重要になってくるのではないか、と思わされました。