LDAを利用した、twitter上のユーザ類似度判定システム

大学院で自然言語処理の研究をしつつ、ブログタイトルのようなものを趣味的にチマチマと作っていまいた。個人的になかなか面白い解析結果が出たと思ったのでご紹介します。

目標:
1.twitter上で、ある入力ユーザ(自分でなくてもよい)と興味の対象が似ているユーザを発見する
2.興味あるトピックには、どういう単語が含まれているか発見する

手法:
1.1ユーザのツイート全体を1つの文書としてモデリングし、LDAで解析
2.全てのユーザについて、トピック-ユーザの特徴ベクトルの距離を使って類似度を計算

特徴:
1.巷にあるソーシャルネットワーク系の解析でありがちな、ユーザ同士のリンク情報を全く使っていない
2.トピックの次元は語彙の次元と比べてかなり小さい(1/(10^3)くらい)ので、単に単語の頻度を数えるのと比べて柔軟

解析結果ですが、とりあえずpythonの処理系が動作する環境で確認できるようにしました。
また、msgpack(http://msgpack.org)が必要です。
ubuntu11.10で動作確認していますが、UNIX系のOSなら多分大丈夫です。
興味がある方はどうぞ。とりあえず約4000人分のデータがあります。@risuoku周辺の人は大体入ってるはず。
1.githubにアップロードしました。gitが動作する環境にあれば

git clone git://github.com/risuoku/ldaoutput_example.twitter.git

などで入手可能です。リポジトリのURL→http://github.com/risuoku/ldaoutput_example.twitter
2.解凍後、解凍先のディレクトリに移動
3.以下のコマンドを入力

python out.py ./ <username> <num>

: 入力ユーザ名
: 出力したいトピック数(省略可)
なお、コマンド中の"./"は、カレントディレクトリにあるデータを参照していることを意味します。データの置き場所は任意に設定可能です。

具体例:
@risuokuで試した例を示します。

python out.py ./ risuoku

TODO:
1.前処理をもっと洗練させる
2.ネットワーク経由で結果を閲覧できるようにする(例えばHTTP)

また、LDAという言葉を説明抜きに使ってきましたが、特に解説はしません。参考文献をいくつかご紹介します。[Blei et al. 2003]や[Griffiths et al. 2004]は、あえてのせていません。

1.Topicに基づく統計的言語モデルの最前線 ―PLSIからHDPまで―
http://chasen.org/~daiti-m/paper/topic2006.pdf
トピックモデル全般に関する話。スライドなので図が多い。

2.wikipedia
http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation
ウィキペディア(笑)だからといって侮れない。結構丁寧な説明。ちなみに英語

3.LDA (Latent Dirichlet Allocation) の更新式の導出
http://yattemiyou.net/docs/lda_gibbs.pdf
図が少ないのが難点だが、LDAについて徹底的に説明してる数少ない日本語資料。

4.Parameter estimation for text analysis
http://www.arbylon.net/publications/text-est.pdf
英語のチュートリアル。かなりわかりやすい。ディリクレ分布など、LDA以前の話についての解説もある。LDAのアルゴリズムものってる。

5.A Theoretical and Practical Implementation Tutorial on Topic Modeling and Gibbs Sampling
http://www.uoguelph.ca/~wdarling/research/papers/TM.pdf
英語のチュートリアル。なかなかわかりやすい。LDAのアルゴリズムものってる。ただし、図がない。

また、ユーザの影響力を図る文脈でトピックモデルを使う話は結構あります。
例えば次のようなもの。
TwitterRank: Finding Topic-sensitive Influential Twitterers
Weng et al., WSDM2010