欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

srilm的安装与使用

时间:2023-06-19
一、简介

简单且概括的来说,SRILM是一个构建和应用统计语言模型的开源工具包,主要用于语音识别,统计标注和切分,以及机器翻译,可运行在UNIX及Windows平台上。(具体概念都能搜索出来,不再赘述,主讲安装和简单使用。)
SRILM的主要目标是支持语言模型的估计和评测。

二、安装

在此,为解决大家下载版本不一致,导致安装出错的问题,提供压缩包下载链接,如下所示:
SRILM:链接:https://pan.baidu.com/s/18T474NLSqlBL_xhMKEivnA
提取码:adsl
TCL:链接:https://pan.baidu.com/s/1E-0E_IrY5rLnfKAepoY5BA
提取码:adsl

在此,大家肯定会疑问SRILM工具包的安装,为什么还要放一个TCL 的压缩包,这是因为我门SRILM的安装需要依赖在TCL工具上(脚本解释工具),因此在安装过程中需要先安装TCL,再安装SRILM。
获取到的两个压缩包都为tar压缩包,下面我们讲述具体的安装步骤:
1、TCL安装

解压:
tar -xf tcl8.7a5-src.tar.gz

然后进入解压后的目录,进入unix目录(目录结构如下图):

没有root权限方法:
执行命令 :./configure

打开Makefile文件,将其中的/usr/local 替换成 /home/个人目录/tcl (以/home/shimengtong/tcl为例)。替换完成后执行命令:make(root权限可以直接运行命令,过程中会出现很多日志,等待运行完。)

运行完成并出现上图所示内容,执行命令:make install

出现上图所示即为成功,/home/个人目录/tcl 目录如下图所示:

2、SRILM安装
在/home/个人目录/ 创建一个srilm的文件夹,在该文件夹下解压SRILM的压缩包。
命令:tar -xf srilm-1.7.1.tar.gz
如图所示

打开Makefile文件,修改参数:
第七行:

修改成:

第十三行:

修改成:

进入common文件夹,如下所示:

找到上述第十三行修改的文件名Makefile.machine.i686-m64 并打开:
该文件第五十四行:

修改成:

回到srilm目录下:
执行命令:make World (接着等待…)

显示上图即编译成功,进行测试:
环境变量:
export PATH=/home/个人目录/srilm/path/bin/:/your/srilm/path/bin:$PATH
测试命令:
make test

测试完成如上图所示。
至此全部安装成功,皆大欢喜。

三、使用方法

(1)小数据训练
  估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度(MIT自然语言处理概率语言模型有相关介绍)。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度。
  1、从语料库中生成n-gram计数文件,即统计词频:
   ngram-count -text train.txt -order 3 -write out.count
   -text指向输入文件,此处为train.txt;

-order指向生成几元的n-gram,即n,此处为3元;-write指向输出文件,此处为out.count,输出内容为:

第一列为n元词,第二列为相应的频率。一元词one在语料库中的频率统计为9次;二元词one two在语料库中的频率统计为3次;三元one two three在语料库中的频率统计为1次。
  
2、从上一步生成的计数文件中训练语言模型:
  ngram-count -read out.count -order 3 -lm out.lm -interpolate -kndiscount
  -read指向输入文件,此处为 out.count
-order与上同
-lm 指向训练好的语言模型输出文件,此处为out.lm
最后两个参数为所采用的平滑方法,-interpolate为插值平滑,-kndiscount为 modified Kneser-Ney 打折法,这两个是联合使用的。
补充:一般我们训练语言模型时,上述两步是合并成一步进行的,上述是为了介绍n-gram语言模型训练细节。
  语言模型europarl.en.lm的文件格式如下,为 ARPA文件格式。
  
  注:概率显示为log(概率)以10为底。

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

参数-ppl为对测试集句子进行评分(logP(T),其中P(T)为所有句子的概率乘积)和计算测试集困惑度的参数
out.ppl为输出结果文件,其他参数同上。

第15行文件dev.txt 的基本信息:2句,4个单词,0个未登录词;
  第16行为评分的基本情况:无0概率;logP(T)=-3.33985,ppl==3.60281, ppl1= 6.83852,均为困惑度。其公式稍有不同,如下:
  ppl=10^{-{logP(T)}/{Sen+Word}};
ppl1=10^{-{logP(T)}/Word}
  其中Sen和Word分别代表句子和单词数。

注:上述步骤可以解决大部分小数据的训练。
上述简单训练,部分内容借鉴 “我爱自然语言处理”:www.52nlp.cn

(2)大数据(BigLM)
对于大文本的语言模型训练不能使用上面的方法,主要思想是将文本切分,分别计算,然后合并。步骤如下:
1、切分数据
split -l 10000 trainfile.txt filedir/
即每10000行数据为一个新文本存到filedir目录下。
2、对每个文本统计词频
make-bath-counts filepath.txt 1 cat ./counts -order 3
其中filepath.txt为切分文件的全路径,可以用命令实现:ls $(echo $PWD)/* > filepath.txt,将统计的词频结果存放在counts目录下
3、合并counts文本并压缩
merge-batch-counts ./counts
不解释
4、训练语言模型
make-big-lm -read …/counts/*.ngrams.gz -lm …/split.lm -order 3
用法同ngram-counts
5、测评(计算困惑度)
ngram -ppl filepath.txt -order 3 -lm split.lm -debug 2 > file.ppl

注:因自有一套训练工具,因此大数据训练部分未曾实验,如有问题请进行详细搜索。
大数据训练部分转自:http://www.leexiang.com/building-a-large-lm-with-srilm

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。