自然言語処理で言語モデルの話をするときによく出てくるperplexity
。
他クラス分類問題で出てくるcross entropy
。
この2つの関係性をまとめてみました。
TL; DR
perplexity = 2^{entropy}
なので、実はほとんど同じもの。
perplexityの数式
PP(s) = \prod_{i=1}^NP(w_i)^{-\frac{1}{N}}
cross entropyの数式
H(s) = \frac{1}{N}\sum_{i=1}^N\log P(w_i)
言語モデルって何?
文が与えられたときにその流暢さを図るモデル。
つまり、
今日の朝、カレーを食べた
-> 流暢!
朝今日、食べたカレー
-> 流暢じゃない!
みたいなことをするモデルで、
かわいい
という形容詞のあとに女の子
のような名詞が来るのはOKだけど、
食べる
のような動詞が来たらおかしい
のように、言語の汎用的な性質を表現しています。
数式にすると
数式として表現すると、言語モデルは文が与えられたときにその文が自然に発生する確率を計算します。
この確率が高い場合、その文は自然に発生しやすいので流暢であると言えます。
文(単語の列)を$s=\{w_1, \cdots, w_N\}$としましょう。この時言語モデルは確率$P(s)$を推定します。
多くの場合、ある単語$w_i$の発生確率をその単語の前後$s_{\backslash w_i}$から推定して、その積として全体の確率を計算します。
\begin{align}
P(s)&=P(w_1, \cdots, w_N)\\
&=\prod_{i=1}^NP(w_i|s_{\backslash w_i})
\end{align}
こうすると、文の中に変な単語が出現するとその単語の発生確率$P(w_i)$が小さくなるので全体$P(s)$も小さくなるという仕組みです。
つまり、単語$w_i$の発生確率をそれ以外の単語$s_{\backslash w_i}$から推定するタスクが解けると言語モデルが作れます。
いつ使うの?
言語モデルは自然言語処理で最も大切なモデルの一つで多くの場面で使えますが、いくつか象徴的なものを上げてみます。
- 生成モデルでの候補文のランキン(流暢な出力をしたい!)
- Skip-gram、CBoWのようなword embeddingの学習(言語の性質の情報を含むword embeddingsがほしい)
- 大きなNeural Networkの初期化(アノテートされてないデータを大量に使って効率よく初期化したい)
cross entropy
cross entropyは2つの確率分布の類似度を計算するもので、離散確率の場合は
H(Q, P) = \sum_x Q(x)\log P(x)
となります。多クラス分類問題では$p(x)$を正解ラベル$q(x)$を推定確率として、cross entropyを最大化することで学習を行います。つまり、入力を$x$、ラベルを$t$とすると
\textrm{argmax} \log P(t\ |\ x)
を最大化することになります。
上で、言語モデルを文中の単語$w_i$を周辺の単語$s_{\backslash w_i}$から推定するタスクに落としました。
これは、語彙の中から一つの単語を選ぶタスクなので多クラス分類タスクになります。
よって、ここでもcross entropyを最大化することで学習を行います。
\textrm{argmax}\sum_{i=1}^N \log P(w_i| s_{\backslash w_i})
perplexity
cross entropyは言語モデルの学習につかいました。対してperplexityは言語モデルの評価に使います。
言語モデルは、実際のデータに対してどれだけモデルが流暢であるというかによって評価します。(データ内にある文は人間が実際に喋ったものなのでそれが流暢の定義なはずです)
つまり、$P(s)$が大きければ評価が高いのです。
この指標を数式に落としたものがperplexityで最もよく使われる言語モデルの評価尺度です。
PP(s) = \prod_{i=1}^NP(w_i)^{-\frac{1}{N}}
関係性
cross entropyとperplexityの関係を探るために、perplexityの$\log$を取ってみると
\begin{align}
\log PP(s) &= \log\prod_{i=1}^NP(w_i)^{-\frac{1}{N}}\\
&=\frac{1}{N}\sum_{i=1}^N\log P(w_i)
\end{align}
となります。ここで、最後の式は各単語に対するcross entropyの平均になっていることがわかります。
つまり、perplexityのlogがcross entropyになるのです。
言語モデルの話で
- なぜ学習にはcross entropyを使って評価にはperplexityを使うのか
- perplexityに対して最適化したらもっと良くなるのでは?
という声を聞いたことがあります。(あんまり多くは無いけど
結論から言うと、cross entropyに対して最適化するのとperplexityにたいして最適化することは同じことなのです。