首页 > 编程知识 正文

语言的信息加工模型,语言的生成

时间:2023-05-04 10:04:55 阅读:180223 作者:4655

这里主要介绍两种从我使用过的文本中生成语言模型的方法

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-m64

4、修改srilm/common/makefile.i686-m64
找到:GAWK = /usr/xwdzx/awk
修改为:GAWK = /usr/xwdzx/gawk
5、srilm目录下面执行:make World
6、继续执行make test
7、添加环境变量:

1 export PATH= "$PATH:/home/user/srilm/xwdzx/i686-m64:/home/user/srilm/xwdzx"

添加之后执行ngram-count还是找不到命令,解决方法:i686-m6目录下创建新目录TEST,创建链接,把命令链接到TEST下面

训练语言模型1、需要训练好的语料数据

训练的语料和训练结果是相关的,假如语料是言情小说那么训练的language model也是言情风格的。接下来要对语料进行分词,英文不需要分词,处理标点符号。

2、训练

先从语料库生成n-gram计数文件

1 ngram-count -text test.pos -order 3 -write train.txt.count

生成的train.text.count第一列为n元词,第二列为相应的频率统计,结果如下:

3、接着从上一步的结果计数文件中训练语言模型 1 ngram-count -read train.txt.count -order 3 -lm LM -interpolate -kndiscount

看看结果,一元词有14081个,二元词有63891个,三元词有6644个
以第一个为例:-0.3054161 ! -0.4752966
-0.3054161 :log(概率),以10为底
-0.4752966 :log(回退权重),以10为底

4、利用上一步生成的语言模型计算测试集的困惑度: 1 ngram -ppl test.txt -order 3 -lm LM -debug 1 > result

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 训练语言模型

好的语言模型可以得到更好的解码结果!!!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。