AI大語音(十)——N-gram語言模型(深度解析)


掃描下方“AI大道理”,選擇“關注”公眾號

上一專題搭建了一套GMM-HMM系統,來識別連續0123456789的英文語音。
但若不是僅針對數字,而是所有普通詞匯,可能達到十幾萬個詞,解碼過程將非常復雜,識別結果組合太多,識別結果不會理想。因此只有聲學模型是完全不夠的,需要引入語言模型來約束識別結果。讓“今天天氣很好”的概率高於“今天天汽很好”的概率,得到聲學模型概率高,又符合表達的句子。

 

1 語言模型
真面目

 

定義:對於語言序列詞ω1,ω2,ω3,...,ωn,語言模型就是計算該詞序列的概率,即P(ω1,ω2,ω3,...,ωn)。

本質:語言模型是對語句的概率分布建模。

通俗:語言模型用來計算一個句子出現的概率,也是判斷一句話是否合理的概率。

公式:給定一個詞序列S=(w1,w2,w3......wn),它的概率表示為:

其中:

例子:給定一個詞序列S=(無數渺小的思考填滿了一生)

其中:


問題:
自由參數問題
:模型的自由參數是隨着字符串長度的增加而指數級暴增的,這使我們幾乎不可能正確的估計出這些參數;

零概率問題(OOV問題):每一個w都具有V種取值,這樣構造出了非常多的詞對,但實際中訓練語料是不會出現這么多種組合的,那么依據最大似然估計,最終得到的概率實際是很可能是0。

 

2 N-gram語言模型
近似

 

為了解決自由參數數目過多的問題,引入了馬爾科夫假設:隨意一個詞出現的概率只與它前面出現的有限的n-1個詞有關。基於上述假設的統計語言模型被稱為N-gram語言模型。

即用前N-1個詞作為歷史,估計當前(第N個)詞。

公式:給定一個詞序列S=(w1,w2,w3......wn),它的概率表示為:

其中:

 

一般用<s>和</s>來標記開頭結尾,沒有在vocabulary中的詞(OOV, out of vocabulary),標記為<UNK>。

當n=1時,即一個詞的出現與它周圍的詞是獨立,稱為unigram。

當n=2時,即一個詞的出現僅與它前面的一個詞有關時,稱為bigram。

當n=3時,即一個詞的出現僅與它前面的兩個詞有關,稱為trigram。

自由參數的數量級是n取值的指數倍。

從模型的效果來看,理論上n的取值越大,效果越好。但隨着n取值的增加,效果提升的幅度是在下降的。同時還涉及到一個可靠性和可區別性的問題,參數越多,可區別性越好,但同時單個參數的實例變少從而降低了可靠性。

 

3 數據平滑算法

為了解決零概率問題,即由於語料的稀疏性,有些詞序列找不到,需要對數據進行平滑。

(1)加一平滑(Add-one Smoothing)

思想:將每個計數加一,從而使得任何詞序列都有計數,這樣的話就可以把本來概率為0結果變為一個很小的值。為了保證所有實例的概率總和為1,將分母增加實例的種類數;即:

優點:算法簡單,解決了概率為0的問題

缺點:Add-one給訓練語料中沒有出現過的 N-grams 分配了太多的概率空間,認為所有未出現的N-grams概率相等也有點不合理。

(2)古德-圖靈平滑(Good-turing Smoothing)

思想:用你看見過一次的事情(Seen Once)估計你未看見的事件(Unseen Events),並依次類推,用看見過兩次的事情估計看見過一次的事情等等。

對於任何一個發生r次的n-gram,都假設它發生r*次,即:

則在樣本中出現r事件的概率為:

(3)回退平滑(Katz smoothing)

思想:又稱為Back-off 回退,是對古德圖靈模型的改進。若N階語言模型存在,直接使用打折后的概率(常使用Good-turing算法進行打折);若高階語言模型不存在,將打折節省出的概率量,依照N-1階的語言模型概率進行分配,依此類推。

 

(4)插值平滑(Jelinek-Mercer smoothing)

思想:用線性差值把不同階的 N-gram 結合起來,這里結合了 trigram,bigram 和 unigram。用 lambda 進行加權。

其中,

(5)Witten-Bell smoothing

思想:如果在訓練語料中對應的n元文法出現次數大於1,則使用高階模型;否則,后退到低階模型。

(6)Kneser-Ney Smoothing

思想:對於一個詞,如果它在語料庫中出現更多種不同上下文(context) 時,它可能應該有更高的概率。

為了刻畫這種想法,定義接續概率(continuation probability):

 

4 困惑度
PPL

N-gram語言模型與評價方法:

實用方法:通過查看該模型在實際應用(如拼寫檢查、機器翻譯)中的表現來評價,優點是直觀、實用,缺點是缺乏針對性、不夠客觀。

理論方法:困惑度(preplexity),其基本思想是給測試集的句子賦予較高概率值的語言模型較好。

Perplexity另一種表達:

理解:句子越好(概率大),困惑度越小,也就是模型對句子越不困惑。

困惑度->困難度,求出來的困惑度值相當於一個虛擬詞典大小,下一個詞就從這個虛擬詞典中選。值越大,選擇就越多,選對就越困難,說明語言模型訓練的就越差。值越小,選擇就越少,選對的可能性就越大,越簡單,說明語言模型訓練的越好。

源頭

熵(entropy):又稱自信息,描述一個隨機變量的不確定性的數量,熵越大,不確定性越大,正確估計其值的可能性越小。越不確定的隨機變量越需要大的信息量以確定其值。

 其中,p(x)表示x的分布概率。

相對熵(relativeentropy):又稱KL距離,Kullback-Leibler divergence。

衡量相同事件空間里兩個概率分布相對差距的測度,當p=q的時候,相對熵為0,當p和q差距變大時,交叉熵也變大。

 

其中,p(x)和q(x)代表x的兩種概率分布。

交叉熵(crossentropy):衡量估計模型和真實概率分布之間的差異。

 

困惑度(perplexity):困惑度是交叉熵的指數形式。

 

 

5 語言模型搭建
語言模型訓練

 

語言模型訓練流程:

系統文件:

步驟一:Witten-Bell smoothing算法與實現

 

步驟二:實現ngram計數

步驟三:詞頻統計count

 

分別對minitrain2.txt和minitrain.txt文件進行count,生成p1a.counts和p1b.counts文件。其中minitrain2.txt和minitrain.txt語料大小不一樣,

​minitrain2.txt,語料已經分好詞,共10個句子,minitrain.txt,語料已經分好詞,共100個句子。

 

步驟四:語言模型訓練與測試

平滑算法使用Witten-Bell smoothing。

測試文件使用test2.txt。

 

訓練3-gram模型與測試結果:

 

6 SRILM
語言模型工具

 

 

上面搭建的系統進行了詞頻統計和n-gram模型訓練與測試,針對相同數據使用SRILM語言模型工具包進行對比。

步驟一:詞頻統計

詞頻統計的對象是minitrain2.txt,語料已經分好詞,共10個句子。

詞頻統計的對象是minitrain.txt,語料已經分好詞,共100個句子。

 

其中,ngram-count是srilm的命令,詞頻統計的對象是minitrain2.txt和minitrain.txt,order3表示3-gram語言模型,生成train2.count文件和train.count。

(與搭建的系統統計結果看似不一樣,實際上只是排序不一樣,上面的系統按照字典里面的詞順序進行排序,使用SRILM進行統計按照文本里面的詞順序進行排序。)

 

步驟二:語言模型訓練

 

100個句子的語言模型訓練。分別使用Kneser-Ney平滑算法、witten bell平滑算法、Good-Turing平滑算法進行數據平滑。

得到3個模型:

10個句子的語言模型訓練,使用Kneser-Ney平滑算法進行語言模型訓練命令:

問題:出現error。

原因:其中一個修改后的KneserNey折扣為負,數據集太少,發現高階n-gram沒有出現統計次數。

使用witten bell平滑算法進行語言模型訓練命令:

問題:3-grams只有9組數據

原因:丟棄281個3-gram,因為折扣為零。

使用Good-Turing平滑算法進行語言模型訓練命令:

 

步驟三:語言模型評價(計算 PPL)

-ppl為對測試集句子進行評分(logP(T),其中P(T)為所有句子的概率乘積)和計算測試集困惑度的參數。

10個句子的語言模型,測試文件使用的是  text2.txt文件,測試模型使用witten bell平滑算法訓練和Good-Turing平滑算法訓練。

100個句子的語言模型,測試文件使用的是  text2.txt文件,測試模型使用Kneser-Ney平滑算法訓練、witten bell平滑算法訓練、Good-Turing平滑算法訓練。

ppl與ppl1的區別:

ppl考慮詞數和句子數(i.e. 考慮</s>); PPL1只考慮詞數。


 

ppl = 10^(-logprob / (words - OOVs + sentences))


 

ppl1 = 10^(-logprob / (words - OOVs))

步驟四:語言模型剪枝(可選)


 

用於減小語言模型的大小。


 

-prune threshold 刪除一些ngram,滿足刪除以后模型的ppl增加值
小於threshold,越大剪枝剪得越狠。

 

7 總結

(RNN語言模型很好,可以對很長的上下文關系進行建模。但是它在語音識別中不常用。因為用RNN語言模型的話,解碼出每一個詞都得現算語言模型分數,效率不高。它一般用在二次解碼rescore中。

N-gram可以編譯成加權有限狀態轉換器,可以看成一種有向圖。這樣解碼就變成了在圖中搜索的過程,比較高效。所以語音識別一般用的還是N-gram)

 

語言模型如何配合聲學模型來提高整個識別結果?

這就是解碼器所做的事情。

 

——————

淺談則止,細致入微AI大道理

掃描下方“AI大道理”,選擇“關注”公眾號

           歡迎加入!

    

下期預告

 

AI大語音(十一)——WFST解碼器

 

 

往期精彩回顧

 

AI大語音(一)——語音識別基礎

AI大語音(二)——語音預處理

AI大語音(三)——傅里葉變換家族

AI大語音(四)——MFCC特征提取

AI大語音(五)——隱馬爾科夫模型(HMM)

AI大語音(六)——混合高斯模型(GMM)

AI大語音(七)——基於GMM的0-9語音識別系統

AI大語音(八)——GMM-HMM聲學模型

AI大語音(九)——基於GMM-HMM的連續語音識別系統

 

 

 

                                                                                    留你心,言你想

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM