构建语言模型(二):模型训练与评估

本文针对Ngram语言模型的训练过程进行描述,针对神经网络在语言模型中的应用
不在本文范围之内,后续有兴趣可进行研究。

1. 训练工具

  常用的LM训练工具有Srilm,IRSTLM,MITLM,Kenlm等。
  
  SRILM诞生于1995年,由SRI实验室负责开发维护。SRILM用来构建和应用统计语言模型,主要用于语音识别,统计标注和切分,以及机器翻译。其主要目标是支持语言模型的估计和评测。

2. 训练过程

  • 大文本数据切分
split -d -C 100m trainfile.txt filedir/
  • 切分文件列表写入filepath
 ls \$(echo $PWD)/filedir/* > filepath
  • 各文本单词统计词频,合并,去掉低频词,构建词典
 make-batch-counts filepath 1 cat ./counts1 -order 1
 merge-batch-counts ./counts1
 ...(脚本处理count1/*.ngram.gz => vocab1)
  • 各文本统计3gram词频,合并
 make-batch-counts filepath 1 cat ./counts3 -order 3
 merge-batch-counts ./counts3
  • 训练语言模型
 make-big-lm -read counts3/*.ngrams.gz -vocab vocab1 -lm train.lm -order 3 [-interpolate -kndiscount]

训练得到的语言模型还可通过剪枝减小模型大小,或者合并多个语言模型。

  • 语言模型剪枝
ngram -lm \${oldlm} -order 3 -prune \${thres} -write-lm \${newlm}

  其中,-prune threshold 删除一些ngram,满足删除以后模型的ppl增加比例小于threshold,越大剪枝剪得越狠。

  • 语言模型合并
ngram -lm \${mainlm} -order 3 -mix-lm \${mixlm} -lambda 0.8 -write-lm \${mergelm}

  其中, -mix-lm 用于插值的第二个ngram模型,-lambda 主模型(-lm对应模型)的插值比例。

3. 模型评估

语言模型的评估可通过困惑度(preplexity)来进行,基本思想是给测试集的句子赋予较高概率值的语言模型较好。
这里写图片描述
由以上公式可知,困惑度越小,句子概率越大,语言模型越好。

计算ppl方法如下:

ngram -ppl testfile -order 3 -lm train.lm -debug 0 > file.ppl

其中testfile为测试文本, -debug 0 只对整体情况进行困惑度计算,-debug 1 具体到句子, -debug 2具体每个词的概率,最后 将困惑度的结果输出到file.ppl。

4. 参考文章

  1. 大牛讲堂 | 语音专题第二讲,语言模型技术 http://www.leiphone.com/news/201609/Nl14feo83UoL7Sc4.html

  2. xmdxcsj 语言模型 http://blog.csdn.net/xmdxcsj/article/category/5981983

  3. 斯坦福大学自然语言处理第四课 “语言模型(Language Modeling)” http://52opencourse.com/111/%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%AC%AC%E5%9B%9B%E8%AF%BE-%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%EF%BC%88language-modeling%EF%BC%89

猜你喜欢

转载自blog.csdn.net/lujian1989/article/details/53607794