language modeling tutorial

39
Language Modeling 語言模型 By Mark Chang

Upload: mark-chang

Post on 18-Aug-2015

9 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Language Modeling Tutorial

Language Modeling語言模型

By Mark Chang

Page 2: Language Modeling Tutorial

語言模型?

● 什麼是語言模型?● 語言模型如何產生?● 實作語言模型的應用

Page 3: Language Modeling Tutorial

什麼是語言模型?

Page 4: Language Modeling Tutorial

https://www.ptt.cc/bbs/StupidClown/M.1423419065.A.AF8.html

Page 5: Language Modeling Tutorial

輸入一個字:「祭」

哪個字串看起來比較「正常」?

A.祭隀梜鍖毝捁B.祭自兀人己止C.祭自己止兀人D.祭止兀自己人

Page 6: Language Modeling Tutorial

什麼是語言模型?

• 語言模型是藉由一個機率分布的模型,將機率指派給字詞所組成的字串。

• Ex:

– P(“ ”祭隀梜鍖毝捁 ) = 10-200

– P(“ ”祭自兀人己止 ) = 10-50

– P(“ ”祭自己止兀人 ) = 10-40

– P(“ ”祭止兀自己人 ) = 10-10

Page 7: Language Modeling Tutorial

語言模型還有什麼用?● 語音輸入:

– 既只誤識字幾人 -> 祭止兀是自己人● 機器翻譯:

– Taiwan president Ma Ying-jeou flew to Singapore on Tuesday

→台灣總統馬英九飛到新加坡在週二→台灣總統馬英九於週二飛往新加坡

● 資訊檢索:– 罷免

→ 選舉罷免法、罷免立委、 ...

Page 8: Language Modeling Tutorial

語言模型怎麼產生?

語言模型

語言模型

句子 機率

語料庫訓練

Page 9: Language Modeling Tutorial

如何把機率指派給字串?

字串的機率,跟個別單字在在語料庫中的使用頻率有關

祭隀梜鍖毝捁 VS 祭自兀人己止

鍖、梜:低頻字 自、人:高頻字

Page 10: Language Modeling Tutorial

Uni-gram

國民黨立委

蔡正元被網

友暱稱為祭

止兀 ...

國 民 黨 立

委 蔡 正 元

被 網 友 暱

稱 為 祭 止

兀 ...

語料庫

uni-gram

祭: 9670

止: 52982

…....

Page 11: Language Modeling Tutorial

Uni-gram Modeling

● P(w1, w2, w3, w4, ..., wn)

= P(w1) * P(w2) * P(w3) * … * P(wn)● Ex: P(祭 ,止 ,兀 ,自 ,己 ,人 )

= P(祭 ) * P(止 ) * P(兀 ) * … * P(人 )● 假設所有的單字出現的機率都是獨立事件,跟前面一個字有關。

Page 12: Language Modeling Tutorial

Uni-gram Modeling

● 用 uni-gram估計P(w1)機率值:P(w1) = C(w1) / C(all words)

● EX:

P(祭 ) ≈ C(祭 ) / 語料庫的總字數

Page 13: Language Modeling Tutorial

實作 1-1 :初始化

● 載入套件● 載入語料庫

Page 14: Language Modeling Tutorial

實作 1-2:產生 Uni-gram

● 將文句「祭止兀自己人」切成uni-gram● 將語料庫切成 uni-gram,並作頻率統計● 查詢「祭」的頻率

Page 15: Language Modeling Tutorial

實作 1-3: Uni-gram Modeling

● 計算P(梜 )、P(祭 )● 計算P(祭隀梜鍖毝捁 )、P(祭自己止兀人 )、P(祭止兀自己人 )

Page 16: Language Modeling Tutorial

如何把機率指派給字串?

字串的機率,跟某個字是否常出現在某個字的後面有關。

祭自兀人己止 VS 祭自己止兀人

兀較常出現在止後面

兀很少出現在自後面

Page 17: Language Modeling Tutorial

Bi-gram

國民黨立委

蔡正元被網

友暱稱為祭

止兀 ...

國民 民黨 黨立

立委 委蔡 蔡正

正元 元被 被網

網友 友暱 暱稱

稱為 為祭 祭止

止兀 ...

語料庫

bi-gram

祭止: 872

止兀: 2354

…....

Page 18: Language Modeling Tutorial

Bi-gram

● P(w1, w2, w3, w4, ..., wn)

= P(w1) * P(w2 | w1) * P(w3 | w2) * …

* P(wn |wn-1)● Ex: P(祭 ,止 ,兀 ,自 ,己 ,人 )

= P(祭 ) * P( 止 |祭 ) * P(兀 |止 ) * …

* P(人 |己 )● 假設所有的字出現的機率都只跟前面一個字有關。

Page 19: Language Modeling Tutorial

Bi-gram

● 用 bi-gram估計P(w2 | w1) 的機率值:P(w2 | w1)

= P(w1, w2) / P(w1)

≈ C(w1, w2) / C(w1)● EX:

P(止 |祭 ) = C(祭 ,止 ) / C(祭 )

Page 20: Language Modeling Tutorial

實作 1-4:產生 Bi-gram

● 將文句「祭止兀自己人」切成bi-gram● 將語料庫切成 bi-gram,並作頻率統計● 查詢「止兀」的頻率

Page 21: Language Modeling Tutorial

實作 1-5: Bi-gram Modeling

● 計算P(兀 |自 )、P(兀 |止 )● 計算P(祭自兀人己止 )、P(祭自己止兀人 )、P

(祭止兀自己人 )

Page 22: Language Modeling Tutorial

如何把機率指派給字串?

字串的機率,跟某個字是否常出現在某兩個字的後面有關。

祭自己止兀人 VS 祭止兀自己人

兀較常出現在祭止後面

人較少出現在止兀後面

Page 23: Language Modeling Tutorial

Tri-gram

國民黨立委

蔡正元被網

友暱稱為祭

止兀 ...

國民黨 民黨立

黨立委 立委蔡

委蔡正 蔡正元

正元被 元被網

被網友 網友暱

友暱稱 暱稱為

稱為祭 為祭止

祭止兀 ...

語料庫 uni-gram

祭止兀: 870…....

Page 24: Language Modeling Tutorial

Tri-gram

● P(w1, w2, w3, w4, ..., wn)

= P(w1) * P(w2 | w1) * P(w3 | w2, w1) * …

* P(wn |wn-1,wn-2)● Ex: P(祭 ,止 ,兀 ,自 ,己 ,人 )

=P(祭 ) * P( 止 | 祭 ) * P( 兀 | 祭 , 止 ) * …

* P( 人 | 自 ,己 )● 假設所有的字出現的機率都只跟前面兩個字有關,與其他字無關。

Page 25: Language Modeling Tutorial

Tri-gram

● 用 tri-gram估計P(w3 | w1,w2) 的機率值:P(w3 | w1, w2)

= P(w1, w2, w3) / P(w1, w2)

≈ C(w1, w2, w3) / C(w1, w2)● EX:

P(兀 |祭 ,止 ) = C(祭 ,止 ,兀 ) / C(祭 ,止 )

Page 26: Language Modeling Tutorial

實作 1-6:產生 Tri-gram

● 將文句「祭止兀自己人」切成 tri-gram● 將語料庫切成 tri-gram,並作頻率統計● 查詢「祭止兀」的頻率

Page 27: Language Modeling Tutorial

實作 1-7: Tri-gram Modeling

● 計算P(兀 |自、己 )、P(兀 |祭、止 )● 分別用 Bi-gram和Tri-gram算P(祭止兀自己人 ),比較其差異

Page 28: Language Modeling Tutorial

實際上,每個字跟前面所有的字都可能有關 ...● P(w1,w2,w3,w4,...,wn)

= P(w1) * P(w2 | w1) * P(w3 | w1, w2) * …

* P(wn | w1, w2, ....wn-1)● Ex: P(祭 ,止 ,兀 ,自 ,己 ,人 )

=P(祭 ) * P(止 |祭 ) * P(兀 |祭 ,止 ) * …

* P(人 |祭 ,止 ,...,己 )

Page 29: Language Modeling Tutorial

如果使用了 4-gram 和 5-gram ??

● 字與字的組合會太多種,維度爆炸– Uni-gram: 四千種– Bi-gram: 十萬種– Tri-gram: 五十萬種

…..

Page 30: Language Modeling Tutorial

如果使用了 4-gram 和 5-gram ??

● 在語料庫中沒出現的,則求出來的機率是 0:– C(止, 兀, 好, 帥) = 0– P(止, 兀, 好, 帥)

= P(止) * ...* P( 帥 |止, 兀, 好)

= P(止) * ...* C(止, 兀, 好, 帥) / C(止, 兀, 好)

= 0

Page 31: Language Modeling Tutorial

若用 tri-gram或 bi-gram 也得出 0怎麼辦?

● Smoothing● Interpolation

Page 32: Language Modeling Tutorial

Add-One Smoothing:

● P'(w2 | w1) = ( C(w1, w2)+1 ) / ( C(w1) + C(V) )– V是uni-gram的種類數量

● P'(w3 | w1, w2)

= ( C(w1,w2,w3)+1 ) / ( C(w1, w2) + C(V) )– V是bi-gram的種類數量

Page 33: Language Modeling Tutorial

Interpolation

● P'(w2 |w1) = x* P(w2) + y* P(w2 | w1)– where x+y = 1

● P'(w3 |w2,w1)

= x* P(w3) + y* P(w3 | w2) + z* P(w3 | w2, w1)– where x+y+z = 1

Page 34: Language Modeling Tutorial

實作 1-8: Add-One Smoothing

● 計算 P'( 止 | 兀 ) 和 P'( 兀 | 止 )● 比較 P'( 兀 | 止 ) 和 P( 兀 | 止 ) 的差異

Page 35: Language Modeling Tutorial

實作 1-9: Interpolation

● 計算 P'( 止 | 兀 ) 和 P'( 兀 | 止 )● 比較 P'( 兀 | 止 ) 和 P( 兀 | 止 ) 的差異

Page 36: Language Modeling Tutorial

應用:輸入法自動選字

● 給定第一個字「自」,自動產生後面兩個字。 求 w2,w3使以下機率為最大值。

● P(w2,w3 |w1=自 )

=P(w1,w2,w3) / P(w1=自 )

=P(w1)*P(w2|w1=自 )*P(w3 |w2,w1=自 ) / P(w1=自 )

=P(w2|w1=自 )*P(w3 |w2,w1=自 )

Page 37: Language Modeling Tutorial

實作 1-10:輸入法推薦選字

● 輸入一個字,自動選出後面要接的兩個字

Page 38: Language Modeling Tutorial

進階版:藏頭詩自動產生器

● http://www.meetup.com/Taiwan-R/events/220410044/

 勘探字文型模率機  騷花水賦宛四譬石  人如深詩轉五如泉  多夢處成清十今聲  病不不絲江五年落  來見用竹漢湖前花  不說武林主水路開

Page 39: Language Modeling Tutorial

講者聯絡方式:

Mark Chang

Github : http://github.com/ckmarkoh

Blog : http://cpmarkchang.logdown.com

email : ckmarkoh at gmail.com