ENGINEER BLOG

ENGINEER BLOG

感情分析いつやるの?今でしょ!~テレワーク時代の感情分析~

こんにちは。
イノベーション本部の田中です。

最近はずっとテレワークをしています。
そのためチームメンバーとのコミュニケーションや打ち合わせは、
チャットやWEB会議をメインに行っています。

チャットやWEB会議ツールを活用することで、
十分コミュニケーションをとれますが、WEB会議って対面よりも感情を伝えたり、
読み取ったりすることが難しくないですか?
そんな思いから、今回は感情認識APIを試してみました。

今回の取り組み

以下の感情認識APIを試してみました。

  1. Cloud Natural Language

    • テキストを分析して、感情分析や構造分析などを行うことができる
    • 日本語に対応している
    • 感情分析では、対象のテキストが"ネガティブ"か"ポジティブ"かを判断できる値を返す
  2. Watson Tone Analyzer

    • テキストを分析して、感情と文体のトーンを検出することができる
    • 日本語に対応していない ※今回は英語に翻訳してから利用する
    • 怒り: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スプレッドシートに保存

    flow

1. 環境

  • windows10
  • python3.7

2. 事前準備

「Cloud Natural Language」と「Watson Tone Analyzer」を使用するために以下の準備が必要です。

  • Google Cloud Platform(以降、GCP)

    • Cloud Natural Languageを有効にする
      API_NaturalLanguage

    ※「Cloud Speech-to-Text」、「Google Sheets API」の有効化及び、
     認証キーの取得、スプレッドシート作成・共有設定は前回の記事をご参考ください

  • Watson

    • Tone Analyzerのインスタンスを作成する
      API_ToneAnalyzer

    • API鍵とURLを確認する
      Key

    • 必要なパッケージのインストール

      pip install --upgrade "ibm-watson>=4.5.0"
      

3. 実装

感情認識のコードはそれぞれの公式サイトにサンプルコードがあるので利用させて頂きます。

  • Cloud Natural Language

    ※言語の設定
    今回は日本語の音声認識を行いたいので、サンプルコードの
    「language」を変更します。

    #変更前
    language = 'en'  
    

    #変更後
    language = 'ja'  
    
  • Watson Tone Analyzer

    • 事前準備で確認した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」の二つの感情分析を行うことができました。

output

テキスト 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も存在しますので、今後試していきたいです。