当前位置:   article > 正文

srilm建立语言模型_srilm工具来生成语言模型

srilm工具来生成语言模型

reference: 

http://blog.csdn.net/zhoubl668/article/details/8365716

测试数据可以从这个网站下载: http://www.statmt.org/europarl/  ,  我测试下载的是 parallel corpus Bulgarian-English


1.生成n-gram计数文件

./ngram-count -text ./test/europarl-v7.bg-en.en -order 3 -write ./test/europarl-v7.bg-en.en.counts

note: -text 表示输入的文件,就是我们的所有语音对应的文本文件,最好是提前做一个数据清理(把标点符号去掉,全都转化为大写或者小写)

-order 表示生成的是n-gram模型,词的长度最大是3

-write 写入一个计数文件

下面是生成的counts文件中的几行:

Uncooperative   1  #表示该词在文件中出现了一次
Uncooperative countries 1   <span style="font-family: Menlo;">#表示该词在文件中出现了一次</span>
Uncooperative countries of      1
propagate       6   #表示该词在文件中出现了6次
propagate transplantation       1
propagate transplantation and   1
2.利用生成的n-gram计数文件,生成语言模型:

./ngram-count -read ./test/europarl-v7.bg-en.en.counts -order 3 -lm ./test/europarl-v7.bg-en.en.lm -interpolate -kndiscount

note: -read 表示读入的计数文件 

-lm 是需要生成导出的lm文件

-interpolate 是插值平滑

- kndiscount  是modified kneser-ney 打折法, 跟插值平滑联合使用,具体什么算法还不是很了解(???)

下面是生成的lm文件中的前几行:

\data\
ngram 1=115075    #表示一元词的个数
ngram 2=1477406   #表示二元词的个数
ngram 3=885946

\1-grams:
-5.880136       "A      -0.1279694  
-6.049498       "Adapting       -0.1279694
-6.049498       "America        -0.1279694
-6.049498       "BRICS” -0.1279694
-6.049498       "Competitiveness        -0.1279694
-6.049498       "County -0.1279694
-6.049498       "Don't  -0.1279694
-6.049498       "Ecobales”      -0.1279694
-5.880136       "European       -0.1279694
-6.049498       "Garden -0.1279694
-6.049498       "Health -0.1279694
-6.049498       "How    -0.1279694

上面每一行都是三列, 第一列表示的是  "A  出现的概率(注意这个地方没有去掉标点符号,而词与词之间的分割是以空格来分的), 取以10为底的对数.

可以验证一下,"A  在counts中的次数是2    一元的总次数是每一个词出现的次数的和total .     math.log10(2./total) 就是第一列的结果

第三列表示的是 回退权重(backoff weight)w,然后 也是 math.log10(w), 具体怎么计算暂时不是很清楚(???)

3. 利用上一步生成的语言模型计算测试集的困惑度:(???)

这个是对原来的集合计算的一个困惑度:

./ngram -ppl ./test/europarl-v7.bg-en.en -order  3 -lm ./test/europarl-v7.bg-en.en.lm > ./test/europarl-v7.bg-en.en.ppl

  1. file ./test/europarl-v7.bg-en.en: 406879 sentences, 9.8864e+06 words, 0 OOVs
  2. 0 zeroprobs, logprob= -1.76278e+07 ppl= 51.5887 ppl1= 60.6785

可以看到集合中没有未登陆词,因为我们是用这个集合生成的

0 zeroprobs , 没有0概率, 没有句子没有出现过

logprob ,  log10(p(T)) , p(T) 所有句子的概率乘积

ppl, ppl1:  均未困惑度,不知道怎么计算的(???)


下面是eesen中swbd计算语言模型过程:

  1. # Trigram language model
  2. ngram-count -text $dir/train.gz -order 3 -limit-vocab -vocab $dir/wordlist \
  3. -unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o3g.kn.gz
  4. echo "PPL for SWBD1 trigram LM:"
  5. ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout
  6. ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/3gram.ppl2

  1. ngram-count -text $dir/train.gz -order 4 -limit-vocab -vocab $dir/wordlist \
  2. -unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o4g.kn.gz
  3. echo "PPL for SWBD1 4gram LM:"
  4. ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout
  5. ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/4gram.ppl2

可以对比参考一下, 上面还有好多问题,好多不明白的地方,弄懂了再更新。





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

闽ICP备14008679号