未知語

AABCDE、と6つの単語が出現するという事象の確率を求めることを考える。
簡単のために、モデルはスムージングも事前分布もない単語ユニグラムモデルとし、
訓練データでの分布も、同じ分布(A:B:C:D:E = 2:1:1:1:1)だとしよう。

モデル1はABCという3つの単語だけを知っていて、
残り2つを「未知語」同値類 として扱う。
したがって、モデル1の下では、
P(A)=2/6, P(B)=P(C)=1/6, P(D)=P(E)=P()=2/6
これ以外のどんな単語にたいしても
P(単語)=P()=2/6
である。

モデル2はABという2つの単語だけを知っている。
モデル1と同様にして、
P(A)=2/6, P(B)=1/6, P(C)=P(D)=P(E)=P()=3/6

モデル3はAだけを知っているものとすると、
P(A)=2/6, P(B)=...=P()=4/6

これらのモデルを、ABCDEという単語列にたいする、
単語当たりのテストセットパープレキシティで評価してみると、
モデル1 (6/2 * 6/2 * 6/1 * 6/1 * 6/2 * 6/2)^(1/6) = 3.780
モデル2 (6/2 * 6/2 * 6/1 * 6/3 * 6/3 * 6/3)^(1/6) = 2.794
モデル3 (6/2 * 6/2 * 6/4 * 6/4 * 6/4 * 6/4)^(1/6) = 1.890
となって、モデル3がもっとも優れた手法だといえる。

……というのは当然嘘である。
どこに嘘があったのかといえば、
”単語当たりの”テストセットパープレキシティというのが嘘。
未知語は同値類であり、少なくとも1つ以上の単語を含んでいるから、
これを混ぜて、 単語当たりの、というのは間違い。
もっとも得票数が多いのが「その他」だったからといって、
「その他」が最大支持を得たとはいえないのと同じ。

じゃあ未知語を除けばいいのかというと、
モデル1 (6/2 * 6/2 * 6/1 * 6/1)^(1/4) = 4.24
モデル2 (6/2 * 6/2 * 6/1)^(1/3) = 3.77
モデル3 (6/2 * 6/2)^(1/2) = 3
となって、状況がよくなっているようには見えない。
こんどは単語の集合と単語を同列に扱うことは避けられたけど、
代わりに未知語でない単語、つまりモデルがよく知っている単語についてしか性能を見ていないので、
未知語が多いモデルほど優れているように見えてしまう。

結局、CとDを区別できるモデル1と、
区別できないモデル2,3を、直接比較することはできない。

これを解決するひとつの方法は、未知語の定義を一致させること。
http://www.stanford.edu/class/cs224n/faq.html#unk
未知語のもっとも多いモデル3にあわせるなら、
モデル1,2,3は同じ性能だという、評価になり、
もっとも少ないモデル1にあわせるなら、
モデル2と3はパープレキシティ無限大という評価になる。

実際には、未知語がおおいモデルに合わせるというのは、
モデルの能力を落としていることになってナンセンスなので、
後者の方法を取ることになる。

こうして一応、(パープレキシティがよい評価方法だと認めるなら)
モデルの比較ができるようになったけれど、
結局のところ、未知語という単語クラスと、単語を同列に扱っているという気持ち悪さは残る。

これを解決するもっとも正統派(だと思う)の方法は、
無限の語彙を生成する方法。たとえば
http://www.cog.brown.edu/~mj/papers/acl06-wordseg.pdf

未知語が少ない(言い替えれば、かなり大きな既知語のリストを持っている)
状況でやるのは、不適切、もしくは課題が大きいと思う。
既知語の情報をとりこもうと思うと、
上記の手法では、強く既知語に偏った prior を与えることになるけれど、
conjugate prior を守りながらそれを与えるのは困難。