GCPのニューラルネットワークでテキスト化された文章のエンティティ感情分析をやってみた
Contents
文章の単語単位の感情分析
以前にGCP(Google Cloud Platform)のニューラルネットワークモデルのSpeech-to-Text APIを使って音声をテキスト化した時の事を記事とそのテキスト文章をanalyzeSentiment APIを使って感情分析をした時の記事を書いた。
今回は同じ感情分析なのだが単語単位で感情分析をするAPI(analyzeEntitySentiment)を使ってみた時の事を備忘録として記録しておく。
概要図
単語単位での感情分析
事前準備
GCP上でAPIを使用できる環境を整える必要があるのだが大まかな手順は以下の通り。
上記については以前の記事の「GCP(Google Clond Platform)でプロジェクトを作成する」から「VMインスタンスを作成する」までを参照して欲しい。
単語単位の感情分析を行う
前述の手順でAPI実行用のVMインスタンスが出来ている前提として以下の手順で感情分析を行う。
自然言語処理APIを有効にする
Google Cloud Platformにログインしてメニューから”APIとサービス”ー>”ライブラリ”をクリックする。
“APIとサービスを検索”欄でCloud Natural Language APIを検索する。
「有効にする」ボタンをクリックする。
有効になった。
sshの起動
Compute EngineのVMインスタンスの画面にて該当インスタンスのSSH横の三角をクリックして”ブラウザウィンドウで開く”をクリックする。
APIキーの設定
しばらく待つと新しいsshウィンドウが開く。
”API認証情報を作成する”で控えておいたAPIキーを使うのだがAPIを呼び出すたびに何回も入力するのは面倒なので下記のコマンドで環境変数に保存しておく。
export API_KEY=控えておいたAPI KEY
requestdoc.jsonの作成
単語分析用のJSONファイルを作成する。
尚、文章は以前の記事でレゴに関するブログを読み上げて文章の感情分析を行ったのと同じモノを今回の入力にしている。
{
"document":{
"type":"PLAIN_TEXT",
"content": "レゴマインドストームに7年ぶりの新ロボットキットが発売されるとの記事を見た。自分は教育用レゴマインドストーム EV 3の基本セットと拡張セットを持っているのだけれども、マインドストームで新作はもう出ないのかと諦めていたので新作が出ると聞いてとても嬉しい。以下気になったと言うか興味深い点。プログラミング環境。Pythonやスクラッチベースのドラッグ&ドロップでのコーディングが可能で Windows や Mac Android タブレットスマートフォンにも対応するとのことだが、今までのレゴマインドストームソフトウェアは使えないのかもしれない。"
},
"encodingType": "UTF8"
}
analyzeEntitySentiment APIを呼び出す
単語単位で感情を分析するAPIを呼び出す。
curl "https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @requestdoc.json
実行結果
{
"entities": [
{
"name": "レゴマインドストーム",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.1949289,
"mentions": [
{
"text": {
"content": "レゴマインドストーム",
"beginOffset": 0
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "新作",
"type": "OTHER",
"metadata": {},
"salience": 0.14263977,
"mentions": [
{
"text": {
"content": "新作",
"beginOffset": 267
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"text": {
"content": "新作",
"beginOffset": 321
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0.1,
"score": 0
}
},
{
"name": "ロボットキット",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.09454739,
"mentions": [
{
"text": {
"content": "ロボットキット",
"beginOffset": 49
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "記事",
"type": "WORK_OF_ART",
"metadata": {},
"salience": 0.078607306,
"mentions": [
{
"text": {
"content": "記事",
"beginOffset": 94
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "マインドストーム",
"type": "OTHER",
"metadata": {},
"salience": 0.07356047,
"mentions": [
{
"text": {
"content": "マインドストーム",
"beginOffset": 240
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "レゴマインドストーム EV 3",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.048725344,
"mentions": [
{
"text": {
"content": "レゴマインドストーム EV 3",
"beginOffset": 130
},
"type": "PROPER",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "教育",
"type": "OTHER",
"metadata": {},
"salience": 0.04257684,
"mentions": [
{
"text": {
"content": "教育",
"beginOffset": 121
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "拡張セット",
"type": "OTHER",
"metadata": {},
"salience": 0.042139493,
"mentions": [
{
"text": {
"content": "拡張セット",
"beginOffset": 186
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "基本セット",
"type": "OTHER",
"metadata": {},
"salience": 0.042139493,
"mentions": [
{
"text": {
"content": "基本セット",
"beginOffset": 168
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "タブレットスマートフォン",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.041337542,
"mentions": [
{
"text": {
"content": "タブレットスマートフォン",
"beginOffset": 572
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "ドラッグ&ドロップ",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.020248594,
"mentions": [
{
"text": {
"content": "ドラッグ&ドロップ",
"beginOffset": 486
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "プログラミング環境",
"type": "OTHER",
"metadata": {},
"salience": 0.01811589,
"mentions": [
{
"text": {
"content": "プログラミング環境",
"beginOffset": 420
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "レゴマインドストームソフトウェア",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.017748956,
"mentions": [
{
"text": {
"content": "レゴマインドストームソフトウェア",
"beginOffset": 659
},
"type": "COMMON",
"sentiment": {
"magnitude": 0.2,
"score": -0.2
}
}
],
"sentiment": {
"magnitude": 0.2,
"score": -0.2
}
},
{
"name": "Mac",
"type": "CONSUMER_GOOD",
"metadata": {
"wikipedia_url": "https://en.wikipedia.org/wiki/Macintosh",
"mid": "/m/0zd6"
},
"salience": 0.01757631,
"mentions": [
{
"text": {
"content": "Mac",
"beginOffset": 560
},
"type": "PROPER",
"sentiment": {
"magnitude": 0.1,
"score": -0.1
}
}
],
"sentiment": {
"magnitude": 0.1,
"score": -0.1
}
},
{
"name": "Android",
"type": "CONSUMER_GOOD",
"metadata": {
"mid": "/m/02wxtgw",
"wikipedia_url": "https://en.wikipedia.org/wiki/Android_(operating_system)"
},
"salience": 0.01757631,
"mentions": [
{
"text": {
"content": "Android",
"beginOffset": 564
},
"type": "PROPER",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "Windows",
"type": "CONSUMER_GOOD",
"metadata": {
"mid": "/m/04r_8",
"wikipedia_url": "https://en.wikipedia.org/wiki/Microsoft_Windows"
},
"salience": 0.01757631,
"mentions": [
{
"text": {
"content": "Windows",
"beginOffset": 548
},
"type": "PROPER",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "Python",
"type": "OTHER",
"metadata": {
"mid": "/m/05z1_",
"wikipedia_url": "https://en.wikipedia.org/wiki/Python_(programming_language)"
},
"salience": 0.016818251,
"mentions": [
{
"text": {
"content": "Python",
"beginOffset": 450
},
"type": "PROPER",
"sentiment": {
"magnitude": 0.1,
"score": -0.1
}
}
],
"sentiment": {
"magnitude": 0.1,
"score": -0.1
}
},
{
"name": "点",
"type": "OTHER",
"metadata": {},
"salience": 0.015455283,
"mentions": [
{
"text": {
"content": "点",
"beginOffset": 414
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "こと",
"type": "OTHER",
"metadata": {},
"salience": 0.0152069125,
"mentions": [
{
"text": {
"content": "こと",
"beginOffset": 632
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "スクラッチベース",
"type": "OTHER",
"metadata": {},
"salience": 0.014547552,
"mentions": [
{
"text": {
"content": "スクラッチベース",
"beginOffset": 459
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "コーディング",
"type": "EVENT",
"metadata": {},
"salience": 0.014547552,
"mentions": [
{
"text": {
"content": "コーディング",
"beginOffset": 517
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
},
{
"name": "以下気",
"type": "OTHER",
"metadata": {},
"salience": 0.013379518,
"mentions": [
{
"text": {
"content": "以下気",
"beginOffset": 369
},
"type": "COMMON",
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"sentiment": {
"magnitude": 0,
"score": 0
}
}
],
"language": "ja"
}
- name:単語
- type:単語のタイプ
- salience:そのエンティティがテキスト全体でどの程度重要かを表す(重要な単語順に出力される)
- magnitude:その主張の中で表現されている感情の重みを表す
- score:プラスはポジティブ、マイナスはネガティブな感情を表す
- wikipedia_url:ウィキペディアのURL
”レゴマインドストーム”という単語がsalienceがトップで最も重要とのAIの判断。
これは全く正解でその通り!
続いて”新作”、”ロボットキット”、”記事”、”マインドストーム”、”レゴマインドストーム EV3”と続く。
salienceの順番はまぁ良いとしても、
- レゴマインドストーム
- マインドストーム
- レゴマインドストーム EV3
がそれぞれ別の単語として判断されてしまっている。
言葉のゆらぎについてはもう1段階別の加工が必要になるのかも知れない。
注目すべきは”レゴマインドストームソフトウェア”がmagnitudeが0.2でscoreが-0.2とネガティブに分析された事。
文章を読んで貰えば分かるが「ScratchやPythonに対応してレゴマインドストームソフトウェアは使えないのかも知れない」と若干だが確かにネガティブに捉えている。
この文章の意味を読み取ってネガティブ判断をしたのだと思うのだが、中々興味深い結果だった。
今回の記事はこれで終了。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
最近のコメント