安装
SRILM是一个统计和分析语言模型的工具,提供一些命令行工具,如ngram,ngram-count,可以很方便的统计NGRAM的语言模型。
1、安装依赖包
c/c++ compiler,GNU make,GNU gawk,GNU gzip,bzip2,P7zip,csh,Tcl。
Tcl 可嵌入式脚本语言。用于脚本编程和测试,这里是为了SRILM的测试。
下载地址 http://www.tcl.tk/software/tcltk/
解压 进入unix目录
./configure --prefix=/usr/local
make
make install
完成测试
make test
或命令行输入
tclsh
% exit
2、安装srilm
1、下载SRILM压缩包
下载链接为http://www.speech.sri.com/projects/srilm/download.html 当前版本为1.7.2,创建安装的目录,假设安装目录为:/home/xxx/srilm-1.7.2
2、修改Makefile文件(srilm-1.7.2目录下)
(a) 找到此行: # SRILM = /home/speech/stolcke/project/srilm/devel,另起一行输入srilm的安装路径,SRILM = /home/xxx/srilm-1.7.2
(b) 找到此行:MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type),在其前加#注释掉,并另起一行输入: MACHINE_TYPE := i686-gcc4。
注:此行告诉Makefile之后要使用/home/xxx/srilm-1.7.2/common /Makefile.machine.i686-gcc4文件中的配置。通过 uname -m 命令可以查询机器架构是i686,如果系统是 64 位的,请改为 i686-m64,同时也可能需要修改相应的 sbin/machine-type
3、修改上述Makefile中所提到的/home/xxx/srilm-1.7.2/common /Makefile.machine.i686-gcc4文件
(a)找到此行: #GCC_FLAGS = -mtune=pentium3 -Wall -Wno-unused-variable -Wno-uninitialized,修改为 GCC_FLAGS = -mtune=generic -Wall -Wno-unused-variable -Wno-uninitialized
若CPU为AMD 64位,则可能需要修改为GCC_FLAGS = -march=athlon64 -m64 -Wreturn-type -Wimplicit
(b) 找到:TCL_INCLUDE =
TCL_LIBRARY =
修改为:
TCL_INCLUDE = -I /user/local/include
TCL_LIBRARY = -L /user/local/lib/tcl8.6
注:TCL配置须保证tcl已安装,若未安装,可添加 #NO_TCL = X
(c) 找到:GAWK = /usr/bin/awk
修改为:
GAWK = /usr/bin/awk
注:各系统中(b)(c)的步骤安装情况可能不同,查找软件的安装位置,可使用命令:which is 个gwak等
4、编译工具
返回安装目录/home/xxx/srilm-1.7.2
在命令行输入:
gnumake World
或 make World (if the GNU version is the system default)
顺利的话,srilm就编译通过了。如果出现问题,很可能就是相应的依赖工具没有装完全。
5、测试工具
在安装目录/home/xxx/srilm-1.7.2下,运行
gnumake test
需要等待一段时间,如果出现都是 IDENTICAL,就证明 SRILM 编译成功了。运行顺利的话,会出现如下类似结果
*** Running test select-vocab ***
7.68user 0.06system 0:06.96elapsed 111%CPU (0avgtext+0avgdata 51728maxresident)k
0inputs+1944outputs (0major+12883minor)pagefaults 0swaps
select-vocab: stdout output IDENTICAL.
select-vocab: stderr output IDENTICAL.
make[1]: Leaving directory `/home/xxx/srilm/utils/test'
6、编译优化版本
在安装目录/home/xxx/srilm-1.7.2下,运行
gnumake World OPTION=_c
gnumake cleanest OPTION=_c
其中OPTION有多种参数可选择
OPTION=_c "compact" data structures
OPTION=_s "short" count representation
OPTION=_l "long long" count representation
OPTION=_g debuggable, non-optimized code
OPTION=_p profiling executables
使用
一、小数据
假设有去除特殊符号的训练文本trainfile.txt,以及测试文本testfile.txt,那么训练一个语言模型以及对其进行评测的步骤如下:
1:词频统计
ngram-count -text trainfile.txt -order 3 -write trainfile.count
其中-order 3为3-gram,trainfile.count为统计词频的文本
2:模型训练
ngram-count -read trainfile.count -order 3 -lm trainfile.lm -interpolate -kndiscount
其中trainfile.lm为生成的语言模型,-interpolate和-kndiscount为插值与折回参数
3:测试(困惑度计算)
ngram -ppl testfile.txt -order 3 -lm trainfile.lm -debug 2 > file.ppl
其中testfile.txt为测试文本,-debug 2为对每一行进行困惑度计算,类似还有-debug 0 , -debug 1, -debug 3等,最后 将困惑度的结果输出到file.ppl。
二、大数据(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
SRILM是一个统计和分析语言模型的工具,提供一些命令行工具,如ngram,ngram-count,可以很方便的统计NGRAM的语言模型。
1、安装依赖包
c/c++ compiler,GNU make,GNU gawk,GNU gzip,bzip2,P7zip,csh,Tcl。
Tcl 可嵌入式脚本语言。用于脚本编程和测试,这里是为了SRILM的测试。
下载地址 http://www.tcl.tk/software/tcltk/
解压 进入unix目录
./configure --prefix=/usr/local
make
make install
完成测试
make test
或命令行输入
tclsh
% exit
2、安装srilm
1、下载SRILM压缩包
下载链接为http://www.speech.sri.com/projects/srilm/download.html 当前版本为1.7.2,创建安装的目录,假设安装目录为:/home/xxx/srilm-1.7.2
2、修改Makefile文件(srilm-1.7.2目录下)
(a) 找到此行: # SRILM = /home/speech/stolcke/project/srilm/devel,另起一行输入srilm的安装路径,SRILM = /home/xxx/srilm-1.7.2
(b) 找到此行:MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type),在其前加#注释掉,并另起一行输入: MACHINE_TYPE := i686-gcc4。
注:此行告诉Makefile之后要使用/home/xxx/srilm-1.7.2/common /Makefile.machine.i686-gcc4文件中的配置。通过 uname -m 命令可以查询机器架构是i686,如果系统是 64 位的,请改为 i686-m64,同时也可能需要修改相应的 sbin/machine-type
3、修改上述Makefile中所提到的/home/xxx/srilm-1.7.2/common /Makefile.machine.i686-gcc4文件
(a)找到此行: #GCC_FLAGS = -mtune=pentium3 -Wall -Wno-unused-variable -Wno-uninitialized,修改为 GCC_FLAGS = -mtune=generic -Wall -Wno-unused-variable -Wno-uninitialized
若CPU为AMD 64位,则可能需要修改为GCC_FLAGS = -march=athlon64 -m64 -Wreturn-type -Wimplicit
(b) 找到:TCL_INCLUDE =
TCL_LIBRARY =
修改为:
TCL_INCLUDE = -I /user/local/include
TCL_LIBRARY = -L /user/local/lib/tcl8.6
注:TCL配置须保证tcl已安装,若未安装,可添加 #NO_TCL = X
(c) 找到:GAWK = /usr/bin/awk
修改为:
GAWK = /usr/bin/awk
注:各系统中(b)(c)的步骤安装情况可能不同,查找软件的安装位置,可使用命令:which is 个gwak等
4、编译工具
返回安装目录/home/xxx/srilm-1.7.2
在命令行输入:
gnumake World
或 make World (if the GNU version is the system default)
顺利的话,srilm就编译通过了。如果出现问题,很可能就是相应的依赖工具没有装完全。
5、测试工具
在安装目录/home/xxx/srilm-1.7.2下,运行
gnumake test
需要等待一段时间,如果出现都是 IDENTICAL,就证明 SRILM 编译成功了。运行顺利的话,会出现如下类似结果
*** Running test select-vocab ***
7.68user 0.06system 0:06.96elapsed 111%CPU (0avgtext+0avgdata 51728maxresident)k
0inputs+1944outputs (0major+12883minor)pagefaults 0swaps
select-vocab: stdout output IDENTICAL.
select-vocab: stderr output IDENTICAL.
make[1]: Leaving directory `/home/xxx/srilm/utils/test'
6、编译优化版本
在安装目录/home/xxx/srilm-1.7.2下,运行
gnumake World OPTION=_c
gnumake cleanest OPTION=_c
其中OPTION有多种参数可选择
OPTION=_c "compact" data structures
OPTION=_s "short" count representation
OPTION=_l "long long" count representation
OPTION=_g debuggable, non-optimized code
OPTION=_p profiling executables
使用
一、小数据
假设有去除特殊符号的训练文本trainfile.txt,以及测试文本testfile.txt,那么训练一个语言模型以及对其进行评测的步骤如下:
1:词频统计
ngram-count -text trainfile.txt -order 3 -write trainfile.count
其中-order 3为3-gram,trainfile.count为统计词频的文本
2:模型训练
ngram-count -read trainfile.count -order 3 -lm trainfile.lm -interpolate -kndiscount
其中trainfile.lm为生成的语言模型,-interpolate和-kndiscount为插值与折回参数
3:测试(困惑度计算)
ngram -ppl testfile.txt -order 3 -lm trainfile.lm -debug 2 > file.ppl
其中testfile.txt为测试文本,-debug 2为对每一行进行困惑度计算,类似还有-debug 0 , -debug 1, -debug 3等,最后 将困惑度的结果输出到file.ppl。
二、大数据(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