Hatena::ブログ(Diary)

いろいろ作りたい

2011-12-28

Twitter感情分析サービスを作ってみた 〜一般意志2.0モジュールの実装〜

Twitterタイムラインキーワードに対して、肯定・否定の印象を分析するWEBサービスAPIを作ってみた。

Twitter感情分析所


たとえば「任天堂」というキーワードを入力すると、下のような感じに、どのくらい肯定と否定の発言をしているかがわかる。

f:id:gen256:20111228030629p:image

ユーザのタイムラインも分析できる。

下はベッキー @

の分析例。

f:id:gen256:20111228030630p:image

自分のtwitterアカウントを分析すれば、自分の発言がどのくらい否定的な印象を放っているかが数値的にわかると思う。


一般意志2.0への利用

ところで最近、東浩紀という人が「一般意志2.0」という著書の中で、現代の行き詰まった民主主義を変える新たな統治方法のアイデアを提言した。それによれば、世の中が多様・複雑になりすぎて、今の熟議型民主主義ではもうどうにもならんところがあるから、みんなの意志(無意識的に表れる人々の意志)を参照しましょう、みたいなことを言っている。(書評政府の審議会を、ニコ動で放映せよ・・・という、東浩紀さんの「一般意志2.0」を読んで(前編)

その「無意識的に表れる人々の意志」っていうのが、昔は取得困難だったんだけど、今はネットに蓄積された大量のデータからその無意識をすくい取ることができ始めている。たとえば、Twitterとかニコ生のコメントとかで。

で、実際に無意識をすくえるのか、を試してみた。

下のグラフは、「原発」を含むTweetに関する肯定率の推移を示したもの。

f:id:gen256:20111228030631p:image

3.11地震の引き起こしたあの原発事故のためか、2011年3月にがくっと肯定率が落ちている。

そして、次第に人々が安心を取り戻し、さらには「思ったより危険じゃないんじゃね?」的なムードのためか、数値は回復の傾向を見せている。

もちろん、この分析だけで一般意志をすくったとは言えないだろうけど、一つの指標やモジュールとしてはありなんじゃないかと。


人工無能への応用

相手の発言の肯定・否定が正しく読み取ることができれば、これを我が人工無能鳥元モズク」の自然な対話の実現にも応用したい。

でも、どういう形で組み込むべきかがいまいち見えてこない。

ただ、Twitter本社が持つ全Tweetの超巨大なデータがあれば面白いことができる。


データがあまりにも巨大になると、それを人間一生分に匹敵するくらいの「経験」としてAIに与えることができる。

「腹減った・・・」

ラーメン食べた。おいしー」

「おなかいっぱい(*^^*)」

「眠くなった」

Twitterではこのくらい細かいレベルの記録がたくさん書かれる。

こうした記録の集合から、例えば、

「腹が減る」→「食べ物を食べる」

みたいな規則や因果関係、行動パターンを見つけ出せる。つまり経験に関する常識が得られる。

とはいえ、やはりそこに書かれることは、感覚器官の受ける情報や物理レベルの現象のほとんどを省いたものだから、その「言語だけ」の世界でできあがるAIは、感覚や物理的な実質的概念を持たない、記号だけを認知する生き物になる。

「テーブルの上にあるリンゴを見ている、なう」

「ちなみにそのリンゴは赤くて丸くて、美味しそう、なう」

「唾液ができてきた、なう」

「りんごを食べようと思ってリンゴに手をさしのべてリンゴを手につかんだ、なう」

このくらいに詳細に書いてくれなければ感覚・物理レベルの情報は蓄積されない。(そういう意味でSFの順序を考えると、「仮想世界・電脳世界の実現」→「感覚を理解するAIの実現」)

ただ、今回実装した肯定・否定性を読み取る能力は、人間にとってかなり基礎的な感覚モジュールである「快と不快」をトップダウン的とはいえ、AIに与えたことになる。

この基礎的な感覚を持った状態で、Twitterの全データの海を泳がせると、いつかすごい泳ぎ方を学習できるかもしれない。

物理レベル・五感レベルの感覚は無理かもしれないけれど、言語レベルだけで完結する感覚ならば、人間と同等くらいの感覚を与えることができるのかもしれない。

例えば、誰かが「おやすみ」と言ったときに、それに「おやすみ」と返答してあげることは相手が喜ぶのだ、という経験をあの巨大な経験集合から嫌というほど経験するだろう。この時、AIは「おやすみ」を返されることが「快」であることを感覚的に理解したと言っていいんじゃないかと思う。

あるいは、それだけでは不十分かもしれない。リアルの世界での快とTwitterの対話での快はまた別物だから、ちゃんと言語コミュニケーションでの快を体得させる必要もありそう。

誰にも相手にされない(リプライをもらえない)ような状態を「死・不快」、肯定的なリプライを「報酬・快」と設定し、それが最大化するように、強化学習とかGAを使ってあの巨大な経験データベースを自由に徘徊させる。すると、リアルな「コミュニケーション欲」を持ったAIが誕生するのかもしれない。

CC 2012/01/03 14:08 オープンソースにしてくれると超嬉しいんですが

kuippakuippa 2012/01/03 18:22 日本語ムズカシイです。

可愛い猫じゃない→肯定
可愛い猫じゃない!→否定
すごく可愛い猫じゃない?→否定
可愛い猫だね→肯定
可愛い猫ではない→肯定
可愛い猫ではない!→否定
可愛くない猫だ→否定
可愛くない猫ではない→否定

語彙というより、「だった」(否定)とか「です」(肯定)みたいに文末の判定度合いが強いですかね?

ほかの感情検索系APIはGETになっているので揃ってると楽かなと思いました。
GETだとリンクにも埋め込めますしね。
ちょっと実験でこれに使ってみたいのですが これ→ http://marketcanary.biz/
トラフィックどれくらい大丈夫でしょうか?
今自分のタイムライン分しか実験につかってないのだけど、日に万オーダーのクエリを投げてしまうので・・・

gen256gen256 2012/01/04 00:37 >>Cさん
自分が実装したのはほとんどインターフェイス部分だけなので特に公開するほどのところはありません。
判別するプログラムは、機械学習のモジュールを使っています。
機械学習は各言語でライブラリやモジュールがすでにたくさんあるので、検索すればたくさんでてきます。
参考:http://www.stanford.edu/~alecmgo/papers/TwitterDistantSupervision09.pdf


>>kuippaさん
文末に重みは加えるようなことはしていませんが、たしかに文末は重要な感じがしますよねー。
GETにも対応しましたが、試しにブラウザでやるとスペースの扱いがなんか「%20」になってしまうっぽいです。よくわからないです。
トラフィックは万/dayは全然大丈夫ですが、集中的にバッと来たらどうなるかわかりません。できれば時間的に分散してくれるとありがたいです。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証