はじめに
さだまさし x IT Advent Calendar 2015 - Qiita という素敵な企画があります。
いたく感激し、参加したいと思ったのですが、考えている間に枠が埋まってしまいました(ohtamanさんに24日枠を取られてしまいました)。
ともかく、Juliaで簡単なLDAを実装し、さだまさしさんの歌詞に適用してみました。
トピックモデル
「トピックモデル」とは、データの潜在的な”トピック”を見つけ出すための手法です。これだけ言われてもなんのことかさっぱり分からないとは思いますが、世の中にはとても素晴らしい解説資料が沢山あるので、興味がある方はぜひ記事末の文献一覧を参照ください。
トピックモデルといっても色々なものがありますが、最も有名で、よく使われているものが、今回の題材となるLDAです。
LDA
Latent Dirichet allocation(LDA, 潜在的ディリクレ配分法)は、David Bleiさんらが2003年ごろに提唱した手法です [Blei+ 2003] 。同じような考えは、別の分野(たしか人口学かなにか)でもその数年前に提案されていたそうです。
たとえば、以下の様な応用例があります。
- マンションポエムで新築マンションをクラスタリング - About connecting the dots.
- 太宰治の文学の変化をTopic Modelで分析する · Naoki Orii's blog
- 小説家になろうのランキングをトピックモデルで解析(gensim) - 唯物是真 @Scaled_Wurm
- What do Vegans do in their Spare Time? Latent Interest Detection in Multi-Community Networks
LDAはもともと人間が読み書きする文章を対象としたものですが、今では動画や音声解析、バイオインフォマティクスやネットワーク分析といった分野でも活用されているそうです。
Digital Humanities
その中でも、最近では人文科学の各種分野でもトピックモデル・LDAやその他NLP技術が積極的に活用され始めているそうです。
例えば、Franco Morettiという方は「Distant Reading」という概念を提唱しています。これは従来の「Close Reading」、つまり人間が文献を読み込む作業と逆の方向性のもので、大量のデータを計算機に食わせて(例えばトピックモデルにかけて)その結果を参考にしよう、というものです。Distant Readingが従来の方法に取って代わるわけではないですが、人間が読める分量には限りがあるのだから、計算機が役に立つなら存分に活用しよう、という考え方です。
この分野で有名なのは、David Mimnoさんでしょう。自身は機械学習・自然言語処理の研究者として理論的な研究も進めつつ、たとえば英文学者と協力して、19世紀の英文学作品を考察する([Jockers&Mimno 2013])といったことを行っています。
先日、「Talking Machines」というPodcastにMimnoさんが出演されていましたが、経歴から上の研究の話や、今やっている「民話をリバースエンジニアリングする」研究の話など、興味深いエピソードでした。
JuliaConでも発表していたセントルイス大学のグループは、TextMining.jlというパッケージをつくり、文学作品の時間変化などを調査しているそうです。
実装
Gensim、Mallet、Stanford Topic Modeling Toolboxなどがあります。
ちなみに、Gensimの作者であるRadim Řehůřekさんのインタビュー記事が先日発売された「ハイパフォーマンスPython」という本に載っていました。
Juliaではslycoder/TopicModels.jlというものがありますが、2013年以降更新が止まってしまっているようです。先日の勉強会(JuliaTokyo #5)でもyoshifumi_sekiさんが言っていたように、johnmyleswhite/TextAnalysis.jlのLDAも未実装です。
JuliaでLDAをつくって歌詞に適用
ここまで特にさだまさしさんと関係のない話を脈略なくつらつらと書きました。
それではここで、簡単なLDAをJuliaで作り、さだまさしの歌詞に適用してみましょう。
実装には、奈良先端大Graham Neubig先生のNLPプログラミングチュートリアルなどを参考にさせていただきました。
julia-advent-calendar-2015.ipynb
ステップ
大まかなステップは以下のとおりです(歌詞データの取得についてはここでは述べていません)。ここでの説明より、上のNeubigさんによる資料を見たほうがよっぽどわかりやすいかと思います。
- 歌詞データ読み込み
- TinySegmenter.jlで文を分割
- ストップワード(手動設定)を除外
- ランダムな初期トピックを各単語に付与
- トピックごとに初期カウント
- トピックの出現回数
- トピックごとの語彙分布
- ギブズサンプリングによるパラメータ推定
- 単語をひとつ消す
- 消した状態で再カウント
- トピックの選ばれる確率を計算
- 前ステップの分布からトピックをひとつ選択
- 新しく選んだトピックをもとに再カウント
結果の例
ハイパーパラメータの設定や、イテレーション数で結果はかなり変わるかと思います。
「僕」「私」「俺」をどう使い分けているのかが気になります。
Topic 1
0.0088 彼
0.0073 娘
0.0069 俺
0.0060 1
0.0053 子供
0.0047 恋
0.0047 して
0.0045 出来
0.0045 がんばれ
0.0044 5
Topic 2
0.0153 人
0.0125 こと
0.0099 ある
0.0098 私
0.0097 あなた
0.0091 生き
0.0068 心
0.0067 夢
0.0065 いる
0.0065 だろ
Topic 3
0.0252 君
0.0217 僕
0.0171 愛
0.0151 夢
0.0116 こと
0.0098 人
0.0092 恋
0.0080 空
0.0080 いる
0.0076 この
Topic 4
0.0452 君
0.0210 僕
0.0073 様
0.0068 二
0.0067 いる
0.0061 別れ
0.0057 風
0.0055 日
0.0053 時
0.0053 恋
Topic 1
0.0109 彼
0.0090 娘
0.0074 1
0.0066 恋
0.0054 子供
0.0054 5
0.0053 たち
0.0051 4
0.0049 帰っ
0.0049 出来
Topic 2
0.0199 こと
0.0146 生き
0.0116 それ
0.0103 この
0.0094 だろ
0.0092 人
0.0085 自分
0.0083 心
0.0074 忘れ
0.0074 何
Topic 3
0.0525 君
0.0320 僕
0.0092 いる
0.0090 時
0.0075 愛
0.0073 町
0.0069 忘れ
0.0065 風
0.0063 人
0.0059 手
Topic 4
0.0159 人
0.0136 私
0.0134 あなた
0.0117 こと
0.0100 ある
0.0091 日
0.0084 夢
0.0079 花
0.0064 愛
0.0062 時
Topic 5
0.0133 がんばらんば
0.0079 がんばれ
0.0065 明日
0.0065 Bye
0.0061 何
0.0056 来
0.0056 日
0.0051 せ
0.0049 今
0.0049 ある
今後の課題
- 収束判定
- ハイパーパラメータのチューニング
- 参考:[Tang+ 2014]
- 発展的モデル:HDP [Teh+ 2005]、Dynamic [Blei+ 2006]、Supervised [Blei&McAuliffe 2007]、...
- 語彙のID化
- 前処理
- 単語を基本形に戻す、機能語・ストップワードを除外
- 提出言語の除外
- 数字の置換
- ...
おわりに
明日のJuliaアドベントカレンダーは、@chezouさんがマイナー言語の広め方について紹介してくださるそうです。
文献
書籍
- “トピックモデル (機械学習プロフェッショナルシリーズ) ” 岩田具治, 2015
- “トピックモデルによる統計的潜在意味解析” 佐藤一誠, 2015
論文
- [Blei&Lafferty 2009] Topic Models
- [Blei 2011] Introduction to Probabilistic Topic Models
- [Blei 2012] Review Articles: Probabilistic Topic Models, Communications of The ACM
- [Blei 2012] Probabilistic Topic Models, Machine Learning Summer School
- Links to the Papers Related to Topic Models by Tomonori Masada
スライド、記事、動画
- Topic Models by David Blei (video)
- Tokyo Webmining 46th 『トピックモデルことはじめ』by @yamano357
- What is a good explanation of Latent Dirichlet Allocation? - Quora
- The LDA Buffet is Now Open by Matthew L. Jockers
- [佐藤 2012] 私のブックマーク Latent Topic Model (潜在的トピックモデル)
- [持橋&石黒 2013] 確率的トピックモデル, 統計数理研究所 H24年度公開講座
- [Tang+ 2014] "Understanding the Limiting Factors of Topic Modelling via Posterior Contraction Analysis" by sorami
- トピックモデル - AS^2 LT by sorami