言語モデル
言語モデル
- 「今日/は/晴れ」や「明日/は/雨」などの文はよく使われるのに対し、「晴れ/は/今日」や「は/雨/明日」などの文は全然使われない
- その文はどのぐらいの確率ででやすいのか?(生起確率)
- 確率的言語
その文(単語列)の確率を与えるモデルのことを「(確率的)言語モデル」という。
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(晴れ|は)
で計算される。
右辺の各確率は最尤推定で、
- N : 単語のN個組(N-gram)
- n : 単語列の長さ
- C(w_1) : 単語列w_1が(学習)データ中に出現する回数
と推定できる。
このモデルは、(学習)データにその単語列がでてくるかどうかに大きく依存してしまう。
例えば、そのまま確率値を計算した場合、学習データに出てこない単語組は確率が0となってしまったり、出てきてもとても小さい確率になってしまう。この問題を解決するために通常「スムージング」と呼ばれる手法が使われる。
参考文献
- 言語と計算4 - 確率的言語モデル