欢迎体验标贝语音开放平台 地址:https://ai.data-baker.com/#/?source=qaz123 (注:填写邀请码hi25d7,每日免费调用量还可以翻倍)
简单且概括的来说,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