「Amazon Comprehend」を使い、週報を感情分析してモチベーションを計るにはAWSチートシート

「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「Amazon Comprehend」を利用して週報を感情分析する方法について。

» 2021年01月06日 05時00分 公開
[平石匠東京ITスクール]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

身近な課題を基にAWSを使ってみよう

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は「AWSをどのように活用すればいいのか」という疑問を持つ人に向けて、課題を設定しその解決策としてAWSを利用してみます。「AWSやクラウド、DXが大事」といわれている昨今、本稿のように課題から考えて活用方法や必要な知識を考えてみてはいかがでしょうか。

 本稿が「AWSを勉強したが、じゃあどんなことに使えばいいのか」という疑問への回答の一つになれば幸いです。

課題

社員に対して研修を実施しているが、毎回の研修に対するモチベーションがどうなっているかを知りたい。週報を提出してもらっているのでそこから読み取りたいが、全員分読むのは大変なので、ざっくりと計測できないか。


提案する解決策

「Amazon Comprehend」を利用した感情分析で週報のポジティブ/ネガティブを数値化し、モチベーションが下がっていることを検知する。


「Amazon Comprehend」とは

 Amazon Comprehend(以下、Comprehend)は、機械学習を利用して、テキストの感情分析や関係性を分析できる自然言語処理サービスです。「自然言語処理」というと難しそうですが、AWSの画面上で操作することもできるので、機械学習に関する深い知識は必要ありません。

Comprehendを試す

 週報を分析する前に、Comprehendを試してみましょう。

 Comprehendを開いて「Launch Amazon comprehend」をクリックします(図1)。

図1 右上の「Launch Amazon comprehend」をクリック

 開いた画面の「Input text」欄に分析したい文章を挿入し「Analyze」をクリックします。ここでは例として、「こんにちは。今日は最高の気分で絶好調です。」と入力しています(図2)。

図2 「こんにちは。今日は最高の気分で絶好調です。」と入力し、右下の「Analyze」をクリック

 分析が完了すると、図3のように「Insights」に結果が表示されます。

図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)。

図4 テキストファイルをS3にアップロードした結果

 再びComprehendを開いて、画面左のメニューから、「Analysis jobs」を選択します。次に、画面中央の「Create jobs」を開きます(図5)。

図5 「Analysis jobs」を選択し、「Create jobs」をクリック

 ここでの「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)。

図6 上記表の通り入力して「Create job」をクリック

 Analysis jobsに戻ると、先ほど作成したjobの「Status」が「in progress」になっていることが確認できます(図7)。これが「Completed」になるまでお待ちください。

図7 jobの「Status」が「in progress」になっている

 Completedになったら結果を確認します。Analysis jobsの「Name」欄が個別のJobへのリンクになっているので自分が作成したJobの詳細に遷移します。

 遷移後、画面中央の「Output」から結果の出力先に遷移してください(図8)。

図8 「Output」の「output.tar.gz」ファイルへのリンクをクリック

 結果を出力した「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)。

図9 データを加工した結果(※結果のLineは「元データの1行目が0、2行目が1、……」と表示されることに注意してください)

 加工したデータを基に必要な分析をしてください。例えば「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を利用して感情分析し、モチベーションが下がっている受講生を探す指標の一つとする作業を実践してみました。

 今回は週報をテーマにしましたが、週報に限らずレビューや口コミなど、さまざまなテキストデータに活用できます。また感情分析に加えてエンティティの結果も見ることで、より結果を掘り下げることができるかもしれません。

 重要なのは、これらの自然言語処理を特別な知識なくできる点です。必要な時に、必要な人が、単純な操作で実行できることはビジネスを進める上で大きな武器になります。

筆者紹介

平石 匠(ひらいし たくみ)

株式会社システムシェアード所属。入社後1年間現場を経験後、2019年から本社で新規事業開発に従事。新規プロダクト「安心サンドボックス」のプロダクトオーナーなどを経験後、現在はIT教育部門「東京ITスクール」で新規研修の立ち上げに参画中。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。