zoukankan      html  css  js  c++  java
  • [moses笔记]编译含有nplm的moses解码器

    ACL2014的best paper Fast and Robust Neural Network Joint Models for Statistical Machine Translation在SMT中使用深度学习知识,提出了一种neural network joint model(事实上就是融合源端语言知识去做语言模型),论文实验给出的结果宣称大幅度提高了以往基于n-gram语言模型翻译系统的翻译性能。 


    开源机器翻译系统moses也实现并集成了上述研究成果。參见[1]中

              An implementation of Devlin et al. (2014), a neural network language model that uses a target-side history as well as source-side context, is           implemented in Moses as BilingualLM. It uses NPLM as back-end (check its installation instructions). 

    只是moses自己对他命名为Bilingual Neural LM(双语神经网络语言模型)。


    和其它语言模型一样,moses将其视为一个翻译特征(feature)融合到自己的解码器中。

    特征的集成參见[1]。可是假设心急,只改改moses配置文件mose.ini。在训练和解码阶段,使用曾经普通的moses解码器(一般都是使用KenLM或者Srilm作为语言模型),moses解码器会报错无法识别那个特征。


    參见[1], 正确做法是:

    1. 安装神经网络语言模型工具(a neural network language model toolkit)nplm。

    2. 在编译的时候带上參数

    • --with-nplm=<root dir of the NPLM toolkit>


    可是我在安装过程中遇到问题:

    Unable to load Boost.Build: could not find "boost-build.jam"
    -----------------------------------------------------
    Attempted search from /path/to/mosesdecoder up to the root at /path/to/mosesdecoder/share/boost-build. and in these directories from BOOST_BUILD_PATH and BOOST_ROOT: /usr/share/boost-build


    開始。遇到这个问题。我一直以为是boost库安装错误。

    參考[2],[3]等,对boost一阵着折腾。没有不论什么效果....

    在加上我之前安装nlpm成功。并依照[1]上的方法成功训练出Bilingual Neural LM,我更加确定是boost库的问题。

    boost版本号各种换,boost安装方法各种尝试等,一直折腾到凌晨3点半。晕。


    **推荐使用[4]中方法

       ./bootstrap.sh
       ./b2 -j4 --prefix=$PWD --libdir=$PWD/lib64 --layout=system link=static install || echo FAILURE


    次日,我又一次编译moses,不带nlpm參数。居然成功了。

    这也就是说编译boost库是没有问题的。到这个时候,我才開始回过头来考虑是否是nlpm在和moses一起编译的时候是否有问题。

    但详细是哪里出问题,仍然一无所知。


    偶然地,我发现编译的时候有一个错误:

    /home/xwang/11.Moses/nplm-master/src/neuralLM.h:10:23: fatal error: Eigen/Dense: No such file or directory

    查看出错的地方


    Eigen这个包事实上是放在nlpm根文件夹下的3rdparty文件夹下。


    在编译nlpm的时候,须要在makefile文件里指定一些依赖包的路径(boost、Eigen等)。


    此处,我手动地给改掉出错的地方。将nplm的src中头文件和cpp文件手动改动Eigen头...

    改动后为:


    注意。全部出错的地方都要改动。查看出错的地方:



    然后带上nlpm编译,编译通过,成功。


    參考:

    [1] http://www.statmt.org/moses/?n=FactoredTraining.BuildingLanguageModel#ntoc38

    [2] http://comments.gmane.org/gmane.comp.nlp.moses.user/6322

    [3] http://comments.gmane.org/gmane.comp.nlp.moses.user/11461

    [4] http://www.statmt.org/moses/?

    n=Development.GetStarted

  • 相关阅读:
    PSP编程
    题库软件1.0发布
    ubuntu上安装netgear wg511v2驱动
    boost的编译
    Plot3D 0.3发布
    立体画板Plot3D
    求教团队内的朋友,在directx中,如何画虚线?
    OpenGL如何显示文本?
    JZ028数组中出现次数超过一半的数字
    JZ027字符串的排列
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6745008.html
Copyright © 2011-2022 走看看