这里主要介绍两种从我使用过的文本中生成语言模型的方法
1 .站点:在Sphinx上上传文件并生成相应的语言模型。 应该注意的是,文件不会太大。 网站容易报告504错误,所以贴下图吧。 愚蠢的操作方法:
使用SRILM训练语言模型
SRILM的基本用法1、从语料库生成n-gram计数文件:1ngram-count-text train.txt-order3- write train.txt.count
-text指向输入文件
-order是指生成四元数的n-gram,即n
-write指的是输出文件
2、从上一步生成的计数文件中训练语言模型。 1 ngram-count-read train.txt.count-order3- lmlm-interpolate-kn discount-read指的是输入文件,是上一个步骤的输出文件
-order和上面一样
-lm指的是训练好的语言模型输出文件
最后两个参数是采用的平滑方法,-interpolate是插值平滑,-kndiscount是修改的kne ser-ney折现法,两者并用
3、利用前一步骤生成的语言模型计算测试集困惑度:1ngram-ppl test.txt-order3- lmlmresult-ppl对测试集语句评分(logp(t )其中p
result是输出结果文件
其他参数相同。
如果要单独对每个句子评分,请使用以下命令:
1 ngram-ppl test.txt-order3- lmlm-debug1result安装SRILM首先安装tcl
1、官网下载TCL8.6.6- src.tar.gz (http://www.TCL.tk/software/tcltk/download.html )
2、解压缩至/home/user目录
3、cd /tcl8.6.6/unix/
4、化妆
5、sudo make install
安装SRILM1,从官方网站下载http://www.speech.Sri.com/projects/srilm/download.html
2、/home/user/srilm/
3、修改化妆文件:
134 # srilm=/home/WM/srilmsrilm=/home /
wm/srilm #MACHINE_TYPE := $(shell $(SRILM)/sxwdzx/machine-type) MACHINE_TYPE := i686-m644、修改srilm/common/makefile.i686-m64
找到:GAWK = /usr/xwdzx/awk
修改为:GAWK = /usr/xwdzx/gawk
5、srilm目录下面执行:make World
6、继续执行make test
7、添加环境变量:
添加之后执行ngram-count还是找不到命令,解决方法:i686-m6目录下创建新目录TEST,创建链接,把命令链接到TEST下面
训练的语料和训练结果是相关的,假如语料是言情小说那么训练的language model也是言情风格的。接下来要对语料进行分词,英文不需要分词,处理标点符号。
2、训练先从语料库生成n-gram计数文件
生成的train.text.count第一列为n元词,第二列为相应的频率统计,结果如下:
看看结果,一元词有14081个,二元词有63891个,三元词有6644个
以第一个为例:-0.3054161 ! -0.4752966
-0.3054161 :log(概率),以10为底
-0.4752966 :log(回退权重),以10为底
ppl为对测试集句子进行评分(logP(T),其中P(T)为所有句子的概率乘积)和计算测试集困惑度的参数,结果如下:
0 zeroprobs, logprob= -61.72443 ppl= 58.01698 ppl1= 65.37691分别表示:
无0概率;logP(T)=-105980,ppl==90.6875, ppl1= 107.805,均为困惑度。
但公式稍有不同,如下:
ppl=10^{-{logP(T)}/{Sen+Word}}; ppl1=10^{-{logP(T)}/Word}
其中Sen和Word分别代表句子和单词数
第二种方法是copy过来的, 原地址是:SRILM 训练语言模型
好的语言模型可以得到更好的解码结果!!!