SRILM的安装与使用

来源:互联网 发布:虚拟机怎么配置网络 编辑:程序博客网 时间:2024/05/21 07:05
安装
      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
原创粉丝点击