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

查看出错的地方

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

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

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

改动后为:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

然后带上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

[moses笔记]编译含有nplm的moses解码器的更多相关文章

  1. blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! i3-wm项目的官网:https://i3wm.org/ 首先需要lfs基础上编译安装完整的xorg服务 我的xorg服务编译安 ...

  2. 如何在Eclipse CDT中编译含有多个main函数的项目

    最近在杭电ACM上做题,使用的C++工具是Eclipse,但是Eclipse CDT不能同时存在多个main函数的文件,上网也搜了很多资料,但是按他们的步骤来,还是不能实现自己想要的效果.经过一下午的 ...

  3. blfs(systemd版本)学习笔记-编译安装配置dhcpcd

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/stable-syst ...

  4. JVM笔记——编译期的优化

    一.编译过程 解析和填充符号表的过程 插入注解处理器的注解处理过程 语义分析与字节码生成过程 二.解析和填充符号表 解析包含两个过程:词法分析和语法分析 (一)词法分析 将源代码的字符流转变成标记(T ...

  5. blfs(systemd版本)学习笔记-编译安装openssh软件包

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/pos ...

  6. blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...

  7. blfs(systemv版本)学习笔记-编译安装ligtdm显示管理器

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! ligtdm带有显示管理器和登录器,参照我的笔记安装xorg和i3后安装lightdm,就可以组成一个简易的桌面环境了 下面是l ...

  8. blfs(systemv版本)学习笔记-编译安装配置dhcpcd

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! dhcpcd项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/basicne ...

  9. blfs(systemv版本)学习笔记-编译安装openssh软件包

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/8.3/postlf ...

随机推荐

  1. PM过程的一些典型场景和问题

    如何进行团队激励 如何进行目标管理 如何进行绩效考核 如何处理团队沟通(技巧) 详述几种软件过程理论 需求分析和度量 测试过程和工具 开发管理过程

  2. [BZOJ 2668] 交换棋子

    Link: BZOJ 2668 传送门 Solution: 重点在于对于每条转移路径:首尾算一次,中间节点算两次 可以一点拆三点,将原流量拆成入流量和出流量 但其实也可以就拆两点,分前后是否是一首尾点 ...

  3. CodeForces - 992D Nastya and a Game

    题面在这里! 显然一段区间的 mul - sum * k = 0 才合法,然鹅我们发现sum * k 对于本题的数据来说最大才是1e18,也就是说mul必须得<=1e18. 我们不妨从这里入手, ...

  4. 【Splay】Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) B. Cards Sorting

    Splay要支持找最左侧的最小值所在的位置.类似线段树一样处理一下,如果左子树最小值等于全局最小值,就查左子树:否则如果当前节点等于全局最小值,就查当前节点:否则查右子树. 为了统计答案,当然还得维护 ...

  5. python基础之包与logging模块

    包 1.什么是包? 包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹 2.为什么要有包? 提高程序的结构性和可维护性 3.如何使用包? 导入包就是在导包下的__init__. ...

  6. 最小生成树(Prime算法)

    最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城 ...

  7. SAP MM 模块常用的数据表

    SAP MM模块常用数据表: Table Table Class Application Class Data Class Description EBAN TRANSP  ME Transactio ...

  8. 最好的拖拽js

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 给XC2440开发板烧写程序的N种方式

    转:http://blog.chinaunix.net/uid-22030783-id-3420080.html 给XC2440开发板烧写程序非常灵活,总结起来有这么几种方式:   空片烧写(flas ...

  10. 十大流行linux

    你可曾知道Linux的魅力或威力来自哪里?那就是,由于众多发行版百花齐放,Linux的阵营日益壮大,每一款发行版都拥有一大批用户,开发者自愿为相关项目投入精力.Linux发行版可谓是形形色色,它们旨在 ...