言語モデル

はじめに

自然言語処理だけでなく、音声認識、スペルチェック、情報検索など多くの分野で使われている「(確率的)言語モデル」について、少しまとめてみる。

言語モデル

  • 「今日/は/晴れ」や「明日/は/雨」などの文はよく使われるのに対し、「晴れ/は/今日」や「は/雨/明日」などの文は全然使われない
  • その文はどのぐらいの確率ででやすいのか?(生起確率)
  • 確率的言語

その文(単語列)の確率を与えるモデルのことを「(確率的)言語モデル」という。

m種類の単語をn個ならべて作る単語列の確率を考えると、m^n個の単語列の確率がわかれば正確な言語モデルが作れる(?)。

例えば、3種の単語(「今日」「は」「晴れ」)を3つ並べて使う言語があったとして、それぞれの確率が、どこぞのコーパスから

#単語列 生起確率
今日今日今日 0.0001
今日今日は 0.0001
今日今日晴れ 0.0001
...
今日は晴れ 0.8
今日晴れ晴れ 0.05
...
晴れ晴れ晴れ 0.002

のように与えられたら、これはそのコーパス言語モデル

音声認識などで、認識した文章が「It is sunny」か「Fit is sunny」となったとき、言語モデルを使って、その文の生起確率を求めて高い方を使うことで、よいほうを選ぶことができる。


問題として、普通に考えて、自然言語言語モデルを作ろうと考えるとmもnも膨大で単語列1つ1つの確率を計算するなんて無理なのがわかる。

そこで、与えられた一部の(学習)データからよりよい言語モデルを推定することが問題になる。どんな目的でつかうか、どんな特徴に注目したかでいくつかの言語モデルが使われているので、まとめてみる。

言語モデルの種類

重要な言語モデルとして3つ。隠れマルコフモデルと最大エントロピーモデルは調べられていない。

N-gramモデル

ある単語はそのn個前までの単語により確率が決まるとして、その確率の掛け合わせで表現される。例えば、bigramの場合、「今日は晴れ」の生起確率は、
P(今日/は/晴れ) = P(今日|【文頭】) * P(は|今日) * P(晴れ|は)
で計算される。
右辺の各確率は最尤推定で、
P(w_n|w_{n-N+1}^{n-1}) = \frac{C(w_{n-N+1}^{n})}{C(w_{n-N+1}^{n-1})}

  • N : 単語のN個組(N-gram)
  • n : 単語列の長さ
  • C(w_1) : 単語列w_1が(学習)データ中に出現する回数

と推定できる。

このモデルは、(学習)データにその単語列がでてくるかどうかに大きく依存してしまう。
例えば、そのまま確率値を計算した場合、学習データに出てこない単語組は確率が0となってしまったり、出てきてもとても小さい確率になってしまう。この問題を解決するために通常「スムージング」と呼ばれる手法が使われる。

隠れマルコフモデル

確率的な情報遷移と確率的な記号出力を持つオートマトン
2種類の解釈があり得るような単語列(「Time flies like an arrow」)の解釈の確率を考えたりなどできる。(flies/名詞、flies/動詞など)

最大エントロピーモデル

最大エントロピー原理(制約のもとでエントロピーを最大化するモデルのe推定)を使ったモデル。未知データには確率をなるべく一様に配る。

参考文献