目錄:
一、基本訓練
#功能 讀取分詞后的text文件或者count文件,然后用來輸出最后匯總的count文件或者語言模型 #參數 輸入文本: -read 讀取count文件 -text 讀取分詞后的文本文件 詞典文件: -vocab 限制text和count文件的單詞,沒有出現在詞典的單詞替換為<unk>;如果沒有,所有的單詞將會被自動加入詞典 -limit-vocab 只限制count文件的單詞(對text文件無效),沒有出現在詞典里面的count將會被丟棄 -write-vocab 輸出詞典 語言模型: -lm 輸出語言模型 -write-binary-lm 輸出二進制的語言模型 -sort 輸出語言模型gram排序
有兩種訓練方法,分別如下:
#choice1: text->count->lm #ngram-count -text $text -vocab ${vocab} -order 2 -sort -tolower -lm ${arpa} #choice2: text->count count->lm #ngram-count -text ${text} -order 2 -sort -tolower -write ${count}
cat data/corpus/* | tools/SRILM/ngram-count -vocab dict/aicar.v9.wlist -text - -order 3 -debug 1 -interpolate -kndiscount -gt3min 1 -lm lm/aicar_music.v7.13.tg.lm &
二、語言模型打分
#功能 用於評估語言模型的好壞,或者是計算特定句子的得分,用於語音識別的識別結果分析。 #參數 計算得分: -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 2 -ppl ${file} -debug 1 > ${ppl}
例:
./tools/SRILM/ngram -debug 2 -order 4 -lm lm/final/$name.pru1e-13.fg.lm -ppl $fie.wseg > ppltest/ppl/$p.aicar0.35.pru1e-13.fg.ppl
三、語言模型剪枝
#功能 用於減小語言模型的大小,剪枝原理參考(http://blog.csdn.net/xmdxcsj/article/details/50321613) #參數 模型裁剪: -prune threshold 刪除一些ngram,滿足刪除以后模型的ppl增加值小於threshold,越大剪枝剪得越狠 -write-lm 新的語言模型 ngram -lm ${oldlm} -order 2 -prune ${thres} -write-lm ${newlm}
例:
./tools/SRILM/ngram -debug 1 -order 4 -lm lm/final/$name.fg.lm -prune 0.0000000000001 -write-lm lm/final/$name.pru1e-13.fg.lm &
四、語言模型合並
#功能 用於多個語言模型之間插值合並,以期望改善模型的效果 #參數 模型插值: -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 -lm ${mainlm} -order 2 -mix-lm ${mixlm} -lambda 0.8 -write-lm ${mergelm}
在合並語言模型之前,可以使用腳本計算出最好的比例,參考srilm的compute-best-mix腳本 #這個后面算下,如何求得最好的比例
五、語言模型使用詞典限制
有兩種方法可以根據給定的詞典對模型加以限制
一種是在訓練的時候使用-vocab限制
另外一種是在訓練完成以后,使用srilm的腳本,如下:
#功能 對已有的語言模型,使用新的字典進行約束,產生新的語言模型 1.n-grams的概率保持不變 2.回退概率重新計算 3.增加新的一元回退概率 #參數 模型裁剪: -vocab 詞典單詞的列表,不包括發音 -write-lm 新的語言模型 change-lm-vocab -vocab ${vocab} -lm ${oldlm} -write-lm ${newlm} -order 2
這個一般都是在訓練的時候加詞典,很少在訓練之后加.