赞
踩
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
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
可以验证一下,"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
- file ./test/europarl-v7.bg-en.en: 406879 sentences, 9.8864e+06 words, 0 OOVs
- 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计算语言模型过程:
- # Trigram language model
- ngram-count -text $dir/train.gz -order 3 -limit-vocab -vocab $dir/wordlist \
- -unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o3g.kn.gz
- echo "PPL for SWBD1 trigram LM:"
- ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout
- ngram -unk -lm $dir/sw1.o3g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/3gram.ppl2
- ngram-count -text $dir/train.gz -order 4 -limit-vocab -vocab $dir/wordlist \
- -unk -map-unk "<unk>" -kndiscount -interpolate -lm $dir/sw1.o4g.kn.gz
- echo "PPL for SWBD1 4gram LM:"
- ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout
- ngram -unk -lm $dir/sw1.o4g.kn.gz -ppl $dir/heldout -debug 2 >& $dir/4gram.ppl2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。