当前位置:   article > 正文

基于srilm的语言模型训练简介(一)_利用srilm构建基于单词的语言模型

利用srilm构建基于单词的语言模型

一、语言模型训练

##功能
#读取分词后的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} 
ngram-count -read ${count}  -order 4 -wbdiscount -interpolate -debug 2 -lm ${arpa}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

二、语言模型打分

##功能
#用于评估语言模型的好坏,或者是计算特定句子的得分,用于语音识别的识别结果分析。
##参数
#计算得分:
#  -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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

三、语言模型剪枝

##功能
#用于减小语言模型的大小,剪枝原理参考(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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

四、语言模型合并

在合并语言模型之前,可以使用脚本计算出最好的比例,参考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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

语言模型在进行合并的过程当中,需要进行计算差值比例,往往通过使用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} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

参考文章:
https://blog.csdn.net/xmdxcsj/article/details/50353689
https://blog.csdn.net/xmdxcsj/article/details/50373554

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/357128
推荐阅读
相关标签
  

闽ICP备14008679号