見出し画像

twitterのツイートを使って感情分析をしてみよう(初級者向け)~概要編~

今回は、twitter のツイートを用いて感情を分析する手法をご紹介したいと思います。

私がこの手法を研究したいと考えたのは、感情をデータ化して可視化できないものか?と思い立ったのがきっかけです。

感情をデータ化して可視化できれば、下記のことが一目でわかるようになります。

・感情と株価の関連がわかる
・自社のブランドイメージがわかる
・製品の良し悪しがわかる
・政治の政策に対する世論のイメージがつかめる

そのほかにも、感情のデータをDeep learningすることで様々なAIのサービスに活用することも考えられます。

今回は、感情分析に関して、

・概要編
環境構築編
実践編

という形で3回の記事に分けてご紹介していこうと思います。

本記事では、感情分析の概要についてご紹介していきたいと思います。

はじめに

感情分析とは?

ここで紹介する感情分析とは、ツイートを収集して分析し、ポジティブなのかネガティブなのかを判定する手法のことです。

twitterに対象を絞ったのは、世の中の感情をリアルタイムにつかみやすいという理由からです。

本記事の対象者について

こちらの記事は、エンジニア初級者向けに書かれております。マーケティングのご担当者やブランド戦略に携わる方も、ご興味がありましたらご覧ください。

1. 感情分析の方法について

感情分析の方法は、大きく分けて3つのパターンがあります。

A.感情の辞書に基づいて分析する

あらかじめ用意されている感情辞書(以下、極性辞書)に基づいて、ツイートの内容を照らし合わせながら分析する手法です。ルールベースの分析手法といえます。

極性辞書は、東京工業大学の高村研究室のサイトに公開されております。

極性辞書は、感情に関連するワードがポジティブなのかネガティブなのかを数値で定義しております。数値は、1に近づくほどポジティブな度合いが大きく、-1に近づくほどネガティブな度合いが大きくなります。

例えば極性辞書には

良い、いい → 0.999995
悲しい   → -0.999241

が定義されており、

「今日の天気はとても良い」の場合、「良い」が含まれているので、このツイートは0.999995の度合いでポジティブと判定されます。

B.機械学習を用いる

2010年代から、機械学習を用いた感情分析が主流になってきました。

前述したルールベースの手法の場合、下記のデメリットがあります。

・極性辞書にない単語は判定できない
・文脈によって異なる単語は誤って判定される

例えば、「やばい」という単語は文脈によってポジティブにもネガティブにも使われます。一方で、極性辞書は「やばい」は-0.990268で登録されていますので、常にネガティブだと判定されてしまうのです。

そうしたデメリットから、機械学習を用いて感情分析をする手法が広まってきました。

機械学習を用いると、アルゴリズムが学習に基づいて文脈を予測することができるので、極性辞書がなくとも文脈から感情を判定することが可能になります。

たとえば、アルゴリズムが下記を学習しますと、

「この景色、ほんとにやばい!信じられないくらいきれい!」→ポジティブ
「やばい!おなかが痛くなってきた。」→ネガティブ
「やばい、このケーキほんとおいしい!」→ポジティブ

アルゴリズムが「やばい」を文脈ごと学習するので、「このカレー、ほんとやばい!うますぎ!」というツイートをポジティブだと判定できるのです。

実際には、文章をベクトルに変換して文脈を学習していくDoc2Vecという手法がとられます。詳しくは本稿では割愛します。

C.感情分析のクラウドサービスを使う

企業でリリースしている感情分析のクラウドサービスを使う方法です。AIを活用したサービスも多く、より精緻な分析ができると考えられます。

代表的なサービスをご紹介いたします。

Google Cloud natural Language

IBM Watson Tone Analyzer

Amazon Comprehend

Azure Cognitive Services

日本語のAPIが充実しているのは、Google Cloud natural Languageです。詳しくは、リンク先をご覧ください。

2. 感情分析の手順について

本稿では、A.感情の辞書に基づいて分析する手法 を採用いたします。最もシンプルなプログラムで実現できるため、エンジニア初級者に向いているためです。

次に具体的な手順をご紹介していきます。

1. twitter API からツイートを取得
2. ツイートを形態素解析する
3. 極性辞書で感情分析してスコアリング

となります。

1. twitter API からツイートを取得

twitter API を用いて、投稿されたツイートをプログラムで自動的に取得するできるようにします。

twitter API を使用するためには、twitterのアカウントの取得とtwitter developerサイトで申請が必要です。

詳しくは、環境構築編でご紹介しておりますのでご覧ください。

2. ツイートを形態素解析する

twitter APIからツイートを取得できるようになったら、ツイートを形態素解析します。形態素解析とは、言葉が意味を持つまとまりを最小単位まで分割する手法のことを言います。

たとえば、

「本日はいい天気です。」

を形態素解析すると、

本日(名詞) は(助詞) いい(形容詞) 天気(名詞) です(助動詞)

に分解されます。

単語を意味のある最小単位に分割することで、極性辞書から単語の感情を分析することができます。

3. 極性辞書で感情分析してスコアリング

極性辞書を使って、形態素解析した単語がどのような感情に該当するのかを探し出してスコアリングします。

例えば上述の例文を使うと、

[単語]  [スコア]
本日 → 0.602377
いい → 0.999995
天気 → 0.24065

となり、このスコアを合計すると約1.84となります。スコアが正であるため、この例文はポジティブな感情を表していると判定されます。

しかしながらこの手法の場合、分析結果がそれほど正確ではないという問題にぶつかります。

原因を以下に列挙します。

3. 感情分析の問題点

極性辞書を用いて感情分析をすると、いくつかの問題が発生します。

A.品詞によってスコアにばらつきが出る

例えば、「相撲」に対応するスコアを見ると、

相撲 → -0.91446

となり、「相撲を見に行った」というツイートはネガティブであると判定されてしまいます。これは、品詞によって判定の精度にばらつきがあるためだと考えられます。特に名詞は、ばらつきが多いように感じられます。

解決するためには、前述した機械学習を用いて、単語単位でなく文脈で意味をとらえる必要があります。ただし、プログラム初心者には少々ハードルが高いのが正直なところです。

妥協案として、今回は比較的スコアが安定している形容詞に絞って分析を進めていきたいと思います。形容詞は、感情を表しやすい品詞であるためスコアのばらつきが少ないと考えられます。

B.単語の重複をすべてカウントしてしまう

例えば、

「かわいいいいいいいいいい~。」というツイートがあった場合、本来は「かわいい」の1単語のみカウントして、重複している「いい」は除外するべきです。

しかし、実際には、「かわいい」「いい」「いい」「いい」「いい」がすべてカウントされるので実際よりもポジティブなスコアが高くなってしまいます。

対応策としては、同じ単語が連続している場合は、カウントしないかもしくは1単語のみ判定する方法が考えられます。

今回はシンプルに進めていきたいため、上記を考慮せずに分析を進めていきます。

C. 係り受けを考慮していない

係り受けとは、単語間の主語/述語、修飾/被修飾の関係のことを言います。

例えば、

「とても美しい女性がいます。」

の場合係り受けは、

とても → 美しい(修飾/被修飾)
美しい → 女性(修飾/被修飾)
女性  → います(主語/述語)

となります。

この係り受けを考慮しないと、正確に感情の分析ができなくなります。

例えば、

A. 「暗い夜道を歩く」
B. 「暗い気持ちになる」

というツイートがある場合、係り受けを考慮しないと、両ツイートとも「暗い」という単語が存在するため、ネガティブであると判定されてしまいます。

一方で、「暗い」が「夜道」に係っているか、「気持ち」に係っているか考慮できれば、Bのみネガティブであると判定できます。

このように係り受けを考慮することで、正確な感情分析が可能になります。

係り受けの解析をするために、CaboChaという解析器があります。

今回は係り受けを考慮しませんが、ご興味がありましたらお試しください。

終わりに

さて、本投稿では感情分析について概要をご説明しました。

次回は、感情分析に必要な環境構築についてご紹介してまいります。

お付き合いいただき、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?