詳解kenlm語言模型計算過程

2021-10-05 11:43:48 字數 2615 閱讀 2979

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...