33
言語モデル入門 (第二版) 20141019@akkikiki

言語モデル入門 (第二版)

Embed Size (px)

DESCRIPTION

Introduction to language models in Japanese

Citation preview

Page 1: 言語モデル入門 (第二版)

言語モデル入門

(第二版)

2014年10月19日

@akkikiki

Page 2: 言語モデル入門 (第二版)

免責事項

• この発表は個人のものであり、会社とは関係ありません

Page 3: 言語モデル入門 (第二版)

目次

• はじめに

–言語モデルとは?何に使うの?

• 基礎編

–スムージング

–言語モデルの評価

• 応用編:言語モデルの最近の研究

• ツールキットのお話

Page 4: 言語モデル入門 (第二版)

今回メインで使用した資料

• Coursera

• IME本

Page 5: 言語モデル入門 (第二版)

言語モデルって何?

• 人間が用いるであろう言葉らしさ、を確率としてモデル化する

• 例:P(<BOS>我輩は猫である<EOS>) >

P(<BOS>は猫である<EOS>) IME本210ページより

Page 6: 言語モデル入門 (第二版)

モデル化するデータは?

• コーパスが整備されている。

• Brownコーパス

• 新聞コーパス(読売、毎日、日経等々)

• Google 日本語 n-gramコーパス

• 日本語書き言葉均衡コーパス(BCCWJ)

• …

Page 7: 言語モデル入門 (第二版)

言語モデルは何に使うの?

• 例:基本タスク

–機械翻訳

• 翻訳した日本語は日本語らしいか。

–かな漢字変換

• 変換候補はよく使われる漢字(+送り仮名等)か。

• 例:変化球系タスク

–翻字(マイケル=Michael)検出(Li+ ACL 2004)

– Twitter上のTopic tracking(Lin+ KDD 2011)

–ユーザのオンラインコミュニティの退会予測(Danescu-Niculescu-Mizil+ WWW 2013)

Page 8: 言語モデル入門 (第二版)

•基礎編:

言語モデルとスムージング

Page 9: 言語モデル入門 (第二版)

シャノンゲーム

• 次の単語はなにがくる?

• I want to go to ______

• P(w | I want to go to)でモデル化しよう!

Page 10: 言語モデル入門 (第二版)

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> | ある)

Page 11: 言語モデル入門 (第二版)

スムージング

• コーパスに登場する単語は有限である。

• 例:<BOS>/俺/は/猫/で/あ/る/<EOS>

• P(俺 | <BOS>) = 0

• コーパスに登場していない単語にどう対応するか?(=ゼロ頻度問題)

• ⇒解決策:スムージング

Page 12: 言語モデル入門 (第二版)

スムージングの種類

• 加算スムージング ⇒ 不十分

• n-1, n-2, …と低次のn-gramを用いよう!

• バックオフ型

–高次のngramが存在しない場合、低次を考慮

– Good Turingによる推定値で低次をDiscount

• 補完(interpolated)型

–常に低次を考慮

– Interpolated Kneser-neyスムージング

Page 13: 言語モデル入門 (第二版)

加算スムージング

• 一番単純:定数を頻度に加算する

• n(w):コーパス中の単語の出現回数

• C:コーパス中の全単語の出現回数

• k:加算する定数

• P(w) = (n(w) + k) / (C + kV)

Page 14: 言語モデル入門 (第二版)

Good Turing 推定:バックオフ型

• 頻度の頻度を用いた、頻度の補正

• N_c: 頻度の頻度

• コーパス例:

–マグロ:2,鮭:3,こはだ:1, 玉子:1, いか:1

–合計8単語

• N_1 = 3, N_2 = 1, N_3 = 1

• 1回しか観測されていない単語を「未知の単語が観測される確率」と扱う

Page 15: 言語モデル入門 (第二版)

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

Page 16: 言語モデル入門 (第二版)

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

Page 17: 言語モデル入門 (第二版)

Kneser-neyスムージング:overview

• 実験的に一番良いスムージング

• いくつかバリエーションがある

– Interpolated Kneser-ney (Kneser & Ney 1995)

• 今回はこっちを説明

– Modified Kneser-ney(Chen & Goodman 1999)

• アイディアは:

–直前の単語の種類数を重視

Page 18: 言語モデル入門 (第二版)

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は直前の単語の種類は豊富か?

Page 19: 言語モデル入門 (第二版)

Kneser-neyスムージングによるバイグラム確率

Page 20: 言語モデル入門 (第二版)

Kneser-neyスムージングによるバイグラム確率

w_iの直前に現れる単語の種類数

Page 21: 言語モデル入門 (第二版)

Kneser-neyスムージングによるバイグラム確率

w_iの直前に現れる単語の種類数

全ての単語の直前に現れる単語の種類数

Page 22: 言語モデル入門 (第二版)

•言語モデルの評価

Page 23: 言語モデル入門 (第二版)

パープレキシティ

• 情報理論的距離

• 低いほど言語モデルに近く、高いほどモデルから遠い

• D: テスト文書

• N: 単語数

• 長さNで正規化しているイメージ

Page 24: 言語モデル入門 (第二版)

•応用編

Page 25: 言語モデル入門 (第二版)

発展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も使用している

Page 26: 言語モデル入門 (第二版)

発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)

• Stupid back off

–文字通りstupidだが、意外とうまくいく

– Discoutingなし

• 確率ではなくスコア

– α = 0.4

• Unigramは

Page 27: 言語モデル入門 (第二版)

発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)

BLEU

scoreはstupid

backoff

の方が上!

Page 28: 言語モデル入門 (第二版)

発展2:大規模データによる言語モデル (Brants+ EMNLP 2007)

BLEU

scoreはstupid

backoff

の方が上!

コーパスのサイズが大きくなるとスムージングの性能差がなくなる

Page 29: 言語モデル入門 (第二版)

• ツールキットのお話

Page 30: 言語モデル入門 (第二版)

主な言語モデルツール

• CMU-Cambridge language model toolkit

– Kneser-neyがないのであまりおすすめしない

• SRI language model toolkit (SRILM)

– Kneser-neyはある

– Bengioらもこれを使った。多分これが一番使われている?

–早い!

Page 31: 言語モデル入門 (第二版)

まとめ

• N-gram言語モデルが主に用いられる

• Kneser-neyが経験的に良いスムージング

• スムージングの性能差はコーパスを大きくすればなくなる

• おすすめツールはSRILM

Page 32: 言語モデル入門 (第二版)

参考文献

• 日本語入力を支える技術

• 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

Page 33: 言語モデル入門 (第二版)

付録: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