mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2010年03月 来月
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

2010年03月19日(金) [n年日記]

#1 lwlm, The Latent Words Language Model.

というわけで, 公開しました。 潜在語言語モデル(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単語/秒くらいになる模様です。謎。


*1: 去年 ACLの際に非常に面白い話だと書いた のはこれ。

1 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project