語言模型srilm基本用法


目錄:

一基本訓練

二語言模型打分

三語言模型剪枝

四語言模型合並

五語言模型使用詞典限制

一、基本訓練

#功能 
讀取分詞后的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

這個一般都是在訓練的時候加詞典,很少在訓練之后加.

 


免責聲明!

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



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