Google Cloud Platformのニューラルネットワークでテキスト化された文章の感情分析 | そう備忘録

Google Cloud Platformのニューラルネットワークでテキスト化された文章の感情分析

文章の感情分析

以前にGCP(Google Cloud Platform)のニューラルネットワークモデルのSpeech-to-Text APIを使って音声をテキスト化した時の事を記事にした

今回はそのテキスト化された文章に対して感情分析をするAPI(analyzeSentiment)を使ってみた時の事を備忘録として記録しておく。

概要図

文章感情分析概要図

事前準備

GCP上でAPIを使用できる環境を整える必要があるのだが大まかな手順は以下の通り。

  1. GCP(Google Clond Platform)でプロジェクトを作成する
  2. API認証情報を作成する(控えておく)
  3. VMインスタンスを作成する

上記については以前の記事の「GCP(Google Clond Platform)でプロジェクトを作成する」から「VMインスタンスを作成する」までを参照して欲しい。

感情分析を行う

前述の手順でAPI実行用のVMインスタンスが出来ている前提として以下の手順で感情分析を行う。

自然言語処理APIを有効にする

Google Cloud Platformにログインしてメニューから”APIとサービス”ー>”ライブラリ”をクリックする。

APIとサービス、ライブラリ

“APIとサービスを検索”欄でCloud Natural Language APIを検索する。

Cloud Natural Language APIを検索する

「有効にする」ボタンをクリックする。

有効にする

有効になった。

APIが有効になった

sshの起動

Compute EngineのVMインスタンスの画面にて該当インスタンスのSSH横の三角をクリックして”ブラウザウィンドウで開く”をクリックする。

sshをブラウザウィンドウで開く

APIキーの設定

しばらく待つと新しいsshウィンドウが開く。

API認証情報を作成する”で控えておいたAPIキーを使うのだがAPIを呼び出すたびに何回も入力するのは面倒なので下記のコマンドで環境変数に保存しておく。

export API_KEY=控えておいたAPI KEY

APIキーをexport

requestdoc.jsonの作成

分析用のJSONファイルを作成する。

尚、文章は前回の記事でレゴに関するブログを読み上げた音声をテキストに変換したものを今回の入力にしている。

{
  "document":{
    "type":"PLAIN_TEXT",
    "content": "レゴマインドストームに7年ぶりの新ロボットキットが発売されるとの記事を見た。自分は教育用レゴマインドストーム EV 3の基本セットと拡張セットを持っているのだけれども、マインドストームで新作はもう出ないのかと諦めていたので新作が出ると聞いてとても嬉しい。以下気になったと言うか興味深い点。プログラミング環境。Pythonやスクラッチベースのドラッグ&ドロップでのコーディングが可能で Windows や Mac Android タブレットスマートフォンにも対応するとのことだが、今までのレゴマインドストームソフトウェアは使えないのかもしれない。"
  },
  "encodingType": "UTF8"
}

analyzeSentiment APIを呼び出す

文章単位で感情を分析するAPIを呼び出す。

curl "https://language.googleapis.com/v1/documents:analyzeSentiment?key=${API_KEY}" \
  -s -X POST -H "Content-Type: application/json" --data-binary @requestdoc.json

実行結果

{
  "documentSentiment": {
    "magnitude": 1.2,
    "score": 0.1
  },
  "language": "ja",
  "sentences": [
    {
      "text": {
        "content": "レゴマインドストームに7年ぶりの新ロボットキットが発売されるとの記事を見た。",
        "beginOffset": 0
      },
      "sentiment": {
        "magnitude": 0,
        "score": 0
      }
    },
    {
      "text": {
        "content": "自分は教育用レゴマインドストーム EV 3の基本セットと拡張セットを持っているのだけれども、マインドストームで新作はもう出ないのかと諦めていたので新作が出ると聞いてとても嬉しい。",
        "beginOffset": 112
      },
      "sentiment": {
        "magnitude": 0.6,
        "score": 0.6
      }
    },
    {
      "text": {
        "content": "以下気になったと言うか興味深い点。",
        "beginOffset": 369
      },
      "sentiment": {
        "magnitude": 0.1,
        "score": -0.1
      }
    },
    {
      "text": {
        "content": "プログラミング環境。",
        "beginOffset": 420
      },
      "sentiment": {
        "magnitude": 0.1,
        "score": 0.1
      }
    },
    {
      "text": {
        "content": "Pythonやスクラッチベースのドラッグ&ドロップでのコーディングが可能で Windows や Mac Android タブレットスマートフォンにも対応するとのことだが、今までのレゴマインドストームソフトウェアは使えないのかもしれない。",
        "beginOffset": 450
      },
      "sentiment": {
        "magnitude": 0.1,
        "score": -0.1
      }
    }
  ]
}
  • magnitude:その主張の中で表現されている感情の重みを表す
  • score:プラスはポジティブ、マイナスはネガティブな感情を表す

例えば、

「自分は教育用レゴマインドストーム EV 3の基本セットと拡張セットを持っているのだけれども、マインドストームで新作はもう出ないのかと諦めていたので新作が出ると聞いてとても嬉しい。」

の文章はmagnitude、scoreともに+0.6で重要でポジティブな文章と判断している。

一方、「以下気になったと言うか興味深い点。」はmagnitudeは0.1、scoreは-0.1。

それほど重要ではなく若干のネガティブな感情と判断している事が分かる。

その他にも「~かも知れない」も若干のネガティブな感情とニューラルネットワークは判断していることから感情判断APIはある程度の精度が出ていることが分かる。

今回の記事はこれで終了。

次回は単語単位での感情分析を試してみる。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。