简单且概括的来说,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