FSNLP(Foundations of Statistical Natural Language Processing)は自然言語処理業界の中では知らない人はないというほど有名な本(英語)。出版年度は古く、内容もかなり時代遅れになってきつつあるのだが、自然言語処理の広い範囲を網羅した本ということで、英語を読む訓練をかねて新入生が輪読をするのはこの業界の風物詩。
うちの研究室(黒橋研)でもその輪読をしていて、B4(学部4年)とM1(修士1年)の他に、M2(修士2年)も復習と新入生の指導という意味合いで参加している。ぼくはM2なので、やはり参加している。
(ここから先は本の内容にからむことなので、FSNLPと合わせて読んでください)
7章 "Word Sense Disambiguation" の Figure 7.8、EMアルゴリズムのところ(ここは errata があるので、修正されたバージョンが前提)。
M-step の中で、となっている。ここで違和感。
が含まれる文脈
の確率を足していくというところ。
EMアルゴリズムのM-stepでは、最尤推定でパラメータを決めるというのが直感的な理解。ここで仮定しているのは bag-of-words モデルなので、一つの文に複数回が出現するなら、それを考慮に入れないといけないのでは。今の式では、それがまったく考慮されない。
ここらで直感の限界を感じたので、一般的な EM の式から導出してみる。EMのM-stepは、現在推測されている確率分布を元にして、対数尤度の期待値を最大化するステップ。対数尤度の期待値はQ関数と呼ばれ、内部状態を、与えられたデータを
、旧パラメータを
、新パラメータを
として、一般的に次のように表せる。
これを今回の例に当てはめる。旧パラメータと新パラメータを区別するために、パラメータにそれぞれ記号を割り振る。ある語義 からある単語
が生成される確率
を
とし、対象とする曖昧な単語が語義
を持つ確率
を
、更新後のパラメータをそれぞれ
とおき、それぞれの文脈
について、その文脈での多義語の語義を
という内部状態とする。その他は原文通りの表記を使うと、この場合のQ関数は次のように書ける。
ここで、原文と同じようにナイーブベイズ推定を使うと、対数尤度は次のように書ける。
また、
簡単にするためにとおくと、これは
となる。
これらを使うと、Q関数は次のように書ける。
これを最大化する。まず、について。
には、
という制約条件がある。書き換えると
となる。ラグランジュの未定乗数法を適用し、関数
を作り、それぞれの
について偏微分が 0 になるようにする。
それぞれのについて:
が成り立つようにする。
それを満たすのは、
のとき。
すべてのkに対するこれらの両辺を足し合わせると、だが、
であるので
を得る。
よって、それぞれのについて:
Q関数を最大にするのは、
。
とおくと、これは
となり、本文のものと一致する。
次はについてQ関数を最大化する。
それぞれのについて:
という制約条件がある。書き換えると
となる。
ラグランジュの未定乗数法を適用し、関数を作り、それぞれの
について偏微分が 0 になるようにする。
それぞれのについて:
文脈
に含まれる
の数を
とおく。
が成り立つようにする。
それを満たすのは、のとき。
これらの両辺をすべて足し合わせると、
だが、
であるので
を得る。
よって、それぞれのについて:
Q関数を最大にするのは、
。再び
とおくと、これは
となる。
出現回数は更新式に現れるべきだという直観は間違っていなかった(はず)。そうでなければ、bag of words でなく、set になってしまい、それまでの記述と矛盾する。
Errata では、
In the last line of the E-step, the product must be interpreted as j = 1, ..., J. This is a bit confusing, since we otherwise mainly iterate over the words in the context. It could alternatively have been expressed as Product
in
, and the exponent dropped.
としている。要するに、単語が 2回出てきても 1回しか掛けるな、ということ。しかしそれは(7.4)の Naive Bayes assumption に反するし、そもそも の意味がおかしなことになる。
やっぱり、本は少し間違っているんじゃないだろうか。