語言模型
一個語言模型通常構建為字符串的S的概率分布P(s)。比如,每個人100句話中平均大約有一句“你好”,那么“你好”這句話的概率大致為,像“野豬會做飯燒菜”,基本沒人會說,則可以認為其概率為0。語言模型中的句子和語法無關,只和出現的可能性相關。
假設構成一個句子。其概率計算公式可以表示為:
,隨著句子的增長,計算難度是呈指數型增長的。
一個比較實際的做法是只考慮當前詞只和前n個詞相關,其余無關。這種語言模型稱之為n-gram。一般n=2,3應用的比較多。
以二元文法為例:2-gram
我寫了一本書,分詞后為:我 寫了 一本 書。因為開頭和結尾沒有,則會為句子添加<BOS>,<EOS>,分別代表開始和結束。
即這句話的概率
如何確定的值呢?
首先構建語言模型的數據為訓練數據。假設通過統計得到 "BOS 我” = 5次
“BOS 你” = 3次 ,“BOS 他” = 4次,,則 ,其他同理,最終可以得出這句話的概率。 顯然,語言中肯定存在不在模型中的詞(未登錄詞,新詞等等)。比如心來的句子p(開始|BOS) = 0。 那么這個以“開始”開頭的句子概率為0,顯然不夠合理。
數據平滑
平滑技術就是用來解決這類概率為0的情況。
加法平滑技術
在上述問題中,字面理解,就是默認給每個詞組+1,即p(我|BOS)= 5+1/{(5+3+4)+3} =6/ 15。p(開始|BOS) = (0+1)/{(5+3+4)+3 +1} = 1/16。 概率為0的問題也得到了有效的解決。
古德圖零估計法
基本思路:對于任何一個出現r次的n元語法,都假設它出出現了次。
其中,為出現r次的n元語法個數,
同理。
可以看出,這個估計法不能直接應用于 的情況。
Kaza平滑技術
待定
模型評估
評估一個模型的好壞,就是看這個模型在測試數據(實際數據)上的表現情況。準確率,回歸率等等。而評價一個語言模型常用的方法有測試數據的概率,或交叉熵,困惑度等等。
語言模型設計的任務就是尋找最接近真實語言的模型。所以,采用用交叉熵或困惑度來評估模型,熵值越小,表示模型越接近真實語言。
交叉熵公式為:
首先是真實詞
的概率,這個值無法獲取。但可以確定的是,它是一個定值。
所以,
的是文本T的概率,W是文本T詞的個數 。
加個2的次冪其實就是困惑度了。所以一般用困惑度來代替交叉熵來評估語言模型。
困惑度: