1.簡介算法
SRILM是經過統計方法構建語言模型,主要應用於語音識別,文本標註和切分,以及機器翻譯等。 測試
SRILM支持語言模型的訓練和評測,經過訓練數據獲得語言模型,其中包括最大似然估計及相應的平滑算法;評測是計算測試集的困惑度。其最基礎和最核心的模塊是n-gram模塊,包括兩個工 具:ngram-count和ngram,被用來估計語言模型和計算語言模型的困惑度。spa
2.使用方法.net
(1).語料初始化翻譯
a.數據清洗 b.分詞(以空格劃分) c.將數據分爲訓練集和測試集code
(2).從訓練集中統計n-gramblog
ngram-count -text train.txt -order 3 -write train.count
其中參數-text指向訓練集;-order指向生成幾元的n-gram;-write指向輸出文件,其包含兩列,第一列爲n元詞,第二列爲相應的頻率。博客
(3).訓練語言模型it
ngram-count -read train.count -order 3 -lm train.lm -interpolate -kndiscount
其中參數-read指向(2)中的輸出文件;-order同上;-lm指向語言模型輸出文件,其爲 ARPA文件格式;最後兩個參數爲所採用的平滑方法,-interpolate爲插值平滑,-kndiscount爲 modified Kneser-Ney 打折法,這兩個是聯合使用的。class
(4).測試語言模型
ngram -ppl test.txt -order 3 -lm train.lm > train.lm.ppl
其中test.txt爲測試集;參數-ppl對測試集句子進行評分(logP(T),其 中P(T)爲全部句子的機率乘積)和計算測試集困惑度的參數;train.lm.ppl爲輸出結果文件;其餘參數同上。輸出文件結果以下:
file devtest2006.en: 2000 sentences, 52388 words, 249 OOVs
0 zeroprobs, logprob= -105980 ppl= 90.6875 ppl1= 107.805
第一行文件devtest2006.en的基本信息:2000句,52888個單詞,249個未登陸詞;
第二行爲評分的基本狀況:無0機率;logP(T)=-105980,ppl==90.6875, ppl1= 107.805,均爲困惑度。
參考博客
https://blog.csdn.net/zhoubl668/article/details/8365716
3.平滑方法說明
在訓練語言模型中,每每訓練語料只是輸入空間中的一個採樣,也就是語料不足以包含全部狀況的ngram,這樣就會出現0機率的ngram。爲了解決這種問題,就須要用到打折(discounting)或叫平滑(smoothing)方法。經常使用回退(backoff)和插值(interpolate)法實現平滑。
(1).回退
(2).插值