というわけで, 公開しました。
潜在語言語モデル(LWLM)は, 各単語の裏に隠れた「潜在語」を教師なしで推定すること
のできる言語モデルです。
ソシュールの一般言語学講義を読んでいる方は, (論文の著者はそう書いていませんが)
これは, ソシュールの「範列」の計算的な表現だということがすぐにわかるかと思います。その意味でも, 非常に面白い(&恐らく, NLPの他のタスクにも役立つ)モデルです。
詳しくは,
先日のMCMC研究会のスライド
をご覧下さい。
EMNLP 2009の原論文
*1
では SRILM を使って近似的にやっているらしい(全ての可能な単語を考慮していないらしい)
ですが, ここでは本当に全て真面目にベイズ推定しています。C++で約4000行くらい。
プログラミングが長かった。。。。
技術的な話についてはまた後で書きますが, lwlm付属の Gibbs デコーダー(lwlm-decode)を
使うと, 次のような文
クリントン 政権 と の 政策 的 妥協 が 可能な 場合 でも 拒否 す べし 、 と の
同氏 の 主張 に 、 危ぐ を 抱く 党員 も いる 。
を, 次のように"デコード"することが可能です。(上のページに置いてある,
京大コーパスから学習したモデルを使用)
% ./lwlm-decode kyoto.test.txt model.kyoto/
latent ngram order = 3, alpha = 0.01
loading lexicon..
vocabulary = 39431
loading LM..
loading table..
reading kyoto.test.txt.. done.
decoding sentence 1/1..
sampling 100/100..done.
クリントン クリントン (1.000)
政権 大統領 (0.970) 政権 (0.030)
と と (1.000)
の の (0.990) いう (0.010)
政策 経済 (0.730) 積極 (0.270)
的 的な (1.000)
妥協 実現 (0.960) 言葉 (0.030) 対応 (0.010)
が が (1.000)
可能な できる (1.000)
場合 場合 (0.940) だけ (0.060)
でも でも (0.990) は (0.010)
拒否 実現 (0.920) 強調 (0.080)
す す (1.000)
べし べきだ (1.000)
、 、 (0.970) 」 (0.030)
と と (1.000)
の いう (0.730) の (0.250) する (0.020)
同氏 米国 (1.000)
の の (1.000)
主張 理由 (0.790) 責任 (0.210)
に に (0.950) は (0.030) が (0.010) から (0.010)
、 は (0.310) 、 (0.250) 対する (0.240) 大きな (0.140) も (0.040)
危ぐ 疑問 (0.900) 効果 (0.100)
を を (1.000)
抱く 持つ (1.000)
党員 国民 (0.890) 子供 (0.080) 人 (0.030)
も も (1.000)
いる いる (1.000)
。 。 (1.000)
出力フォーマット, burn-inの回数, 事後サンプルの個数等はもちろんカスタマイズ可能
です。
実は京大コーパスは非常に小さいデータなので, 単語-単語の翻訳確率を学習するには
足りず, 上のように綺麗にデコードできるとは限りませんので, そこだけ注意。
現在, もう少し大きなデータで学習させたデータを公開する予定です。
普通のその辺にあるテキストで動く教師なし学習ですので, 自分で学習すればもちろんOKです。
内部的には, 次のような潜在語(左側)―観測語(右側)の翻訳確率を推定し, これと
潜在語自体の前後関係 (n-gram)を使って, 与えられたテキストの裏にある潜在単語を推定して
翻訳確率をさらに書き換える, という動作を繰り返します。
上のページには書いていませんが,
"model/table" というファイルが学習した潜在単語-単語の翻訳確率のテーブルで,
付属の "view-table" というスクリプトを使うと,
確率の上位語をソートしてこのように表示できます。
使い方は view-table を単に実行するか, 中を見て下さい。
れた れる 0.3366297 1284
なった なる 0.2595481 569
的な 的 0.2590401 521
や 、 0.2353712 1783
開か 行わ 0.2195300 186
られる られた 0.2070375 275
午前 午後 0.2028879 179
せる せた 0.1956908 184
だ である 0.1885102 959
二 一 0.1796324 990
:
従業 公務 0.0813301 48
政権 内閣 0.0802100 86
機関 システム 0.0799848 78
宗教 特殊 0.0798486 50
べきだ べきである 0.0794294 80
いわ 呼ば 0.0792535 78
声 見方 0.0783010 91
求め 望み 0.0780744 46
夜 朝 0.0775319 57
上る 達した 0.0774548 54
現在, 学習速度(サンプリング速度)は高速化の結果, 最初100-400単語/秒くらいです
が, 学習を続けていくとどんどん速くなり, 京大コーパスの場合は最終的に数100sweep
が終わると, 6000単語/秒くらいになる模様です。謎。