
こんにちは。
イノベーション本部の田中です。
最近はずっとテレワークをしています。
そのためチームメンバーとのコミュニケーションや打ち合わせは、
チャットやWEB会議をメインに行っています。
チャットやWEB会議ツールを活用することで、
十分コミュニケーションをとれますが、WEB会議って対面よりも感情を伝えたり、
読み取ったりすることが難しくないですか?
そんな思いから、今回は感情認識APIを試してみました。
今回の取り組み
以下の感情認識APIを試してみました。
-
- テキストを分析して、感情分析や構造分析などを行うことができる
- 日本語に対応している
- 感情分析では、対象のテキストが"ネガティブ"か"ポジティブ"かを判断できる値を返す
-
- テキストを分析して、感情と文体のトーンを検出することができる
- 日本語に対応していない ※今回は英語に翻訳してから利用する
- 怒り:anger、不安:fear、喜び:joy、悲しみ:sadnessなどの感情を検出する
上記の通り、「Cloud Natural Language」と「Watson Tone Analyzer」はテキストから感情分析を行います。
そこで今回は、
以前の記事「議事録担当なんてなくそうよ。Google Cloud Speech -to-Textを使ってみた」
で作成したプログラムを活用して音声をテキスト変換し、
そのテキストを感情分析したいと思います。
処理概要は以下の通りです。
-
PCのマイクから認識した音声をリアルタイムでテキストに変換
-
変換したテキストを使って「Cloud Natural Language」による感情分析
-
変換したテキストと「Cloud Natural Language」の結果をGoogleスプレッドシートに保存
-
Googleスプレッドシートの関数「GOOGLETRANSLATE」を使用して、テキストを日本語から英語に翻訳
-
翻訳されたテキストを使用して「Watson Tone Analyzer」による感情分析して、
結果をGoogleスプレッドシートに保存
1. 環境
- windows10
- python3.7
2. 事前準備
「Cloud Natural Language」と「Watson Tone Analyzer」を使用するために以下の準備が必要です。
-
- Cloud Natural Languageを有効にする
※「Cloud Speech-to-Text」、「Google Sheets API」の有効化及び、
認証キーの取得、スプレッドシート作成・共有設定は前回の記事をご参考ください - Cloud Natural Languageを有効にする
-
-
Tone Analyzerのインスタンスを作成する
-
API鍵とURLを確認する
-
必要なパッケージのインストール
pip install --upgrade "ibm-watson>=4.5.0"
-
3. 実装
感情認識のコードはそれぞれの公式サイトにサンプルコードがあるので利用させて頂きます。
-
※言語の設定
今回は日本語の音声認識を行いたいので、サンプルコードの
「language」を変更します。#変更前 language = 'en'
#変更後 language = 'ja'
-
- 事前準備で確認したAPI鍵、URLをそれぞれ記入します
- versionを設定します。今回は’2017-09-21’を設定しました。
from ibm_watson import ToneAnalyzerV3 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator authenticator = IAMAuthenticator('{apikey}') tone_analyzer = ToneAnalyzerV3( version='{version}', authenticator=authenticator ) tone_analyzer.set_service_url('{url}')
実行結果
音声から変換したテキストを入力データとして使い、
「Cloud Natural Language」、「Watson Tone Analyzer」の二つの感情分析を行うことができました。
テキスト | Cloud Natural Language | Watson Tone Analyzer |
---|---|---|
テレワークが続いていて長い間直接お会いできていないですね | score:-0.600000023841858 | confident (score:0.80026) |
少し寂しいです | score:-0.899999976158142 | sadness (score:0.96957) |
お元気ですか | score:0.300000011920929 | ブランク |
こちらは元気です | score:0.800000011920929 | ブランク |
それは良かったです早くお会いして直接会話ができたらいいんですね | score:0.400000005960465 | joy (score:0.525229) |
※Cloud Natural Lanuageのscoreが正の値の場合はポジティブ、負の値の場合はネガティブの感情を表す
※Watson Tone Analyzerの分析結果がブランクの場合は、scoreが0.5以上の感情が検出できなかったことを表す
感情分析の結果も概ね正しい結果になりました。
WEB会議で相手の感情を読み取る補助ツールとして活用できそうですね!
まとめ
今回、APIを使うことで簡単に感情分析をすることができました。
一方で日本語は同じ言葉でも、複数の意味があります。
(例)
- 焼肉食べたくない?
- 焼肉食べたくない!
例えば、上記の二つの文章は同じ「食べたくない」という言葉がありますが、
意味合いは違いますよね?
このようなニュアンスの違いをテキストから完全に分析することはまだ難しいかもしれません。
今回はテキストから感情分析を行いましたが、声や顔から感情分析を行うAPIも存在しますので、今後試していきたいです。