这篇文章是师弟YYL写给52nlp的。实验室机器的cpu是intel 64位的,而我安装的是Ubuntu8.10的32位版本,因此《Ubuntu8.10下moses测试平台搭建全记录》里的SRILM的编译方法只适用于32位的系统。师弟新装了Ubuntu 9.04 64位的桌面版,发现参照我的方法和其他人写的SRILM编译方法并不合适,而关于64位系统下编译SRILM的文章又很少,于是给52nlp写了这篇文章,这里非常感谢!

首先.安装依赖的软件包:
 1.c/c++ compiler:编译器gcc 3.4.3及以上版本
 2.GNU make:构建和管理工程的工具,解释Makefile里的指令,描述了整个工程所有文件的编译顺序和编译规则。这里是为了控制SRILM的编译和安装。
 3.GNU gawk:GNU所做的awk程序语言。对于文字资料的修改,对比,抽取等处理,使用c或passcal等不方便且费时,awk能够以很短的程序完成。这里是处理SRILM里的一些脚本文件。
 4.GNU gzip:使用c语言编写的一种解压缩软件。这里是为了使SRILM能够处理.Z和.GZ后缀的压缩文件。
 5.bzip2:数据压缩软件,压缩效率更高。这里是使SRILM能处理.bz2后缀的压缩文件。
 6.P7zip:数据压缩软件。这里是使SRILM能处理7-zip的压缩文件。
 7.Tcl可嵌入式脚本语言。用于脚本编程和测试。这里是为了SRILM的测试。最好安装tcl8.x和tcl8.x-dev。
 8.csh:Unix shell的一种。(这个很重要,安装过程中有个问题困扰了很久,最后发现是csh没有安装的原因)。

下面详述安装过程:(反复装了很多次,都是一些小的细节)

一.下载SRILM.tgz压缩包
 链接:http://www.speech.sri.com/projects/srilm/download.html,创建安装的目录,并把压缩包解压到该目录。我这里使用的是1.5.8版,安装目录是:/home/user/srilm

二.修改Makefile文件(srilm目录下)
 1.找到此行: # SRILM = /home/speech/stolcke/project/srilm/devel,另起一行输入srilm的安装路径,SRILM=/home/user/srilm
 2.找到此行:MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type),在其前加#注释掉,并另起一行输入:MACHINE_TYPE := i686-m64。此行告诉Makefile之后要看的设置在/home/user/srilm/common/Makefile.machine.i686-m64中。
(此处也很重要,因为ubuntu9.0.4 64bit的系统,跟32bit系统的配置方法有所不同。)

三.把ubuntu9.0.4系统的相关设定告诉Makefile,即用编辑器修改/home/user/srilm/common目录下的文件:Makefile.machine.i686-m64
 1.找到:
GCC_FLAGS = -march=athlon64 -m64 -Wreturn-type -Wimplicit
CC = $(GCC_PATH)gcc $(GCC_FLAGS) -Wimplicit-int
CXX = $(GCC_PATH)g++ $(GCC_FLAGS) -DINSTANTIATE_TEMPLATES
 这里是为了告诉SRILM系统使用的compiler(c和c++),符合安装情况,不需要修改。
 2.找到:
# Tcl support (standard in Linux)
TCL_INCLUDE =
TCL_LIBRARY =
NO_TCL = 1
 这里是为了告诉SRILM函数库(TCL)在系统中的安装位置,符合安装情况,不需要修改。
 3.找到:
GAWK = /usr/bin/awk
修改为:GAWK = /usr/bin/gawk
 注:各系统中这些软件的安装情况可能不同,查找软件的安装位置,可使用命令:which is gcc或which is g++或which is gawk等。

四.修改环境变量
输入命令:sudo gedit /etc/profile
找到:
if [ "$PS1" ]; then
 if [ "$BASH" ]; then
  PS1='\u@\h:\w\$ '
  if [ -f /etc/bash.bashrc ]; then
   . /etc/bash.bashrc
  fi
 else
  if [ "`id -u`" -eq 0 ]; then
   PS1='# '
  else
   PS1='$ '
  fi
 fi
fi
 在其后另起一行输入:export PATH="$PATH:/home/user/srilm/bin/i686-m64:/home/user/srilm/bin"

五.安装SRILM并测试
 1.编译srilm
  make World
 2.测试
  cd test
  make all
 会在终端显示一大堆东西,若绝大多数是IDENTICAL,少数是DIFFERS,则表明成功。

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:https://www.52nlp.cn/ubuntu-64-bit-system-srilm-configuration

作者 52nlp

《Ubuntu 64位系统下SRILM的配置详解》有27条评论
  1. machine_type那个地方,其实只需要修改srilm目录下的sbin/machine-type里面,

    else if (`uname -m` == x86_64) then
    这一句后面设置正常的machine_type就好了

    set MACHINE_TYPE = i686-m64

    [回复]

    admin 回复:

    谢谢啊,我也学习一下!

    [回复]

  2. 呵呵,是的。
    可以不修改Makefile中的
    MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type)
    而修改srilm/sbin/machine-type
    set MACHINE_TYPE = i686-m64前的注释符去掉
    再把set MACHINE_TYPE = i686注释掉
    通过调用srilm/sbin目录下的csh脚本文件machine-type设置MACHINE_TYPE

    我这里的MACHINE_TYPE是直接设置的(MACHINE_TYPE := i686-m64),没有通过srilm/sbin/machine-type

    一起学习,呵呵

    [回复]

  3. 你好,首先感谢你的文章,srilm才能编译过。但测试时,出现多是DIFFERS,没有IDENTICAL,汗,不知道怎么回事,帮我一下吧

    [回复]

    52nlp 回复:

    印象中“多是DIFFERS,没有IDENTICAL”有一种情况是环境变量没有修改好,你可以按“四.修改环境变量“修改一下试试。
    另外,如果你用的是gcc4.4,测试时:

    make MACHINE_TYPE=i686-gcc4
    或者在测试之前,改一下声明,例如将:
    export  PATH=$PATH:/home/52nlp/mtworkdir/srilm/bin/i686:/home/52nlp/mtworkdir/srilm/bin
    修改为:
    export  PATH=$PATH:/home/52nlp/mtworkdir/srilm/bin/i686-gcc4:/home/52nlp/mtworkdir/srilm/bin
    测试出错很大的原因是找不到这些可执行文件的路径,不过如果这两个目录里有ngram和ngram-count,我估计已经编译成功了。

    [回复]

    nethlb 回复:

    你好,sbin目录下没有有ngram和ngram-count这两个可执行文件,我所有的配置都是按照要求做的,不知为什么?我的QQ330976429,谢谢了

    [回复]

    nethlb 回复:

    你好,make World 后,有错误:
    RROR: File to be installed (../bin/i686-gcc4/ngram-class) does not exist.
    ERROR: File to be installed (../bin/i686-gcc4/ngram-class) is not a plain file.
    Usage: decipher-install ...
    mode: file permission mode, in octal
    file1 ... fileN: files to be installed
    directory: where the files should be installed

    files = ../bin/i686-gcc4/ngram-class
    directory = ../../bin/i686-gcc4
    mode = 0555

    [回复]

  4. 你好,问题解决了,我换了个版本,用1.4.6,编译测试成功。谢谢!

    [回复]

    52nlp 回复:

    不好意思,晚上有点事刚回来,解决了就好。

    [回复]

  5. 您好,请教一下:为什么我下载到的1.5.10版本,没有test文件夹呢?编译之后也没有……这怎么测试

    [回复]

    52nlp 回复:

    对比了一下1.5.10和1.5.9的INSTALL文件,以下是diff后的结果:
    103c103
    7 - To test the compiled tools, run
    105c105,107
    gnumake test
    >
    > from the top-level directory.
    109,110c111,113
    < reported, examine the output files in $SRILM/test/output and compare them
    reported, examine the output files in $SRILM//test/output and
    > compare them to the corresponding files in $SRILM//test/reference,
    > where is a subdirectory name (lm, flm, lattice).
    157c160
    $Date: 2009/12/02 19:39:04 $
    发现第7步test有变化,测试时直接在主目录下试试:make test
    1.5.10里test文件已不在主目录下,而是分别位于:
    $SRILM/lm & flm & lattice下,这是一个新变化,希望编译成功后告知,谢谢。

    [回复]

  6. 测试通过了,我下载了1.4.6版本,然后把test文件夹拷贝过来测试,成功了。谢谢

    [回复]

  7. 你好!我编译通过了,ngram-count等可执行文件也生成了,但就是make test都是differs.我检查了PATH,相关路径都设置好了。请问我这个可能是什么问题?

    [回复]

    52nlp 回复:

    不太清楚,貌似没啥问题了!

    [回复]

  8. 我的SRILM 是 1.5.12, 在我的srilm/bin 里面没有ngram和ngram-count, 但是test的时候出现的都是IDENTCAL,这是怎么回事?

    [回复]

    52nlp 回复:

    印象应该在srilm/bin/i686**下,你再找找,是identcal应该没啥问题了。

    [回复]

  9. 直接修改profile会导致Ubuntu无法登陆。。可以把命令写在脚本文件里
    #!/bin/bash
    export PATH="$PATH:/home/bo/work/srilm/bin/i686-m64:/home/bo/work/srilm/bin"
    make World

    [回复]

  10. 能否共享一下1.5.8版本的srilm现在在官网找不到这个版本了

    [回复]

    52nlp 回复:

    sorry, cant help you

    [回复]

    nlp-tt 回复:

    您好,按照您的帖子说明,一切安装正常,测试通过,但运行ngram-count;ngram命令时都提示“未找到命令“,是什么原因呢,谢谢!

    [回复]

  11. 您好,按照您的帖子说明,一切安装正常,测试通过,但运行ngram-count;ngram命令时都提示“未找到命令“,是什么原因呢,谢谢!

    [回复]

    52nlp 回复:

    你能否找到ngram-count, 和ngram这两个binary文件?如果找到的话,在linux下声明一下全局路径

    [回复]

  12. /common/Makefile.common.variables: 没有那个文件或目录
    这是为什么呢
    环境 ubuntu14.04
    MACHINE_TYPE := i686-m64

    [回复]

    喵喵 回复:

    抱歉,已解决,麻烦了

    [回复]

    chz 回复:

    如何解决的呢

    [回复]

    一个小菜鸟 回复:

    你好,我也出现了这个问题,请问您怎么解决的

    [回复]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注