標籤:str 兩種 努力 span log 評價 線性 gpo 條件
語言模型
p(S) 就是語言模型,即用來計算一個句子 S 機率的模型。
那麼,如何計算呢?最簡單、直接的方法是計數後做除法,即最大似然估計(Maximum Likelihood Estimate,MLE),如下:
其中,count(w1,w2,…,wi?1,wi) 表示詞序列(w1,w2,…,wi?1,wi) 在語料庫中出現的頻率。這裡面臨兩個重要的問題:資料稀疏嚴重和參數空間過大,導致無法實用。
實際中,我們一般較常使用的是 N 元文法模型(N-Gram),它採用了馬爾科夫假設(Markov Assumption),即認為語言中每個單詞只與其前面長度 N-1 的上下文有關。
- 假設下一個詞的出現依賴它前面的一個詞,即 bigram,則有:
- 假設下一個詞的出現依賴它前面的兩個詞,即 trigram,則有:
那麼,我們在面臨實際問題時,如何選擇依賴詞的個數,即 N 呢?
- 更大的 n:對下一個詞出現的約束資訊更多,具有更大的辨別力;
- 更小的 n:在訓練語料庫中出現的次數更多,具有更可靠的統計資訊,具有更高的可靠性。
理論上,n 越大越好,經驗上,trigram 用的最多,儘管如此,原則上,能用 bigram 解決,絕不使用 trigram。
從本質上說,這種統計語言模型描述的是有限狀態的正則文法語言,而自然語言是不確定性語言,因此與真實語言差異較大,表達能力有限,尤其無法較好的處理長距離依賴語言現象。但是,其抓住了自然語言中的局部性約束(Local Constrain)性質,因此該模型在實際應用中取得了較大的成功。
言模型效果評估
語言模型構造完成後,如何確定其好壞呢?目前主要有兩種評價方法:
- 實用方法:通過查看該模型在實際應用(如拼字檢查、機器翻譯)中的表現來評價,優點是直觀、實用,缺點是缺乏針對性、不夠客觀;
- 理論方法:迷惑度/困惑度/混亂度(preplexity),其基本思想是給測試集賦予較高機率值的語言模型較好,公式如下:
由公式可知,迷惑度越小,句子機率越大,語言模型越好。
資料稀疏與平滑技術
大規模資料統計方法與有限的訓練語料之間必然產生資料稀疏問題,導致零機率問題,符合經典的 zip’f 定律。如 IBM Brown:366M 英語語料訓練 trigram,在測試語料中,有14.7% 的 trigram 和 2.2% 的bigram 在訓練語料中未出現。
為瞭解決資料稀疏問題,人們為理論模型實用化而進行了眾多嘗試與努力,誕生了一系列經典的平滑技術,它們的基本思想是“降低已出現 n-gram 的條件機率分布,以使未出現的 n-gram 條件機率分布非零”,且經資料平滑後一定保證機率和為1,資料平滑前後如所示:
- Add-one(Laplace) Smoothing
加一平滑法,又稱拉普拉斯定律,其保證每個 n-gram 在訓練語料中至少出現 1次,以 bigram 為例,公式如下:
其中,V 是所有 bigram 的個數。
在V>>c(wi?1,wi)時,即訓練語料庫中絕大部分 n-gram 未出現的情況(一般都是如此),Add-one Smoothing後有些“喧賓奪主”的現象,效果不佳。
一種簡單的改進方法是 add-δ smoothing (Lidstone, 1920; Jeffreys, 1948)。δ 是一個小於 1 的數。
其基本思想是利用頻率的類別資訊對頻率進行平滑。如所示:
其中,Nc表示出現次數為 c 的 n-gram 的個數。調整出現頻率為 c 的 n-gram 折扣頻率為 c?:
但是,對於較大的 c,可能出現Nc+1=0 或者 Nc>Nc+1的情況,反而使得模型品質變差,如所示:
直接的改進策略就是“對出現次數超過某個閾值的 gram 不進行平滑,閾值一般取8~10。
不管是 Add-one,還是 Good Turing 平滑技術,對於未出現的 n-gram 都一視同仁,難免存在不合理性(事件發生機率存在差別),所以這裡再介紹一種線性插值平滑技術,其基本思想是將高階模型和低階模型作線性組合,利用低元 n-gram 模型對高元 n-gram 模型進行線性插值。因為在沒有足夠的資料對高元 n-gram 模型進行機率估計時,低元 n-gram 模型通常可以提供有用的資訊。
其基本思想是如果 n-gram 出現頻率為 0,就回退到(n-1)-gram 近似求解。
統計語言模型