統計的機械学習セミナー (2) 教師無し&半教師分かち書き

昨日の続き。
持橋さんの教師なし&半教師分かち書きについて、わかる範囲で説明してみる。


分かち書き」とは文章を単語に区切ること。日本語や中国語など単語の区切りに空白を入れない言語では、これがないとほとんど何にもできない。MeCab 様々、と常日頃感謝しまくっている人も多いだろう。
その MeCab は膨大な辞書と大量の正解データを使って作られた「教師ありの分かち書き」。教師あり学習のモデルである CRF(Conditional Random Fields) を用いている。
教師ありのため、辞書に載ってない言葉や、正解データに現れていない区切り方は苦手。それらが用意されていない言語や方言(話し言葉含む)は、満足に分かち書きできない。


そこで「教師なし分かち書き」ができたらいいな、という話になる。これは大量の文章さえ与えたら、そこから単語の区切り方を自動的に判断できるようになる、という夢のような話。
持橋さんの「教師なし分かち書き」で普通の日本語が分かち書きされる様子はもちろんすごいことなのだけど、MeCab などで見慣れている分、「すごい、ちゃんとできるだな」という印象。
が同時にその論文では、古文(源氏物語)の分かち書きと、英文(空白を全部削ったもの)の分かち書きも試されていて、こんなの全く見たこと無かったので、うおお、と思わずうなってしまうくらいのインパクトがある。もし見たことないなら是非一度は見てみて欲しい。すごい時代になったんだな、と思うこと請け合い。


さて、「統計的分かち書き」について。
与えられたテキスト s に対してその任意の分割 w_1, w_2, ..., w_M を考える。
この分割が「もっともらしいかどうか」を、なにか適切な言語モデルに当てはめることで「言語としてあり得る文章かどうか」という確率 p(w_1, w_2, ..., w_M|s) によって計算する。
これを全ての分割について求めて、その確率が最も高かったものを分かち書きの結果として出力する。これが統計的分かち書き


統計的分かち書きを教師なしで行うには、問題が少なくとも3つある。

  • 1. 教師なしということは「何が単語か」すらわからない。どうやって言語モデルを構築する?
  • 2. 任意の分割を考えるということは、「任意の単語」を扱える言語モデルでなければならない(例えば「言|語モ|デ|ル」という分割もあり得るので、「語モ」という「単語」が扱えないといけない)。
  • 3. 例えば50字からなるテキストの分割は 2^50 ≒ 1000兆通りを超える。その中からもっとも確率の高い分割をどうやって求める?

このどれか1つだけでもめげそうだ(苦笑)。


1. と 2. を解決する言語モデルを作る。それには sequence memoizer の説明にも出てきた階層 Pitman-Yor 過程を使う。ここでは、階層 Pitman-Yor 過程とはベキ分布を考慮に入れることができる、つまり言語と相性のいい無限分布である(ただし系列の長さは有限)、というとても簡略した説明でなんとか乗り切る。
まず、言語モデルを「単語モデル」と「文章モデル」に分ける。
単語モデルは、文字の分布を基底に持つ階層 Pitman-Yor 過程で作る。単語の長さの最大長は決めておく必要があるが、その範囲で任意の文字系列を扱うことができるので、2. の問題はクリアできる。
文章モデルは、今作った「単語モデル」を基底に持つ階層 Pitman-Yor 過程で作る。つまり「階層 Pitman-Yor 過程を基底に持つ階層 Pitman-Yor 過程」ということで、これは「Nested Pitman-Yor 言語モデル」と呼ばれている。これで「何が単語か」の正解を知らなくても言語モデルが構築できた。1. もクリア。


ここで脱落するのはまだ早い。3. の難問が残っている。


これを、単語分割 w を分布 p(w_1, w_2, ..., w_M|s) からサンプリングすれば、確率の高い分割が選ばれやすいはず、という方法で解決する。
この単語分割は semi-Markov モデルとして定式化され、その事後分布からのサンプリングは、「t番目の文字が長さkの単語の末尾である確率」を前向きに求めた後、その確率に従って後ろ向きにサンプリングしていくことで実現できる(2-gram で考える場合)。ここが従来の教師なし分かち書き手法で 10時間かかるところを 17分で、しかも高精度を実現したキモ、とのこと。
後はこれを言語モデルへの反映と交互に行っていく。200〜400回ほどでだいたい収束するように書かれているのだけど、局所解に引っかかる心配とかはあんまりないんだろうか?
単語長にポワソン分布を……そのハイパーパラメータにガンマ事前分布を……という話もあるけど、セミナーでも省略されていたので、略!


そんな教師なし分かち書きにもいくつか問題があるようで。
例えば日本語の活用では「単語の一部」が変化してしまうため、語幹部分のみを「単語」として切り出してしまうとか、合成語をどこで切ったらいいかわからないとか、そもそも「言語モデルとして正しい(=確率が高い)」と「人間の目で見て正しい」の間に相違があるとか、とか。


そこで半教師分かち書き。大量の正解なしデータと、それよりずっと少ない正解データで学習して、教師ありと教師なしのいいとこ取りで解決を図る。


Nested Pitman-Yor 言語モデル(NPYLM)のままではどうしても教師データの入り込む余地がない。
そこで Mecab にも使われている教師ありモデルの CRF と NPYLM との相互変換を行う。
正解無しデータは同じく NPYLM で学習。CRF に変換して正解データで学習。NPYLM に変換して……、という感じなのかな?
半教師 CRF である JESS-CM(Suzuki+ 2008) が baseline?
ちょっとこのへんは今回のセミナーで初めてお聞きした際にとったメモから起こしていて、いろいろ間違い勘違いあるかもしれず、いいかげんなことを書いたらまずいかも&まだ論文も publish されてないお話、なのでちょっとここいらのおおまかなところでご勘弁。*1


人間の子供が言葉を覚えたりものの見分け方を学んだりするのは、やはり大量のデータとわずかな正解から行っていることからも、半教師で自然言語を扱えるようになると言うのは究極の目標の一つだと思うので、今後も大期待なのです。

参照論文

*1:今回書いたくらいのことまでなら http://groups.google.com/group/ibisml/browse_thread/thread/092f5fb3d45a91ea/8cae858cb8bfc00c にも掲示されているので、いいかな、と。