Language Modeling Tutorial
-
Upload
mark-chang -
Category
Technology
-
view
9 -
download
0
Transcript of Language Modeling Tutorial
Language Modeling語言模型
By Mark Chang
語言模型?
● 什麼是語言模型?● 語言模型如何產生?● 實作語言模型的應用
什麼是語言模型?
https://www.ptt.cc/bbs/StupidClown/M.1423419065.A.AF8.html
輸入一個字:「祭」
哪個字串看起來比較「正常」?
A.祭隀梜鍖毝捁B.祭自兀人己止C.祭自己止兀人D.祭止兀自己人
什麼是語言模型?
• 語言模型是藉由一個機率分布的模型,將機率指派給字詞所組成的字串。
• Ex:
– P(“ ”祭隀梜鍖毝捁 ) = 10-200
– P(“ ”祭自兀人己止 ) = 10-50
– P(“ ”祭自己止兀人 ) = 10-40
– P(“ ”祭止兀自己人 ) = 10-10
語言模型還有什麼用?● 語音輸入:
– 既只誤識字幾人 -> 祭止兀是自己人● 機器翻譯:
– Taiwan president Ma Ying-jeou flew to Singapore on Tuesday
→台灣總統馬英九飛到新加坡在週二→台灣總統馬英九於週二飛往新加坡
● 資訊檢索:– 罷免
→ 選舉罷免法、罷免立委、 ...
語言模型怎麼產生?
語言模型
語言模型
句子 機率
語料庫訓練
如何把機率指派給字串?
字串的機率,跟個別單字在在語料庫中的使用頻率有關
祭隀梜鍖毝捁 VS 祭自兀人己止
鍖、梜:低頻字 自、人:高頻字
Uni-gram
國民黨立委
蔡正元被網
友暱稱為祭
止兀 ...
國 民 黨 立
委 蔡 正 元
被 網 友 暱
稱 為 祭 止
兀 ...
語料庫
uni-gram
祭: 9670
止: 52982
…....
Uni-gram Modeling
● P(w1, w2, w3, w4, ..., wn)
= P(w1) * P(w2) * P(w3) * … * P(wn)● Ex: P(祭 ,止 ,兀 ,自 ,己 ,人 )
= P(祭 ) * P(止 ) * P(兀 ) * … * P(人 )● 假設所有的單字出現的機率都是獨立事件,跟前面一個字有關。
Uni-gram Modeling
● 用 uni-gram估計P(w1)機率值:P(w1) = C(w1) / C(all words)
● EX:
P(祭 ) ≈ C(祭 ) / 語料庫的總字數
實作 1-1 :初始化
● 載入套件● 載入語料庫
實作 1-2:產生 Uni-gram
● 將文句「祭止兀自己人」切成uni-gram● 將語料庫切成 uni-gram,並作頻率統計● 查詢「祭」的頻率
實作 1-3: Uni-gram Modeling
● 計算P(梜 )、P(祭 )● 計算P(祭隀梜鍖毝捁 )、P(祭自己止兀人 )、P(祭止兀自己人 )
如何把機率指派給字串?
字串的機率,跟某個字是否常出現在某個字的後面有關。
祭自兀人己止 VS 祭自己止兀人
兀較常出現在止後面
兀很少出現在自後面
Bi-gram
國民黨立委
蔡正元被網
友暱稱為祭
止兀 ...
國民 民黨 黨立
立委 委蔡 蔡正
正元 元被 被網
網友 友暱 暱稱
稱為 為祭 祭止
止兀 ...
語料庫
bi-gram
祭止: 872
止兀: 2354
…....
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(人 |己 )● 假設所有的字出現的機率都只跟前面一個字有關。
Bi-gram
● 用 bi-gram估計P(w2 | w1) 的機率值:P(w2 | w1)
= P(w1, w2) / P(w1)
≈ C(w1, w2) / C(w1)● EX:
P(止 |祭 ) = C(祭 ,止 ) / C(祭 )
實作 1-4:產生 Bi-gram
● 將文句「祭止兀自己人」切成bi-gram● 將語料庫切成 bi-gram,並作頻率統計● 查詢「止兀」的頻率
實作 1-5: Bi-gram Modeling
● 計算P(兀 |自 )、P(兀 |止 )● 計算P(祭自兀人己止 )、P(祭自己止兀人 )、P
(祭止兀自己人 )
如何把機率指派給字串?
字串的機率,跟某個字是否常出現在某兩個字的後面有關。
祭自己止兀人 VS 祭止兀自己人
兀較常出現在祭止後面
人較少出現在止兀後面
Tri-gram
國民黨立委
蔡正元被網
友暱稱為祭
止兀 ...
國民黨 民黨立
黨立委 立委蔡
委蔡正 蔡正元
正元被 元被網
被網友 網友暱
友暱稱 暱稱為
稱為祭 為祭止
祭止兀 ...
語料庫 uni-gram
祭止兀: 870…....
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( 人 | 自 ,己 )● 假設所有的字出現的機率都只跟前面兩個字有關,與其他字無關。
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(祭 ,止 )
實作 1-6:產生 Tri-gram
● 將文句「祭止兀自己人」切成 tri-gram● 將語料庫切成 tri-gram,並作頻率統計● 查詢「祭止兀」的頻率
實作 1-7: Tri-gram Modeling
● 計算P(兀 |自、己 )、P(兀 |祭、止 )● 分別用 Bi-gram和Tri-gram算P(祭止兀自己人 ),比較其差異
實際上,每個字跟前面所有的字都可能有關 ...● 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(人 |祭 ,止 ,...,己 )
如果使用了 4-gram 和 5-gram ??
● 字與字的組合會太多種,維度爆炸– Uni-gram: 四千種– Bi-gram: 十萬種– Tri-gram: 五十萬種
…..
如果使用了 4-gram 和 5-gram ??
● 在語料庫中沒出現的,則求出來的機率是 0:– C(止, 兀, 好, 帥) = 0– P(止, 兀, 好, 帥)
= P(止) * ...* P( 帥 |止, 兀, 好)
= P(止) * ...* C(止, 兀, 好, 帥) / C(止, 兀, 好)
= 0
若用 tri-gram或 bi-gram 也得出 0怎麼辦?
● Smoothing● Interpolation
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的種類數量
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
實作 1-8: Add-One Smoothing
● 計算 P'( 止 | 兀 ) 和 P'( 兀 | 止 )● 比較 P'( 兀 | 止 ) 和 P( 兀 | 止 ) 的差異
實作 1-9: Interpolation
● 計算 P'( 止 | 兀 ) 和 P'( 兀 | 止 )● 比較 P'( 兀 | 止 ) 和 P( 兀 | 止 ) 的差異
應用:輸入法自動選字
● 給定第一個字「自」,自動產生後面兩個字。 求 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=自 )
實作 1-10:輸入法推薦選字
● 輸入一個字,自動選出後面要接的兩個字
進階版:藏頭詩自動產生器
● http://www.meetup.com/Taiwan-R/events/220410044/
勘探字文型模率機 騷花水賦宛四譬石 人如深詩轉五如泉 多夢處成清十今聲 病不不絲江五年落 來見用竹漢湖前花 不說武林主水路開
講者聯絡方式:
Mark Chang
Github : http://github.com/ckmarkoh
Blog : http://cpmarkchang.logdown.com
email : ckmarkoh at gmail.com