SRILM是一个应用比较广泛的统计和分析语言模型的工具,另外,还有 Kenlm,IRSTLM,MITLM等语言模型工具。本文就SRILM的安装和使用做简单的介绍。
SRILM的主要目标是支持语言模型的估计和评测。估计是从训练数据(训练集)中得到一个模型,包括最大似然估计及相应的平滑算法;而评测则是从测试集中计算其困惑度。其最基础和最核心的模块是n-gram模块,这也是最早实现的模块,包括两个工具:ngram-count和ngram,相应的被用来估计语言模型和计算语言模型的困惑度。
http://www.speech.sri.com/projects/srilm/download.html
在此网站上下载,需要填写个人信息后,点击accept进行下载。
tar zxvf srilm-1.7.2.tar.gz
在安装SRILM之前首先通过tclsh命令检查是否安装tcl工具(tcl脚本解释工具)未安装的情况,需要下载编译:
http://www.tcl.tk/software/tcltk/download.html(下载地址)
tar zxvf tcl8.6.8-src.tar.gz
./configure
make
make install
在解压后的根目录下有INSTALL文件,其内容为安装说明,在此不再做内容解释,根据其所述,进行编译安装。
修改根目录下的Makefile:
第七行:#SRILM = /home/speech/stolcke/project/srilm/devel修改为SRILM = $(PWD)
第十三行:include $(SRILM)/common/Makefile.common.variables修改为include $(SRILM)/common/Makefile.machine.i686-m64
此处需要根据自己的设备进行相应的配置,在common文件夹下有非常多的相应设备系统文件,可以使用uname -a命令来查看自己的设备信息,在sbin/machine_type文件可以看到具体选择脚本,我的是X86_64,因此可以选用Makefile.machine.i686-m64。
make World
在编译的过程中,根据自己电脑的软件安装情况可能会出现依赖软件未安装的情况,根据提示进行安装就可以继续执行了。
export PATH=/your/srilm/path/bin/:/your/srilm/path/bin:$PATH
make test
执行完成后,可以在./utils/test/output/下查看执行结果。下面我们就可以使用SRILM来建立语言模型了。
由于计算机内存的限制,将处理的文件分为小文件和大文件两种:
词频统计:
ngram-count -text train.txt -order 3 -write train.count
模型训练:
ngram-count -read train.txt.count -order 3 -lm train.lm -interpolate -kndiscount
-read指向输入文件,为上一步的输出文件
-order与上同
-lm指向训练好的语言模型输出文件
最后两个参数为所采用的平滑方法,-interpolate为插值平滑,-kndiscount为 modified Kneser-Ney 打折法,这两个是联合使用的
计算困惑度:
ngram -ppl test.txt -order 3 -lm LM > result
-ppl为对测试集句子进行评分(logP(T),其中P(T)为所有句子的概率乘积)和计算测试集困惑度的参数
result为输出结果文件
其他参数同上。
切分:
split -l line_num_of_file inputfile outputfiledir /outputfie_prefix
例:split -l 10000 train.txt filedir/
具体split的使用方法可以自己查询。
单个文件词频统计:
make-batch-counts file-list 1 cat counts -order 3 -sort
file-list是个文件名,这个文件存储了你分割大文件而得到的小文件的文件名;5的意识是每5个小文件用于一次ngram-count训练,获得对应的count文件;cat 是用于过滤输出的脚本名,我们这里直接输出;后面的是传给ngram-count的参数,可以自己根据需要写。
合并结果:
merge-batch-counts [ -l N ] counts [ filename-list ]
例:merge-batch-counts ./counts
将counts目录下的所有文件合并成一个文件,如果有些文件不用参与合并,可以在最后添加一个filename-list,只有在filename-list里面出现的文件才会被用于合并;-l N参数之处,一次同时合并N个文件。
训练语言模型:
make-big-lm -read ../counts/*.ngrams.gz -lm ../split.lm -order 3
用法同ngram-count
计算困惑度:
ngram -ppl filepath.txt -order 3 -lm split.lm -debug 2 > file.ppl
语料必须是分好的词,即用空格隔开,英文的书写都是用空格隔开的,但中文的书写各个字词之间并未空格,因此需要使用分词工具将文本自动分词,中文自动分词也是技术活,属于NLP范畴,常用的分词工具有:jieba、SnowNLP、pynlpir,thulac等,可以自己下载使用。