「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「Amazon Comprehend」を利用して週報を感情分析する方法について。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「AWSをどのように活用すればいいのか」という疑問を持つ人に向けて、課題を設定しその解決策としてAWSを利用してみます。「AWSやクラウド、DXが大事」といわれている昨今、本稿のように課題から考えて活用方法や必要な知識を考えてみてはいかがでしょうか。
本稿が「AWSを勉強したが、じゃあどんなことに使えばいいのか」という疑問への回答の一つになれば幸いです。
社員に対して研修を実施しているが、毎回の研修に対するモチベーションがどうなっているかを知りたい。週報を提出してもらっているのでそこから読み取りたいが、全員分読むのは大変なので、ざっくりと計測できないか。
「Amazon Comprehend」を利用した感情分析で週報のポジティブ/ネガティブを数値化し、モチベーションが下がっていることを検知する。
Amazon Comprehend(以下、Comprehend)は、機械学習を利用して、テキストの感情分析や関係性を分析できる自然言語処理サービスです。「自然言語処理」というと難しそうですが、AWSの画面上で操作することもできるので、機械学習に関する深い知識は必要ありません。
週報を分析する前に、Comprehendを試してみましょう。
Comprehendを開いて「Launch Amazon comprehend」をクリックします(図1)。
開いた画面の「Input text」欄に分析したい文章を挿入し「Analyze」をクリックします。ここでは例として、「こんにちは。今日は最高の気分で絶好調です。」と入力しています(図2)。
分析が完了すると、図3のように「Insights」に結果が表示されます。
今回の目的は感情分析なので、ここでは「Sentiment」の結果を見てみましょう。結果は「Positive 0.99 confidence」となっていて、他の項目は「0」になっているので、入力したテキストはポジティブな内容と分かります。
なお、結果として表示される他の項目については以下の表にまとめますのでご参照ください。
項目名 | 説明 |
---|---|
Entities(エンティティ) | 提供されたテキストが「人」「場所」「位置」などの情報に自動的に分類されたもの |
Key Phrases(キーフレーズ) | 提供されたテキストの中で「キーフレーズ」と分析されるフレーズとその信頼スコア |
Language(言語) | 提供されたテキストがどの言語で書かれたものかを識別したもの |
PII(個人識別可能情報) | 個人を識別できるような情報を指す(※2020年12月現在は英語のみサポート) |
Sentiment(感情) | 提供されたテキストの感情を、ポジティブ(肯定的)、ネガティブ(否定的)、ニュートラル(中立的)、Mixed(混在)で表す |
Syntax(構文) | 提供されたテキストの名詞、形容詞、動詞などの構文解析 |
それでは、週報の内容を感情分析してみましょう。先ほどは文章を直接入力しましたが、複数のデータを直接入力するのは手間がかかります。Comprehendには「Amazon S3」に保存したデータを分析のソースとして利用できる機能があるので、利用します。
ここでは筆者が週報のサンプルとして、講義の受講生を想定して幾つか書いたものを利用します。計12人分の週報が1人1行でまとめられています。
今日は講義についていくことができたが、一部わからなかったところがあったので、帰ってからちゃんと復習したい。 予習を行ったので授業についていくことができた。今後も予習を続けていきたい。山田先生の教え方は非常にわかりやすい。 今日の講義内容はほとんど分からずついていくことができなかった。 第2章の内容がイマイチわからなかったが、ほかの部分はとてもよく分かった。 ついていくのがしんどかった。次回は受講したいと思わない。 内容が簡単すぎてつまらなかった。 最後まで分かりやすく聞くことができた。2章の内容は少し難しかったように思える。 初心者にも分かりやすい内容だったが一部内容に不正確なところがあった。 面白かった!次の講義もぜひ受講したい。 全体的に難しかった。事前に予習が必要かなと思います。 難しくてよくわからなかった。ちょっと受講していてしんどいです...... 先生の補足が面白く、また授業内容が分かりやすかったので楽しく受講することができました。
用意したデータをテキストファイルに保存し、S3にアップロードします(図4)。
再びComprehendを開いて、画面左のメニューから、「Analysis jobs」を選択します。次に、画面中央の「Create jobs」を開きます(図5)。
ここでの「jobs」とは分析処理のことです。次に設定する内容で分析タスクを実行します。
続いて、jobを作成します。以下の表にまとめている通りに設定してください。「[自由に設定]」と記述しているものは自由に設定していただいて構いませんが、記入例も書くので参考にしてください。
カテゴリー | 設定項目 | 設定内容 | |
---|---|---|---|
Job settings | Name | [自由に設定] 記入例:WeeklyReportAnalysis |
|
Analysis type | Sentimental | ||
Language | Japanese | ||
Input data | Data source | My documents | |
S3 location | [用意したデータをアップロードしたバケットを選択] | ||
Input format - optional | One document per line | ||
Output data | S3 location | [出力される結果を保存したいバケットを選択](※ここではデータをアップロードしたバケットと同じバケットを選択) | |
Access permissions | IAM Role | Create an IAM role(※既にIAM roleを作成している場合は、そちらを選択) | |
Permission to access | Input and Output S3 buckets | ||
Name suffix | [自由に設定] 記入例:WeeklyReportAnalysis |
||
記入後は、右下の「Create job」をクリックします(図6)。
Analysis jobsに戻ると、先ほど作成したjobの「Status」が「in progress」になっていることが確認できます(図7)。これが「Completed」になるまでお待ちください。
Completedになったら結果を確認します。Analysis jobsの「Name」欄が個別のJobへのリンクになっているので自分が作成したJobの詳細に遷移します。
遷移後、画面中央の「Output」から結果の出力先に遷移してください(図8)。
結果を出力した「output.tar.gz」ファイルに遷移するのでダウンロードします。ダウンロードしたファイルを解凍します(※gzファイルの解凍には別途解凍用のソフトが必要な場合があります。少なくともWindowsをお使いの場合は必要です)。
解凍すると、以下のようにjson形式で結果が保存されています。
{"File": "comprehend_sample.txt", "Line": 1, "Sentiment": "POSITIVE", "SentimentScore": {"Mixed": 8.340812200913206e-06, "Negative": 0.00012757463264279068, "Neutral": 0.027435356751084328, "Positive": 0.9724286198616028}} ・ ・ ・ ※以下、用意した行分の結果が続く
後は、この結果を分析するだけです。分析にはさまざまな方法を利用できますが、ここでは例としてスプレッドシートに取り込みます。
分析結果をjson形式からcsv形式に変換します(※これはスプレッドシートに取り込むために必要な処理です。「json形式のまま利用する」「csv形式以外の形式に変換する」などお使いのツールに合わせてください)。
変換したcsvファイルをスプレッドシートに取り込み使いやすいようにデータを加工します。ここでは、分析の元になった文章を追加した他、結果に応じて色分けしました(図9)。
加工したデータを基に必要な分析をしてください。例えば「SentimentがNEGATIVEになっている週報を提出した受講生は何らかの不満を抱えておりモチベーションが下がっているかもしれないため、どうやら3番、5番、7番、10番、11番の週報を書いた受講生への対応が必要かもしれない」と、指標の一つにできそうです。
最後に今回かかった料金を計算してみます。Comprehendの感情分析にかかる料金は下記の通りです(※2020年12月現在の料金表を参照しています。また、その他サービスの利用料は含んでいません)。
ユニット数 | 1ユニット当たりの金額 |
---|---|
〜10Mユニット | 0.0001米ドル |
10Mユニット〜50Mユニット | 0.00005米ドル |
50Mユニット〜 | 0.000025米ドル |
※1ユニット=100文字 |
今回分析にかけた400文字は4ユニット、つまり0.0001米ドル×4=0.0004米ドルとなり、およそ0.04円で自然言語処理による感情分析を検証できました。
今回は、週報の分析を課題に、Comprehendを利用して感情分析し、モチベーションが下がっている受講生を探す指標の一つとする作業を実践してみました。
今回は週報をテーマにしましたが、週報に限らずレビューや口コミなど、さまざまなテキストデータに活用できます。また感情分析に加えてエンティティの結果も見ることで、より結果を掘り下げることができるかもしれません。
重要なのは、これらの自然言語処理を特別な知識なくできる点です。必要な時に、必要な人が、単純な操作で実行できることはビジネスを進める上で大きな武器になります。
Copyright © ITmedia, Inc. All Rights Reserved.