Amazon Comprehend を利用した口コミの感情分析

# はじめに
今回は AWS の提供する自然言語処理(NLP)サービス Amazon Comprehend を利用して文章の感情分析を行います。

弊社の運営する [スクール検索口コミサイト](http://search.knowledgecommunication.jp/) の口コミを利用して感情分析を行い、弊社の口コミサイトの現状を確認してみようと思います。

# Amazon Comprehend とは
AWS の提供する自然言語処理(NLP)サービスです。文章を入力として与えることで、エンティティやキーフレーズ、主要言語の検出ができたり、感情分析や構文分析、トピックモデリングができます。
また、AutoMLを利用することで、自然言語処理の専門知識なしでカスタムモデルが作成でき、文章を独自のカテゴリに分類したり、特定の用語や名詞ベースでのエンティティ抽出が行えます。

https://aws.amazon.com/jp/comprehend/

[こちら](https://docs.aws.amazon.com/ja_jp/comprehend/latest/dg/what-is.html#how-examples)では、AWS Comprehend の利用例が記述されています。
※英語のため、Google のページ翻訳を用いて読むことをお勧めします。



2019年11月7日に[日本語対応](https://aws.amazon.com/jp/blogs/news/amazon-comprehend-japanese/)となったためご紹介いたします。


# 今回やること
弊社の運営する、スクール検索口コミサイトの口コミ感情分析を行います。

運営する口コミサイトが現状どのような場として利用されているのか、口コミの感情から傾向を読み取ろうと考え、検証に至りました。

# データの準備
解析したい文書を1行ごとにテキストファイルに追加します.
口コミサイトより、約4万6千件の口コミを入手し、各口コミを1行ごとに追加しました。

※1行当たり5120バイトまでという制限があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/3ea4f0db-b7a9-4429-506b-1046c95e7aea.png)

# データを S3 にアップロード
Amazon Comprehend は日本語対応したものの、まだ東京リージョンでは扱えないため、連携する S3 バケットを　Amazon Comprehend で利用できるリージョンで作成する必要があります。

以下に Amazon Comprehend が対応しているリージョンを示します。

__対応リージョン__
欧州(ロンドン)
欧州(アイルランド)
アジアパシフィック(シンガポール)
アジアパシフィック(シドニー)
欧州(フランクフルト)
米国東部(バージニア北部)
米国東部(オハイオ)
カナダ(中部)
米国西部(オレゴン)
※2019/11/27時点

- s3 バケットを対応リージョンで作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/538d99b0-4081-fff7-31ac-4dad882f7b99.png)

- 作成したバケットの任意の場所に、文章データをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/d17fadd0-37e2-69ab-6fb1-f50d6279d7d4.png)

# Amazon Comprehend で 感情分析
- s3 バケットを作成したリージョンにいることを確認し、Amazon Comprehend を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/b5459e1c-78e7-fb47-63fd-09e17ee714e2.png)

- Launch Amazon Comprehend クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/4c0eb4ba-2e17-7ac8-103f-1354ab6e6dff.png)

- サイドバーから Analysis jobs を選択し、Create job をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/553b3157-966f-ed02-3658-d17af5b8a2c8.png)


- Name : 任意のジョブ名を付けます。
- Analysis type : 分析に利用するタイプを選択します。今回は感情分析をおこなうため、Sentiment を選択します。
- Language : 解析する文章の言語を指定します。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/9af136cb-bef3-6d19-5c8c-ab84e24bf842.png)

 
- Data source : 利用するデータソースを選択します。
- S3 location : 入力データの保存先を指定します。
- Input format : 入力データのフォーマットを選択します。今回は1ファイルの各行に文章を保存したため、 One document per line を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/8da718f3-0281-df69-5958-0730e1095832.png)

- S3 location : 以下に出力先 s3 パスを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/85c05771-2d2e-a6af-b817-42ae18560b1a.png)

- 作成した s3 バケットへの入力、出力を許可するロールを選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/945302a0-875b-73bf-efd8-4cd83ccf6144.png)

- Create job をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/5557c76f-c0b2-b380-6452-eb4c2853fc99.png)

- ジョブを作成したら、Status が Completed になるまで待ちます。
- 6722465文字のデータに対して、7分ほどで解析は終了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/41486709-431f-ca20-f7fe-a18e790e2d41.png)

- 実行が完了したら、ジョブから解析結果の保存先パスが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/47f4ce48-aca3-a3da-f35b-0dbb38c4b39e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390035/b9ddd7db-979e-bb1a-a18b-b0989defd7f9.png)



- 解析結果は以下の形式で保存されています。  
  SentimentScore には文書がその感情である確度を示すスコアが入ります。


```
{"File": "ファイル名", "Line": 対象の文書が保存されている行, "Sentiment": "文章の感情", "SentimentScore": {"Mixed": スコア,"Negative": スコア, "Neutral": スコア, "Positive":スコア }}
```

# 解析結果
口コミサイトの口コミ感情分析を行った結果は以下のようになりました。  
まず一番、多いのが NEUTRAL でした。
次に多いのが、NEGATIVE でした。
この結果から、弊社の運営する口コミサイトでは基本中性的な口コミばかりだが、ネガティブな口コミも比較的多くみられることがわかりました。


| 項目 | 総数 |
|:--|:--|
|POSITIVE|3780|
|NAGATIVE|10269|
|MIXED|1316|
|NEUTRAL|30627|

# 料金
今回の検証にかかった料金を以下に示します。

- 感情分析の利用料金  


|項目|金額|
|:--|:--|
|10Mユニットまで|1ユニット当たり0.0001USD|
|10M~50Mユニットまで|1ユニット当たり0.00005USD|
|50Mユニット以上|1ユニット当たり0.000025USD|

※1ユニット = 100文字

- 今回利用したユニット数  
6722465文字 / 100 =  約67224ユニット
- 利用料金  
67224 * 0.0001USD = **6.7724 USD**

# おわりに
今回は、Amazon Comprehend を利用して口コミの感情分析を行ってみました。
約4万6千件ものデータをたった7分、しかも700円ほどで解析できてしまいかなり驚きました。

会社やイベント等のアンケートやレビューを安く、早く、簡単に分析したい。
そんな場合は、ぜひ Amazon Comprehend を利用してみてはいかがでしょうか。