使用Moses搭建一个机器翻译系统及实验记录

LaTeX:基于Windows10的LaTeX套装详细安装教程(TeXLive2020+TeXstudio+sumatraPDF) 1. 前言 此文写于小美赛(APMCM)前几天,今天latexstudio发布了APMCM的LaTeX写作模板,模板要求使用TeXLive2020进行编译,这让我想继续使用TeXLive2019继续混的想法破灭。 事实上2019还能用,不过我也的确该换了,2020是4月份发布的,但是我才接触LaTeX不久,前辈说先不急着安装新的版本,新版本在发行早期容易出问题,所以就一直放着没管,在后面的时间里面,自己不断地学习,也算是略有心得,期间受到了很多前辈的指点,自己也不停地看了很多的书,所以很多东西都是可以随着自 阅读详情

一. 搭建实验环境:

ubuntu系统可以直接下载安装deb包即可,需要安装的deb包有Srilm, GIZA++, mkcls以及从   http://www.statmt.org/wmt08/scripts.tgz 上获得的一些脚本文件。如果不是ubuntu系统的话,需要下载这些工具的源代码进行编译安装。

 

下面简述使用源代码编译的方法搭建环境中的步骤,直接使用deb安装的可以跳过:

1. 安装Srilm:

下载Srilm源码文件,解压。http://www.speech.sri.com/projects/srilm/download.html

首先,检查Srilm的依赖包,这些依赖包包括:

 1 ) A template-capable ANSI-C/C++ compiler, gcc version 3.4.3 or higher.

  2 ) GNU make, to control compilation and installation.

  3 ) GNU gawk, required for many of the utility scripts.

  4 ) GNU gzip to unpack the distribution, and to allow SRILM programs to    handle “.Z” and “.gz” compressed datafiles (highly recommended).

  5 ) bzip2 to handle “.bz2″ compressed files (optional).

  6 ) p7zip to handle “7-zip” compressed files (optional).

   7 ) The Tcl embeddable scripting language library (only required for some of the test execu tables).

  8 ) csh  Unix shell

      如果以上工具没有全部安装的话, srilm 编译肯定无法通过。使用 which 命令查找以上工具是否安装,例如:

  which make, 若得到的输出为 /usr/bin/make ,表明系统已经安装好了 GNU make 。没有的话需要apt-get install ***(相应的包)。

 

其次,修改Makefile和common/Makefile.machine.i686文件:

  1 )修改 Makefile 文件

         找到以下两行:

         # SRILM = /home/speech/stolcke/project/srilm/devel ,另起一行输入 srilm 的安装路径, SRILM = ($PWD) 。

         MACHINE_TYPE := $(shell $(SRILM)/sbin/machine-type) ,在其前加#注释掉,并另起一行输入: MACHINE_TYPE := i686

   2 )修改 srilm/common/Makefile.machine.i686 文件

         cd common/
        cp Makefile.machine.i686 Makefile.machine.i686.bak
        vi Makefile.machine.i686

         将第 15 行 # Use the GNU C compiler 下的三行修改如下:
        GCC_FLAGS = -mtune=pentium3 -Wreturn-type -Wimplicit
        CC = gcc $(GCC_FLAGS)
        CXX = g++ $(GCC_FLAGS) -DINSTANTIATE_TEMPLATES

         将 51 行 # Tcl support (standard in Linux) 下的两行修改如下:
        TCL_INCLUDE = -I/usr/include/tcl8.5
        TCL_LIBRARY = -L/usr/lib/tcl8.5

         如果是其他版本,则需要进行相应的修改。

 

然后,编译Srilm

     cd ..
   make World

  顺利的话, srilm 就编译通过了。如果出现问题,很可能就是相应的依赖工具没有装完全,需要回到 3.2 中去重新检查一下下需要的配文件。

 

 最后, 进入 srilm/test 目录进行测试:

  编译通过不等于编译成功,必须利用 srilm 提供的测试模块进行测试。

  1 )声明 srilm 编译成功后工具包所在的环境变量:

Export PATH=$PATH:/home/fuxiaoyin/MTworkdir/srilm/bin/i686:/home/fuxiaoyin/MTworkdir/srilm/bin

  2 )进入 test 进行测试

        make test

        终端上的显示如下所示:

        *** Running test adapt-marginals ***

 

        real      0m11.701s

        user     0m11.507s

        sys      0m0.148s

        adapt-marginals: stdout output IDENTICAL.

        adapt-marginals: stderr output IDENTICAL.

        如果显示的输出大部分都是 IDENTICAL ,只有少数为 DIFFERS ,则表示 srilm 已经编译成功啦! ^_^

   3 )声明 expot 命令只在当前用户登录有效,切换用户或者重启电脑以后则需要重新 export 路径。为了一劳永逸,我们还需要做如下设置。(不过这一步不一定是必须的,我在自己的机器上并没有经过这一步)

       在 /etc/profile 文件中找到下面一段代码:

       export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE

 

       for i in /etc/profile.d/*.sh ; do

           if [ -r "$i" ]; then

               if [ "$PS1" ]; then

                  .  $i

               else

                   . $i >/dev/null 2>&1

               fi

           fi

       export PATH=$PATH:/home/fuxiaoyin/MTworkdir/srilm/bin/i686:/home/fuxiaoyin/MTworkdir/srilm/bin

       done

       红色字体为要插入的声明,保存以后再重新 test 一下。

 

 2. 安装翻译模型训练工具GIZA++和mkcls:

  1) 在mtworkdir目录下下载并解压Giza++:
  cd /home/52nlp/mtworkdir
  wget http://ling.umd.edu/~redpony/software/giza++.gcc41.tar.gz
  tar -zxvf giza++.gcc41.tar.gz
    解压后得到GIZA++-v2/目录
  2)编译Giza++:
  cd GIZA++v2
  make
  3)下载解压并编译mkcls:
  cd ..(重新进入mtworkdir目录)
  wget http://ling.umd.edu/~redpony/software/mkcls.gcc41.tar.gz
  tar -zxvf mkcls.gcc41.tar.gz
  cd mkcls-v2
  make
 这一步一般没啥问题。
  4)建立bin目录,并将giza++,mkcls工具拷贝到bin目录下:
  cd ..
  mkdir -p bin
  cp GIZA++-v2/GIZA++ bin/
  cp GIZA++-v2/snt2cooc.out bin/
  cp mkcls-v2/mkcls bin/

 

3. 安装Moses:

1)建立目录,通过svn下载moses:
  mkdir -p moses
  svn co  https://mosesdecoder.svn.sourceforge.net/svnroot/mosesdecoder/trunk moses
 2)下载完成后编译:
  cd moses
  ./regenerate-makefiles.sh
  ./configure –with-srilm=.../mtworkdir/srilm
  make -j 4
  cd ..
 注:srilm指向绝对路径。
 3)安装Moses训练脚本
 建立训练脚本目录:
  mkdir -p bin/moses-scripts
  修改makefile:
  vi moses/scripts/Makefile
  将第13、14行修改如下:
  TARGETDIR=.../mtworkdir/bin/moses-scripts(moses-scripts目录的绝对目录地址)
  BINDIR=.../mtworkdir/bin(bin目录的绝对目录地址)
 编译:
  cd moses/scripts/
  make release
  cd ../..
 使用时需要声明环境:
  export SCRIPTS_ROOTDIR=.../mtworkdir/bin/moses-scripts/scripts-20090113-1019


二、实验步骤:

1. 建立work-dir目录,在该目录下建立4个工作目录:

work-dir/                                                                                               工作目录,名称可以自己指定

         alignment-corpus/                                                                    训练数据存放

         lang-model-corpus/                                                         语言模型数据存放

         tuning/                                                                                         MERT 的 DEV 数据存放

            evaluation/                                                                                 测试数据存放

 

2. 调用ICTLAS pai实现一个中文分词工具【详见上一篇blog】

 

3. 在 alignment-corpus/ 目录下完成中文文本的分词和英文文本的分词、过滤长语句、小写化处理:

    cd ChineseSegmentation
   

    ./ChineseSeg

    

    (以上两步是中文分词的过程,ChineseSeg是我实现的一个中文分词程序的binary文件)

     cd '.../work-dir/alignment-corpus'
    

     tokenizer.perl -l en < '.../work-dir/alignment-corpus/e.txt' > corpus.tok.en
    

     clean-corpus-n.perl corpus.tok ch en corpus.clean 1 40
    

     lowercase.perl < corpus.clean.en > corpus.lowercased.en

 

     (copy corpus.clean.ch as corpus.lowercased.ch)

 

4. 英文语言模型训练:

    这里采用的是3-gram

    cd '.../work-dir/lang-model-corpus'


    ngram-count -order 3 -interpolate -kndiscount -text '.../work-dir/lang-model-corpus/corpus.lowercased.en' -lm corpus.lm

 

5. 翻译模型训练:

   根据分过词的中英文文本进行训练,生成翻译模型。

   cd ..

 

   train-factored-phrase-model.perl -scripts-root-dir /usr/share/moses/scripts -root-dir . -corpus alignment-corpus/corpus.lowercased -f ch -e en -alignment grow-diag-final-and -reordering msd-bidirectional-fe -lm 0:3:'.../work-dir/lang-model-corpus/corpus.lm':0

 

(注意:以上几步所使用的语料库是训练集语料,包含了一个中文语料文件和一个对应的英文语料文件)

 

6. 最小错误率训练(这一步是针对开发集数据做的,我的开发集数据包括了一个中文文本和对应的4个建议的英文翻译文本):

  首先使用第3步的方法对这5个文本进行分词和小写化处理,生成5个文件在tuning/文件夹中:input(分词后的中文开发集语料),ref0~3(分词和小写化后的英文开发集语料)。

 

mert-moses.pl tuning/input tuning/ref /usr/bin/moses model/moses.ini --working-dir tuning --rootdir /usr/share/moses/scripts  (tuning/input为中文语料;tuning/ref为英文预料,该命令会自动寻找命名为ref0~n的各个语料)

 

上一步需要很长的时间,和开发语料库的大小及机器性能有关系。我这边跑了10个小时,反正晚上让它跑着呗~~

成功执行后,我们获得了moses.ini文件,这就是可以用来进行汉英翻译的核心文件。下面我们对其进行进一步处理:

 

reuse-weights.perl tuning/moses.ini < model/moses.ini > tuning/moses.weight-reused.ini

 

我们获得了最终的翻译模型moses.weightreused.ini

 

7. 对测试数据翻译并得分(对测试集数据进行,我的测试集数据包括了一个中文文本和对应的4个建议的英文翻译文本):

首先使用第3步的方法对这5个文本进行分词和小写化处理,生成5个文件在evaluation/文件夹中:test.ch.input(分词后的中文测试集语料),test.en.ref0~3(分词和小写化后的英文训练集语料)。

短语过滤:

filter-model-given-input.pl evaluation/corpus tuning/moses.weight-reused.ini evaluation/test.ch.input

使用moses解码:
moses -config evaluation/corpus/moses.ini -input-file evaluation/test.ch.input > evaluation/test.ch.output

计算bleu得分:

multi-bleu.perl evaluation/test.en.ref < evaluation/test.ch.output > result.txt

 

最终的得分结果在result.txt中,其中包含了该翻译系统针对测试集翻译的bleu值,如果超过了我们预计的baseline,说明效果不错~~

我的实现获得的汉英翻译的bleu值为16.59,不是很理想。但是将这个实验过程记录下来,以备需要时使用~~

 

 

本文参考了:

http://www.52nlp.cn/ubuntu-moses-platform-build-process-record

http://blog.sina.com.cn/s/blog_6cb4abf10100nw9z.html

Moses Running Process and Steps :Moses运行过程记录---Moses运行前的准备(一) ---------------------------------------------------------------------- The Records of Running Moses University of Macau 2010-1-27 ------------------------------------------------------------ 阅读详情

相关推荐

MOSES系统训练中间过程和意义详解

关于Moses训练的那些事       前面已经将moses从编译到训练测试的整体流程过了一遍,想必大家对这个工具有了一个大致的理解。这里再详细说一些东西,可能能帮助大家对moses有更深的认识。       也许你在训练过程中会遇到一定的问题,事实上,训练总共分为7个steps(步骤),有些情况下(尤其是语料非常大的时候,这个本人非常有体会,昨天训练了700万句平行语料数据,结果...)执行

寒小阳 7788

机器翻译--Moses脚本进行数据处理,Bleu值计算

机器翻译–Moses脚本进行数据处理,Bleu值计算 数据预处理包括标点规范化,分词,大小写字母等;Blue值计算使用perl直接计算。 Moses 这是一个很强大的数据预处理工具,虽然已经用了很多年了,但现在依然非常流行。 github地址,主要使用里面的perl脚本进行数据预处理。确保电脑上已经安装配置好了perl(ubuntu自带)。 很多人做数据预处理都会用到BPE算法,30000个子词几...

彭伟的博客 3250

Moses的安装、训练和优化

Moses安装、训练和优化,本文描述了一个真正实用的Moses系统的搭建过程 我是以root权限在Ubuntu服务器上安装运行的Moses,总结了网上的一些经验,再加上自己遇到一些问题然后解决问题的过程,跟大家分享一下。我安装运行成功所采用的Ubuntu、Boost、IRSTLM和giza++的版本组合如下:Ubuntu12.04.01 LTS + Boost_1_55_0+ irstlm-5.80.08 + giza-pp-v1.0.7。 一

一个开心生活的码农博客 4779

MOSES统计机器翻译系统实现过程

MOSES安装以及初级说明 作为初学者对MOSES现在也没有什么深入的了解就在这里嫌丑,浅显的介绍一下。 首先是moses的官网:http://www.statmt.org/moses/ 里面资料很详细,可以下载说明文档(manual.pdf)按照文档里面的提示一步步进行,一般来说整体只要依照这个步骤就没有问题 我现在本机上安装的moses,然后又在服务器上进行的运行,所以安装经验是本机的

hero51的专栏 3449

短语提取与A*搜索在机器翻译中的实现

本文介绍了短语提取算法的实现过程,并探讨了在Moses中实现A*搜索的方法。短语提取基于词对齐信息,通过编程实现并进行测试。A*搜索则依赖可采纳启发式,优化解码过程,结合Moses框架进行调整。内容还涉及语言模型训练、人工评判数据分析及重排序框架构建,涵盖机器翻译中的关键技术和实践步骤。

ol7890123的博客 355

moses-online:摩西,机器翻译系统

“this->master”分支中的额外实现。 对于计算机辅助翻译,我们实施了在线学习功能,可从翻译人员的更正中学习。 此功能存储出现在 Oracle 翻译中的短语对(最接近后编辑句子的翻译)。 如果将来再次翻译这些短语对,就会得到奖励。 该功能还将短语对存储在非预言机中,并在将来的翻译中使用它们时对其进行惩罚。 该系统具有附加参数、在线特征的权重和在线算法的学习率。 这些参数可以作为 1. "weight-ol <weight>" : is the initial weight of the online feature function 2. "f_learningrate <rate>" : is the learning rate for online algorithm to update the feature 3. "w_learningrate <rate>" : i

基于短语的统计机器翻(PBMT) 开源工具 :Moses

如何运行Moses   1. Moses的历史   Moses是Pharaoh的升级版本,增加了许多功能。它是一个基于短语的统计机器翻译系统,整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在Linux平台和Windows平台。它有两大特点:   1.1 Factored Translation Model    在Factored Translation Model中,一...

u012485366的博客 2024

Moses统计机器翻译系统实验过程

从Moses前期工作,Moses统计机器翻译系统的环境搭建到准备语料库,标注,训练语言模型,训练翻译模型,调优,测试等整个步骤特别详细。“只要看懂中文,剩下的本文帮你解决”!

Moses安装全记录

Moses baseline 记录

lqj1990的博客 6664

Moses机器翻译手册

全面介绍moses机器翻译系统的文档,既是使用手册,也是机器翻译教程。

Zephyr RTOS线程间通讯实战:消息队列与信号量的5个经典应用场景

本文深入探讨了Zephyr RTOS中线程间通讯的核心机制,通过消息队列与信号量的组合,详细解析了传感器数据处理流水线、命令分发系统、日志记录、资源池管理以及周期性任务协同调度等5个经典应用场景。这些实战模式为构建高效、稳定且可维护的嵌入式多线程系统提供了清晰的设计蓝图和代码范例。

tomato的博客 94

机器翻译系统moses报错记录

1,使用已有的词汇化概率lex文件 如果训练目录下以后lex文件,那么moses将使用已有的lex文件,不去统计词汇化概率。 (4) generate lexical translation table 0-0 @ Wed Apr 24 17:20:15 CST 2013   moses输出: reusing: /**/lex.f2e and   /**/lex.e2f  2,mo

自然语言处理大菜鸟--HsingWang 3101

Dify 从入门到熟悉100 天的学习大纲

理解 Dify 的核心概念,熟悉操作界面,并能创建简单的 AI 应用。祝你在这 100 天的旅程中学有所成,成为一名优秀的 AI 应用开发者!掌握生产环境部署、监控、调优,并关注 Dify 生态和前沿动态。探索多模态、Agent、API 集成、性能优化等高级主题。掌握工作流编排、高级提示词技巧、知识库优化等核心功能。

IT深耕十余载,大道之简 1735

Moses搭建过程遇到的一些问题与解决

本人是按照这个链接 http://blog.youkuaiyun.com/csdidi/article/details/6200513 来安装 Moses, 但在安装过程仍然出现很多问题,记录如下:   安装Moses的需要的工具有 GIZA++, mkcls, SRILM, 分词工具(我用的是ICTCLAS) 1. 安装SRILM 需要 gawk, make, tcl,提前安装,

davidcqw的专栏 1146

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流)

本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。

k6l7m8n9的博客 151

个人顶级AI助手OpenClaw(Clawdbot) - 新手快速入门指南

本文详细介绍了个人顶级AI助手OpenClaw(Clawdbot) 的快速入门指南,包括安装部署和使用配置及注意事项

program哲学 5305

Ubuntu10.10 32位系统下moses统计机器翻译系统使用命令记录

准备语料 /disknew/zw/moses/work/corpus translated.ench 1035224句已分词 数据预处理 过滤掉长句子 /tools/moses-scripts/scripts-20131121-1744/training/clean-corpus-n.perl/disknew/zw/moses/work/corpus/translated en chdis

willav_v的博客 580

【深度学习】Progressive Distillation for Fast Sampling of Diffusion Models

这种方法通过迭代地将一个需要较多步骤的模型(称为教师模型)蒸馏成一个需要较少步骤的学生模型,每次迭代都将采样步骤减半,直到达到所需的采样步骤数量。通过渐进式蒸馏,论文将原始需要8192步采样的模型成功蒸馏为只需4步采样就能取得接近的生成质量的新模型,大幅提高了扩散模型的推理效率。这篇论文提出了一种"渐进式蒸馏"(Progressive Distillation)的方法,来大幅降低用于生成对抗网络(GAN)的扩散模型(Diffusion Model)在推理阶段的采样步数,从而提高其推理效率。

q742971636的博客 1787

Moses-a statistical machine translation system

http://www.statmt.org/moses/ Moses is a statistical machine translation system that allows you to automatically train translation models for any language pair. All you need is a collection of tra

iiiiiiiiiiii9的专栏 378

从 VL02N 拣配到 ABAP 自动化,读懂 SD_DELIVERY_UPDATE_PICKING 的位置和风险

文章摘要:SAP SD模块中,SD_DELIVERY_UPDATE_PICKING函数模块用于处理出库交货单的拣配确认,更新交货项目的拣配数量。该函数适用于未启用WM/EWM的传统SD流程,能确保拣配状态与标准交货处理逻辑同步,比直接修改数据库更安全。但在S/4HANA Cloud等新环境中,应优先使用API_OUTBOUND_DELIVERY_SRV等公开发布接口。使用该函数时需注意参数完整性和按交货单整体处理的原则,避免逐项提交导致的数据不一致问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

Android 14.0 SystemUI状态栏居中显示时间和修改时间显示样式

在14.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了

安卓兼职framework和app工程师的博客 978

Moses创建一个翻译系统的基本过程记录,以后会按照每个过程详细说明,并给出每个步骤的参数说明...

软件需求: 首先你必须要有Moses(废话哈哈)、然后要有GIZA++用作词对齐(traning-model.perl的时候会用到)、IRSTLM产生语言模型 大致步骤: 大体的步骤如下: 准备Parallerl data(需要句子对齐):对语料进行tokenisation、truecasing和cleaning步骤之后才能使用于我们的机器翻译系统(哈哈,都快忍不住直接写详细步骤了) ...

weixin_33872566的博客 257

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

CNN+LSTM+Attention+DNN模型实战:pytorch搭建CNN+LSTM+Attention+DNN行车速度预测

6045

使用ICTCLA api进行中文分词实验的过程备忘

<br />机器翻译最后一个大作业需要使用moses搭建一个机器翻译系统。其中有一步中要调用ICTCLA api实现中文分词,晚上稍稍熟悉了一下ICTCLA,大概了解了它的原理和使用方法,在此将使用它的方法和实验过程加以简述,以备忘。<br /> <br />我是在ubuntu 9.10系统中进行实验的,故而需要下载linux版本的ICTCLA。我首先下的是java版本,但是在ubuntu中使用时出现了问题,后换成了C++版本。在解决了实验过程中在C++版本里出现的问题之后,回头看java版本,之前遇到的是

csdidi的专栏 3048

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

探索语言之美:STIF-Indonesia —— 印尼语非正式到正式风格转换工具

探索语言之美:STIF-Indonesia —— 印尼语非正式到正式风格转换工具 在这个快速发展的数字化时代,语言处理技术正以前所未有的方式改变我们与世界的互动。STIF-Indonesia是一个开源项目,致力于解决印尼语非正式到正式语言的风格转移问题。该项目基于《半监督低资源印尼语非正式到正式风格转换的迭代前向翻译》的研究成果,并提供了一种高效的方法,使机器能够学习并完成这一复杂的任务。 项目介...

gitblog_00044的博客 541

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 使用ICTCLA api进行中文分词实验的过程备忘
下一篇: 单机Hadoop系统测试命令
csdidi
博客等级 码龄18年 10粉丝 12原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值