murawaki の雑記

はてなグループから移転してきました

単語の zero-gram 確率

単語 w を生成する zero-gram 確率をどうやってモデル化しましょうかという話。

想定する用途は単語分割。単語分割では、長さの違う単語候補同士を比較して、どっちがそれらしいか推定する。一様分布を仮定するといかにも都合が悪そう。そこで、単語が構成要素から生成される確率を考える。構成要素は音素や文字。データに依存。では具体的にどう生成するか。

(Goldwater+ 2009) は w が c_1 \cdots c_k からなる確率を以下で与える。
p_{\%23}(1-p_{\%23})^{k-1} \prod_{i=1}^{k} P(c_i)
ここで、p_{\%23} は単語境界を生成する確率。データの言語は英語で c_i は音素 (普通の綴りではなく、1文字1音素で書き起こした特殊なデータ)。要するに、音素 unigram と、単語境界の二つを考慮している。

p_{\%23} はどれぐらいか。Goldwater+ は自動推定はしていない。手動で値を変化させて、教師なし単語分割の精度を調査している。(単語) unigram model で、type の精度 (F値) は 0.3 が一番、token の精度は単調増加で 0.9 が一番。他のモデルとの比較では 0.5 に固定。bigram model では 0.2 が良かったとのこと。ばらばら。

token の精度が良くて、type の精度が悪いということは、高頻度の語はあっていて、低頻度の語を間違う傾向にある。p_{\%23} を大きな値する、つまり短く区切ろうとするとそうなるという結果。この結果をどう説明するか。a や is などの高頻度語は短く、低頻度語は長いという傾向を反映している?

そもそもモデルがいまひとつではないかという疑惑。ひとまず P(c_i) のばらつきを無視して、分割する場合に対する分割しない場合の確率の比を取ると、p_{\%23} > 0.5 のとき、長さ k = 1 からひたすら減衰。ということは、もし単語 zero-gram をモデルとして教師なし単語分割を行うと、1 音素 1 単語に落ち着くはず。unigram model ではそうならない (ただし事前分布を考慮する Bayesian な設定で)。unigram が分割しない方向に作用することがあるから。いま、is という音素列を考えた時、バックオフの zero-gram は i . s と分割する側に傾く。unigram は is というコロケーションがコーパス中によく出現するのであれば、is と分割しないでおこうとする。適当なところで均衡。p_{\%23} < 0.5 だと逆。

別の方式。(Nagata 1996) は単語長 k を直接モデル化している。こちらは c は文字。
P_0(w) = P(k) P(c_1 \cdots c_k | k)
そして、P(k) に Poisson 分布を仮定。
P(k) = Po(k-1; \lambda -1) = \frac{(\lambda - 1)^{k - 1}}{(k-1)!}e^{-(\lambda - 1)}
1 を引いている理由に自信はない。k = 0 に確率質量を与えたくないからという理解であっているのだろうか。とにかく、k が λ から離れると、大きくても小さくでもペナルティがかかる。

文字列の生成は bigram で。
P(c_1 \cdots c_k|k) = P(c_1|\mathrm{BOW}) \prod_{i=2}^k P(c_i|c_{i-1}) P(\mathrm{EOW}|c_k)
BOW, EOW はそれぞれ単語の始まり、終わり。(Nagata 1999) では、さらに、日本語の字種を考慮するようにモデルが修正される。また、教師データがあるという設定で、各種のパラメータは教師データから推定される。

ここで、高頻度語は短く、低頻度語は長い傾向にあることを思い出す。この現象がモデルにどういう影響を与えるかというと、影響はない。実は上記のモデルは未知語モデル。パラメータは教師データ中の頻度 1 の単語から推定している。高頻度語は最初から除外されている。この設定で、(Nagata 1999) では λ = 4.8。結構長い。

(Mochihashi+ 2009) では、単語 unigram のバックオフが zero-gram で、その基底分布が以下。
\begin{eqnarray}G_0(w) &=& p(c_i \cdots c_k)\\ &=& \prod_{i=1}^k p(c_i|c_1 \cdots c_{i-1})\\ \end{eqnarray}
文字列の確率は ∞-gram で、n-gram は n-1 gram でバックオフするという恐ろしいモデル。これだけではうまくいかないとして、Poisson 分布により補正を加えている。
P_0(w) = \frac{P(c_1 \cdots c_k,k|\mathrm{\Theta})}{P(k|\mathrm{\Theta})}Po(k|\lambda)
こちらは 1 を引いていない。細かいところが理解出来ていない。(Nagata 1996)P(k|\mathrm{\Theta}) = (1 - P(\%23))^{k-1} P(\%23) を仮定していると論文に書いてあるけど、なぜ?

Poisson 分布の共役分布がガンマ分布なので、これを事前分布としている。事後分布は以下に従う。
P(\lambda | W) \propto \mathrm{Ga}(a + \sum_{w \in W} t(w)|w|, \, b + \sum_{w \in W}t(w))
ただし、|w| は単語 w の長さ。ガンマ分布 Ga(a, b) は平均が a/b、分散が a/(b*b)。事前分布のパラメータはほぼ無視できて、事後分布は一点でバーストしているはず。つまり、
\lambda \approx \frac{\sum_{w \in W} t(w)|w|}{\sum_{w \in W}t(w)}
何のことはない、λ は単語の平均長に従う。

問題は平均に傾斜をかけている t(w)。t(w) は単語 unigram の t_{\epsilon w}。Pitman-Yor process の Chinese Restaurant 表現におけるテーブルの数。分子の discount にかける項。論文によれば、unigram count c_1(w) の対数のオーダーの数になるとのこと。短い高頻度語の影響は対数によって抑えられているはず。バックオフが効いてくるのは低頻度語だと考えると、よくできている。

余談。単語の打ち切り確率があるなら、文の打ち切り確率があってもよさそう。実際、(Goldwater+ 2009) は定義している。sampling においては、単語分割数を減らす方に作用する。値を変化させても精度に変化はないという報告。そもそもタスク設定として、文境界は最初から与えられている。文の長さ (単語数) は考慮せず、BOS と EOS を置くだけで良い気がする。もし文境界も推定するタスクならどうするか。文の長さについても Poisson 分布を仮定すると良いだろうか。