import kenlm
model = kenlm.language("tri_gram_language_model.arpa")
score = model.score("銀行 放貸 行為")
print(score)
---------------------------------
>>> -7.153961658477783
score = model.score("銀行 放待 行為")
print(score)
----------------------------------
>>> -11.517741203308105
上述**幾個要點:
(1)tri_gram_language_model.arpa為訓練好的n-gram語言模型,此處是我自己利用乙個很小的文字訓練出來的3-gram語言模型,模型檔案內容如下,因為我這裡訓練的是3-gram語言模型,所以模型檔案中,分別對應1-gram、2-gram及3-gram的模型引數。
圖1(2)模型檔案引數說明,以1-gram中的「-4.405105 中廣網 -0.07266096」作為說明,數字「-4.405105」可以看成是「中廣網」這個詞出現的概率,然後取10為底的對數得到,即lg(p(中廣網))=-4.405105,數字「 -0.07266096」為回退概率(back probability),在計算2-gram的未登入詞會用到它,這裡不用太過關注,需要額外了解的,可以參考這篇博文**n-gram語言模型的原理。值得說明的是,對於3-gram中的引數,沒有回退概率這樣一項引數,這是因為本模型最多是3-gram,而回退概率是在計算4-gram才會用到,所以3-gram引數中不需要這一列。
(3)model.score("銀行 放貸 行為")返回結果表示「銀行 放貸 行為」這句話是人話的概率,也就是說返回分數越高,這句話就越像人話,分數越低,這句話就越不像人話,也就是越不符合我們日常的表達;從上面例子可以看到「銀行 放貸 行為」比「銀行 放待 行為」更符合人話
(4)model.score() 傳入句子時,不同詞語之間需要用空格隔開(即分詞後的句子)
(1)語言模型概率——鏈式法則回顧
計算乙個句子(w1,w2,w3,w4,w5)的概率可以用下式表示:
通過馬爾科夫假設,將上述計算轉化為3-gram模型,也就是計算某乙個單詞概率時,只依賴前面的2個詞語,具體公式如下:
(2)kenlm實際上就是通過上述模型進行計算(以計算「銀行 放貸 行為」這句話概率為例)
(3)條件概率計算規則
直接在arpa檔案中查詢,如果有則直接返回它的pro(圖1中第一列引數),否則返回的pro(圖1中第一列引數)。
直接在arpa檔案中查詢,有則直接返回它的pro,否則返回back_pro(w1) + pro(w2)的結果。back_pro為圖2中第一列引數
這個稍微複雜,具體參照下圖
(4)具體計算過程
計算可能用到的n-gram引數如下:
pro n-gram back-pro
-4.540702 0
0 -0.39536887
-2.7043288 銀行 -0.15291257
-4.247026 放貸 -0.07266093
-3.3257697 行為 -0.18192981
-1.4688878 0
-2.662721 銀行 -0.0610168
-2.8920295 銀行 放貸 -0.0610168
-1.1110907 放貸 行為 -0.0610168
-0.77461904 行為 0
-0.7025586 銀行 放貸 行為
p(銀行 放貸 行為 )=p(銀行|)p(放貸|銀行)p(行為|銀行 放貸)p(|放貸 行為)p(銀行|) = -2.662721
p(放貸|銀行) = -0.0610168-2.8920295 = -2.953046 (因為"銀行 放貸"三元組引數不存在,最終結果等於back_pro("銀行") + pro("銀行 放貸"))
p(行為|銀行 放貸) = -0.7025558
p(|放貸 行為) = -0.0610168-0.77461904= -0.835635 (因為"放貸 行為 "三元組引數不存在,最終結果等於back_pro("放貸 行為") + pro("行為 "))
最終結果為 -2.662721 - 2.953046 - 0.7025558 - 0.835635 = - 7.15396
詳解ROC AUC計算過程
roc全稱是 受試者工作特徵 receiver operating characteristic roc曲線的面積就是auc area under the curve auc用於衡量 二分類問題 機器學習演算法效能 泛化能力 python中sklearn直接提供了用於計算roc的函式 1 下面就把函...
遞迴計算過程和迭代計算過程
這次主要想通過幾個sicp的題目來說明遞迴計算過程和迭代計算過程。1 階乘 遞迴計算過程 define factorial n if n 1 1 factorial n 1 n 迭代計算過程 define fact iter counter result if counter 1 result fa...
PinBlock計算過程
引數 密碼,賬號,leftpinkey,rightpinkey out data 該引數為了帶出計算出來的pinblock 1先將密碼轉換為bcd碼 注意,轉碼後長度會變化,eg ascii碼的6位密碼轉成bcd碼後會縮短 放入pinblock定義好的16個長度的空字元陣列中 2再將賬號轉換為bcd...