從上一篇內容從樸素貝葉斯出發(一),可以看到貝葉斯模型有非常堅實的數學基礎,具有很強的可解釋性,除了平滑因子 lambda 之外沒有什麼參數可調,不會像其他模型可能有「調參」的玄學,對於缺失數據不是很敏感。另外,貝葉斯定理雖然簡單,但卻是解決其他很多領域問題的基石。當然不排除它的其他缺點,如因為條件獨立假設犧牲掉的準確率,不如決策樹的分類效率,但本篇文章只著眼於它的「強大」,以及它在解決其他問題方面的應用。

中文分詞

之前一直沒有留意中文分詞,實地場景應用的時候大多數是調用jieba分詞的packages,多做一步就僅僅是根據實際應用場景,補充詞典中的詞(jieba.load_userdict(file_name) # file_name 為文件類對象或自定義詞典的路徑)。現在從貝葉斯定理應用的角度,來看中文分詞~

設X為句子,Y為詞串(一種特定的分詞假設),我們需要找到使P(Y|X)最大的分詞結果Y,由於是同一個句子進行分詞,對於各種分詞假設P(X)都是相同的,

P(Y|X) propto P(Y)P(X|Y)

所以我們需要比較的就是P(Y)P(X|Y)。P(X|Y)的含義是這種分詞詞串能組成這個句子的概率,也就是這些詞語組合起來是通順正常的句子,是你能get到句子含義的「人話」,由於任何一種分詞假設,去掉分詞符之後都能組成這樣的句子,所以P(X|Y)可近似等於1。這時,

P(Y|X) propto P(Y)

問題就轉化為尋找最大的P(Y), 使得P(Y|X)最大?那麼該如何計算詞串的概率P(Y)呢?

舉例:

1. 南京市 / 長江大橋

2. 南京 / 市長 / 江大橋

在這個問題中,尋找最大的P(Y)就是計算1、2那種分詞方式更靠譜

P(1) = P(南京市)P(長江大橋|南京市)

P(2) = P(南京)P(市長|南京)P(江大橋|南京,市長)

抽象到所有問題中,公式應為:

P(w_{1},w_{2},w_{3},w_{4},...) = P(w_{1})P(w_{2}|w_{1})P(w_{3}|w_{1},w_{2})P(w_{4}|w_{1},w_{2},w_{3})...

隨著w數目的增加,稀疏問題越發嚴重,根據日常經驗,一般一句話後面的詞跟前面的就沒什麼關係了,我們考慮問題簡化,所以最常使用的是2-gram和3-gram假設,4-gram的假設較少,幾乎沒有更多。這裡便提到了N-Gram模型。

補充:N-Gram模型

2-gram: P(w_{1},w_{2},w_{3},w_{4},...) = P(w_{1})P(w_{2}|w_{1})P(w_{3}|w_{2})P(w_{4}|w_{3})...

也就是說後一詞出現的概率只和前一個詞有關。

3-gram: P(w_{1},w_{2},w_{3},w_{4},...) = P(w_{1})P(w_{2}|w_{1})P(w_{3}|w_{1},w_{2})P(w_{4}|w_{2},w_{3})...

也就是說後一詞出現的概率和前兩個詞有關。以上兩種情況都可以理解為窗口滑動,形成了長度為N的片段。

而這些概率的計算可以用極大似然估計並且可以考慮轉換到log域(乘法變加法),加入平滑

以2-gram為例, P(w_{1},w_{2},...,w_{m}) = prod_{i=1}^{m}P(w_{i}|w_{i-1})

其中, P(w_{i}|w_{i-1}) = frac{C(w_{i-1}w_{i})}{C(w_{i-1})} ,分子是語料中 w_{i-1}w_{i} 出現的次數,分母是 w_{i-1} 出現的次數。

拼寫糾正

貝葉斯公式在拼寫糾正中也有應用,比如我們日常用Office軟體word的時候,當打字輸入「teh」的時候,有很大可能會提示詢問你是否要輸入的是"the",還有google搜索的時候、使用拼音輸入法的時候,當你輸入一個錯誤單詞,會詢問你是否要輸入的是其他單詞,會有幾個備選項,這個問題可以抽象成:

求使P(真正想輸入的詞 | 實際輸入的詞) 最大化的情況下,真正想輸入的詞是什麼?

此概率值越大的詞,排在備選項最前面,後面依次是概率逐漸小的詞語。

假設,我們實際輸入的詞是thew,那麼我們真正想輸入the的概率為:

P("the"|"thew") propto P("the")P("thew"|"the")

其中,P("the")是「the」本身在辭彙表中使用的頻繁程度,P("thew"|"the")是將"the"打成"thew"的概率。錯打的可能性千千萬,遍歷詞典的話,計算量巨大,這時又可以考慮N-Gram了,我們只考慮編輯距離為1的辭彙。

那麼什麼叫編輯距離為1的辭彙呢?也就是只有一種變動的情況(分為增、減、換、替四種情況),如下:

想輸入的詞 | 實際輸入的詞

the | thew (增加了一個字母)

the | th (減少了一個字母)

the | teh (辭彙本身相鄰字母順序交換一次)

the | tha (辭彙中一個字母被替換掉了)

除了考慮編輯距離之外,我們還可以多考慮一下鍵盤位置,鍵盤上e和w離得比較近,e和a離得稍遠,所以將the錯打成thew的概率,或許要大於將the打成tha的概率~

看完這個例子,你可以想到,這種方法不僅可以用到拼寫糾錯,更可以用到搜索和輸入法提示中~

統計機器翻譯

問題可以抽象為「給定一個句子s (sentence),它可能的外文翻譯T(transfer)集合中,哪個是最靠譜的?"

求使 P(t|s) propto P(t)P(s|t) 最大化的翻譯t

比如:

Ich liebe dich.

I love you.

存在一個平行語料庫,分詞時對齊平行語料,在我們這個例子中計算一種對齊方式,

P = P("I"|"Ich")P("love"|"liebe")P("you"|"dich")

可能還有其他的對齊方式,單詞或短語有多種翻譯可能,這些可能的翻譯中的有一些會比其他翻譯更頻繁地使用(比如take可以翻譯成中文的「帶」,「拿」,「乘坐」... ),遍歷所有的對齊方式和翻譯可能,找到最像「人話「、最地道的那種表達

還有很多以貝葉斯公式為基礎的其他應用發展,目前自然語言處理的內容也不僅限於貝葉斯,基於深度學習的分詞等也不可小覷,但貝葉斯定理仍是值得深入理解的基石。


推薦閱讀:
相关文章