一、語言模型訓練
##功能
#讀取分詞後的text文件或者count文件,然後用來輸出最後彙總的count文件或者語言模型
##參數
#輸入文本:
# -read 讀取count文件
# -text 讀取分詞後的文本文件
#詞典文件:
# -vocab 限制text和count文件的單詞,沒有出現在詞典的單詞替換爲<unk>;如果沒有,所有的單詞將會被自動加入詞典
# -limit-vocab 只限制count文件的單詞(對text文件無效),沒有出現在詞典裏面的count將會被丟棄
# -write-vocab 輸出詞典
#平滑算法
#-interpolate 差值平滑算法
#-kndiscount 折扣平滑算法
#語言模型:
# -lm 輸出語言模型
# -write-binary-lm 輸出二進制的語言模型
# -sort 輸出語言模型gram排序
#訓練模式一: text->count->lm
ngram-count -text $text -vocab ${vocab} -order 4 -sort -tolower -lm ${arpa} -interpolate -kndiscount
#訓練模式二: text->count count->lm
ngram-count -text ${text} -order 4 -sort -tolower -write ${count}
二、語言模型打分
##功能
#用於評估語言模型的好壞,或者是計算特定句子的得分,用於語音識別的識別結果分析。
##參數
#計算得分:
# -order 模型階數,默認使用3階
# -lm 使用的語言模型
# -use-server S 啓動語言模型服務,S的形式爲port@hostname
# -ppl 後跟需要打分的句子(一行一句,已經分詞),ppl表示所有單詞,ppl1表示除了</s>以外的單詞
# -debug 0 只輸出整體情況
# -debug 1 具體到句子
# -debug 2 具體每個詞的概率
#產生句子:
# -gen 產生句子的個數
# -seed 產生句子用到的random seed
ngram -lm ${lm} -order 4 -ppl ${file} -debug 2 > ${ppl}
三、語言模型剪枝
##功能
#用於減小語言模型的大小,剪枝原理參考(http://blog.csdn.net/xmdxcsj/article/details/50321613)
##參數
#模型裁剪:
# -prune threshold 刪除一些ngram,滿足刪除以後模型的ppl增加值小於threshold,越大剪枝剪得越狠
# -write-lm 新的語言模型
ngram -lm ${oldlm} -order 4 -prune ${thres} -prune-lowprobs -write-lm ${newlm}
四、語言模型合併
在合併語言模型之前,可以使用腳本計算出最好的比例,參考srilm的compute-best-mix腳本
##功能
#用於多個語言模型之間插值合併,以期望改善模型的效果
##參數
#模型插值:
# -mix-lm 用於插值的第二個ngram模型,-lm是第一個ngram模型
# -lambda 主模型(-lm對應模型)的插值比例,0~1,默認是0.5
# -mix-lm2 用於插值的第三個模型
# -mix-lambda2 用於插值的第二個模型(-mix-lm對應的模型)的比例,那麼第二個模型的比例爲1-lambda-mix-lambda2
# -vocab 當兩個模型的詞典不一樣的時候,使用該參數限制詞典列表,沒有效果
# -limit-vocab 當兩個模型的詞典不一樣的時候,使用該參數限制詞典列表,沒有效果
ngram -order 4 -lm ${mainlm} -lambda 0.8 -mix-lm ${mixlm} -write-lm ${mergelm}
語言模型在進行合併的過程當中,需要進行計算差值比例,往往通過使用srilm工具提供的compute-best-mix 進行計算最佳的比例(compute-best-mix A_corpus.ppl B_corpus.ppl C_corpus.ppl D_corpus.ppl
)。但是在此之前,最佳比例計算所需的ppl文件是通過使用計算語言模型打分ngram -lm ${lm} -order 4 -ppl ${file} -debug 2 > ${ppl}
,命令行中的 -debug選項爲2.
五、語言模型使用詞典限制
有兩種方法可以根據給定的詞典對模型加以限制
一種是在訓練的時候使用-vocab限制
另外一種是在訓練完成以後,使用srilm的腳本,如下:
##功能
#對已有的語言模型,使用新的字典進行約束,產生新的語言模型
#1.n-grams的概率保持不變
#2.回退概率重新計算
#3.增加新的一元回退概率
##參數
#模型裁剪:
# -vocab 詞典單詞的列表,不包括髮音
# -write-lm 新的語言模型
change-lm-vocab -order 4 -vocab ${vocab} -lm ${oldlm} -write-lm ${newlm}
參考文章:
https://blog.csdn.net/xmdxcsj/article/details/50353689
https://blog.csdn.net/xmdxcsj/article/details/50373554