はじめまして。2017年1月から中途入社しました、サービス開発課の佐々木(@bump_of_kiharu)です。
先日、中途入社歓迎会で自己紹介のLTをしましたが、自己紹介と共に、サーバーワークス社員のツイートを抽出して感情分析をした内容も併せてLTしました。そこで、感情分析でどのようなことを行ったのかを簡単に紹介したいと思います。
まずは自己紹介
感情分析までの手順
サーバーワークス社員のツイートを直近100件ずつ抽出し、ツイート内容を感情分析して、ポジティブな発言が多い人、ネガティブな発言が多い人が誰なのかをランキングにしてみました。具体的には以下のような手順で分析をしました。
Twitter API
を利用して、社員のツイートを100件ずつ抽出MeCab
を利用して、ツイート内容を形態素解析し品詞単位に分解日本語評価極性辞書
を利用して、形態素解析した結果を元に感情分析- 感情指数を算出
1. Twitter APIによるツイート抽出
まずはここから始まるのですが、今回一番苦労したのは分析そのものよりTwitter APIとの格闘です。(何が大変って、API制限が大変厳しいため一人100件ずつ全員分を抽出するのに3時間以上かかりました…)
まずは、Twitterデベロッパーセンター でアプリケーションを登録し、API利用に必要な以下の情報を取得します。その後APIにて抽出したツイートをローカルのDBに格納しました。
- Consumer Key(API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secret
2. MeCabによる形態素解析
次に、抽出したツイート内容を形態素解析していきます。形態素解析とは、文章を形態素(言語で意味を持つ最小単位)に分割し品詞等を判別する作業です。例えばこのツイートを形態素解析すると、このようになります。
今回はMeCabというオープンソースの形態素解析エンジンを使用しました。(その他にも色々あるようです)
3. 日本語評価極性辞書を利用して感情分析
次に、形態素解析した情報を元に感情分析を行っていきます。ただし今回は簡易的な分析のみを行いました。
感情を数値化した「日本語評価極性辞書」というのが公開されているので、それを利用して単語単位で感情度を分析します。具体的には、ポジティブな単語であれば +1 、ネガティブな単語であれば -1 といった具合に、ポジティブ指数を評価していきます。
4. ポジティブ指数を算出
最後に、以下の条件でポジティブ王・ネガティブ王を算出しました。
- 直近100件のツイートを対象とする(ただし公式リツイート、リプライは除く)
- 有効ツイートのポジティブ指数の平均値で順位を決定する
- 取得できたツイートが20件以上のアカウントのみを対象とする
- 2015年1月1日以降のツイートがあるアカウントのみを対象とする
休眠状態のアカウントもあったため、2015年以降のツイートがあるアカウントのみを対象にしました。例えばこちらのアカウントは、ポジティブ王上位にランクインしていたのですが、2013年以降の活動が休止していたので、残念ながら対象外としました。(弊社代表取締役のサブアカウント)
感情分析の例
ポジティブなツイート例
これは非常に分かりやすい例です。「軽やか」「良い」「楽しみ」といったポジティブワードで溢れており、ポジティブ指数も+6.0という結果になりました。
ネガティブなツイート例
こちらは、「風邪」「悲しい」といったワードがネガテイブ判定されていますが、ここで注目していただきたいのが絵文字です。
絵文字は感情の塊といっても過言ではありません。今回利用した「日本語評価極性辞書」には絵文字の考慮が一切なかったため、自前で絵文字の評価辞書を用意して評価することで、精度が格段にアップしました。
精度がイマイチなツイート例
やはり、くだけた表現やスラングが多くなると精度が落ちます。この例では、連続した文字の「いい」の部分がGoodの意味だと誤認され、超ポジティブな+8.0の評価になってしまいました。
この他にも「負けないよ」の箇所で、「負け」だけ評価されてネガティブとなっています。打ち消しを意味する「ない」が、どの語句にかかっているのかまで分析して評価すべきなのですが(係り受け解析)、それは今後の課題です。
🏆ポジティブ王結果発表
お待たせ致しました!それではサーバーワークスのポジティブ王の発表です!
映えある第1回サーバーワークスポジティブ王に輝いたのは・・・羽柴さんでした!
順位 | ツイッターアカウント | 平均ポジティブ指数 | 有効ツイート数 |
---|---|---|---|
1位 | @hashiva | 0.95 | 85 |
2位 | @mana_cat | 0.78 | 46 |
3位 | @kachina_t | 0.74 | 95 |
4位 | @ooishi | 0.64 | 62 |
5位 | @hassaku_63 | 0.62 | 83 |
それでは、ポジティブ王 羽柴さんのツイートをちょっと覗いてみましょう。
いいねー。 RT @k_yokokura: 今日はbeerが間違いなくうまいw
— 羽柴 孝/Takashi Hashiba (@hashiva) 2012年4月27日
いいねー。 RT @iara: Sparrowってどうなんよ
— 羽柴 孝/Takashi Hashiba (@hashiva) 2012年4月4日
いいねー。 > Cloud Automator | 構成レビュー機能に新しく2つのポリシーを追加しました https://t.co/Xkx83sho0r @CloudAutomatorさんから
— 羽柴 孝/Takashi Hashiba (@hashiva) 2016年9月29日
いいねー。> AWS 認定資格向けの社内勉強会をやったら、合格者が増えている気がする件 | サーバーワークス エンジニアブログ https://t.co/stQMeYoHcd
— 羽柴 孝/Takashi Hashiba (@hashiva) 2017年1月11日
他にも紹介しきれないほど多くの「いいねー」ツイートがあり、羽柴さんは「いいねー」が大好きなフレンズだということが今回の調査でよく分かりました。
😱ネガティブ王結果発表
次はネガティブ王の発表です!
残念ながらネガティブ王に輝いてしまったのは・・・生井さんでした😢
順位 | ツイッターアカウント | 平均ポジティブ指数 | 有効ツイート数 |
---|---|---|---|
1位 | @namai0113 | -0.092 | 27 |
2位 | @MiketaNyoroN | -0.019 | 78 |
そんなネガティブ王、生井さんのツイートを覗いてみましょう。
電車が運転見合わせでにっちもさっちにもいかなくて家に戻ったら水道管破裂するわ家猫が吐きまくるわおばあちゃんは家の扉開きっぱなしで猫も犬も全部逃げそうになるわでもういい加減にして欲しいです^^
— Namai Anna(なまい) (@namai0113) 2017年1月16日
今日はいつもより、どっと疲れた😖💦
— Namai Anna(なまい) (@namai0113) 2016年10月24日
ここまでしんどいといっそのことって思ってしまうから死ぬまで健康で居たいと誓った
— Namai Anna(なまい) (@namai0113) 2016年12月14日
京王線の遅延は急行なくなるし地元から出れない田舎者になるのでつらい😢
— Namai Anna(なまい) (@namai0113) 2016年11月9日
みんな、生井さんにもっと優しくしてあげよう・・・?😭
今後の課題
やはりもっと分析の精度を高めていきたいですね。特に係り受け解析の導入は次回の大きな課題です。
また、今回絵文字には対応したのですが、(´・ω・`)
とか \(^o^)/
などのいわゆる顔文字には対応できなかったので、いずれ顔文字の対応もしていきたいと思います。