言語モデル入門 (第二版)
-
Upload
yoshinari-fujinuma -
Category
Technology
-
view
2.094 -
download
0
description
Transcript of 言語モデル入門 (第二版)
言語モデル入門
(第二版)
2014年10月19日
@akkikiki
免責事項
• この発表は個人のものであり、会社とは関係ありません
目次
• はじめに
–言語モデルとは?何に使うの?
• 基礎編
–スムージング
–言語モデルの評価
• 応用編:言語モデルの最近の研究
• ツールキットのお話
今回メインで使用した資料
• Coursera
• IME本
言語モデルって何?
• 人間が用いるであろう言葉らしさ、を確率としてモデル化する
• 例:P(<BOS>我輩は猫である<EOS>) >
P(<BOS>は猫である<EOS>) IME本210ページより
モデル化するデータは?
• コーパスが整備されている。
• Brownコーパス
• 新聞コーパス(読売、毎日、日経等々)
• Google 日本語 n-gramコーパス
• 日本語書き言葉均衡コーパス(BCCWJ)
• …
言語モデルは何に使うの?
• 例:基本タスク
–機械翻訳
• 翻訳した日本語は日本語らしいか。
–かな漢字変換
• 変換候補はよく使われる漢字(+送り仮名等)か。
• 例:変化球系タスク
–翻字(マイケル=Michael)検出(Li+ ACL 2004)
– Twitter上のTopic tracking(Lin+ KDD 2011)
–ユーザのオンラインコミュニティの退会予測(Danescu-Niculescu-Mizil+ WWW 2013)
•基礎編:
言語モデルとスムージング
シャノンゲーム
• 次の単語はなにがくる?
• I want to go to ______
• P(w | I want to go to)でモデル化しよう!
n-gram言語モデル
• n-1語を文脈として次の単語を予測する
– 文字n-gram、単語n-gram、品詞n-gram
– 1-gram = unigram, 2-gram = bigram
• 例:bigram言語モデル
– P(w_i | w_i-1) = c(w_i, w_i-1) / c(w_i-1)
• P(<BOS>/我輩 / は / 猫 / で / ある/<EOS>)
– =P(我輩| <BOS>) * P(は|我輩) * P(猫|は) * P(で|猫) *
P(ある|で) * P(<EOS> | ある)
スムージング
• コーパスに登場する単語は有限である。
• 例:<BOS>/俺/は/猫/で/あ/る/<EOS>
• P(俺 | <BOS>) = 0
• コーパスに登場していない単語にどう対応するか?(=ゼロ頻度問題)
• ⇒解決策:スムージング
スムージングの種類
• 加算スムージング ⇒ 不十分
• n-1, n-2, …と低次のn-gramを用いよう!
• バックオフ型
–高次のngramが存在しない場合、低次を考慮
– Good Turingによる推定値で低次をDiscount
• 補完(interpolated)型
–常に低次を考慮
– Interpolated Kneser-neyスムージング
加算スムージング
• 一番単純:定数を頻度に加算する
• n(w):コーパス中の単語の出現回数
• C:コーパス中の全単語の出現回数
• k:加算する定数
• P(w) = (n(w) + k) / (C + kV)
Good Turing 推定:バックオフ型
• 頻度の頻度を用いた、頻度の補正
• N_c: 頻度の頻度
• コーパス例:
–マグロ:2,鮭:3,こはだ:1, 玉子:1, いか:1
–合計8単語
• N_1 = 3, N_2 = 1, N_3 = 1
• 1回しか観測されていない単語を「未知の単語が観測される確率」と扱う
Good Turing 推定:例
• P_gt(ゼロ頻度) = N_1 / N
• ゼロ頻度:
– P_gt(ゼロ頻度) = 3/8
• 一回だけ観測された単語:
– c*(こはだ) =2 * N_2 / N_1 = 2/3
– P_gt(一回だけの単語) = 2/3 / 8 = 1/12
Kneser-neyスムージング:Discounting
• Good turingは結局ほぼ0.75ぐらいをdiscount
– AP corpus
– (Church & Gale 1991)
• ⇒定数でdiscountすればいい!
c C*
0 0.000027026
1 0.4457
2 1.260
3 2.237
4 3.236
5 4.23
6 5.19
7 6.21
8 7.24
Kneser-neyスムージング:overview
• 実験的に一番良いスムージング
• いくつかバリエーションがある
– Interpolated Kneser-ney (Kneser & Ney 1995)
• 今回はこっちを説明
– Modified Kneser-ney(Chen & Goodman 1999)
• アイディアは:
–直前の単語の種類数を重視
Kneser-neyスムージング:例
• Bigram言語モデルを想定
• I want to go to Toyama Fransisco
– Fransiscoは頻度が高いが、ほぼSanの後に続く
• スムージング:unigramの頻度
– P(Toyama Fransisco) ≒ P(Fransisco)
– P(Toyama Fransisco)が高くなってしまう!
• Kneser-neyのアイディア:
– P_continuation: 単語wは直前の単語の種類は豊富か?
Kneser-neyスムージングによるバイグラム確率
Kneser-neyスムージングによるバイグラム確率
w_iの直前に現れる単語の種類数
Kneser-neyスムージングによるバイグラム確率
w_iの直前に現れる単語の種類数
全ての単語の直前に現れる単語の種類数
•言語モデルの評価
パープレキシティ
• 情報理論的距離
• 低いほど言語モデルに近く、高いほどモデルから遠い
• D: テスト文書
• N: 単語数
• 長さNで正規化しているイメージ
•応用編
発展1:ニューラル言語モデル
(Bengio+ 2003)
• 分散表現
–単語を固定長のベクトルで表す
• AP newsコーパスではModified Kneser-ney
よりPerplexityが低い
model n Perplexity
Neural LM 6 109
N-gram (Kneser-ney) 3 127
N-gram (Kneser-ney) 4 119
N-gram (Kneser-ney) 5 117
※ただしNeural LMはinterpolated trigramも使用している
発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)
• Stupid back off
–文字通りstupidだが、意外とうまくいく
– Discoutingなし
• 確率ではなくスコア
– α = 0.4
• Unigramは
発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)
BLEU
scoreはstupid
backoff
の方が上!
発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)
BLEU
scoreはstupid
backoff
の方が上!
コーパスのサイズが大きくなるとスムージングの性能差がなくなる
• ツールキットのお話
主な言語モデルツール
• CMU-Cambridge language model toolkit
– Kneser-neyがないのであまりおすすめしない
• SRI language model toolkit (SRILM)
– Kneser-neyはある
– Bengioらもこれを使った。多分これが一番使われている?
–早い!
まとめ
• N-gram言語モデルが主に用いられる
• Kneser-neyが経験的に良いスムージング
• スムージングの性能差はコーパスを大きくすればなくなる
• おすすめツールはSRILM
参考文献
• 日本語入力を支える技術
• StanfordのNLPの授業
– https://class.coursera.org/nlp/lecture
– http://nlp.stanford.edu/~wcmac/papers/20050421-smoothing-
tutorial.pdf
• NYUの言語モデルの授業スライド
– http://www.cs.nyu.edu/~petrov/lecture2.pdf
• Univ. of Marylandの言語モデルの授業スライド
– http://www.umiacs.umd.edu/~jimmylin/cloud-2010-
Spring/session9-slides.pdf
• Neural Language Modelの授業スライド
– http://www.inf.ed.ac.uk/teaching/courses/asr/2013-14/asr09-
nnlm.pdf
付録:SRILMのコマンド
• # build a 5-gram model
• ngram-count -order 5 -text hogehoge.txt -
unk -lm hogehoge_lm
• # calculate perplexity
• ngram -order 5 -lm hogehoge_lm -ppl
test.txt