这里我假设你已经成功安装了摩西moses,并希望在平行语料数据的基础上建立一个真正的短语翻译系统。这个过程需要一定的Unix的基础,理想情况下,最好还有一台Linux服务器。当然,如果你只是想试试的话,你也可以在一台笔记本电脑上安装并运行它,但最少要2G的内存(貌似现在的电脑都至少有这么大吧),和10G的空闲磁盘空间(声明一下,这是本人估计的,有可能配置达不到这个也能跑,但训练的速度会非常慢的)。
在进行下述操作之前,我建议你将编译后生成的moses可执行文件和之前编译安装过后的Irstlm以Giza++工具整理到一个文件夹下,便于调用,本人大致的目录结构如下:
1语料库准备和预处理
这个地方,本人使用的是射手网和各种字幕网站采集和清洗过的英文电影电视剧字幕的中英平行语料。你要是只是想试一试moses而又没有语料的话,可以wgethttp://www.statmt.org/wmt12/training-parallel.tgz进行下载,这里面是欧洲各国语言(德语,英语,法语等)的平行语料库,你可以用作测试。
在进行语料训练之前,要先对我们的平行语料做一些预处理,主要包括以下以下步骤:
tokenisation:这一步主要是在单词和单词之间或者单词和标点之间插入空白,以便于后续识别和其他操作。
truecasing:初始每句话的字和词组都被转换为没有格式的形式(例如统一为小写)。这有助于减少数据稀疏性问题。
cleaning:长句和空语句可引起训练过程中的问题,因此将其删除,同时删除显不对齐句子删除。
对了,对于平行语料的中文部分的话,在训练之前一定要注意要先分好词,这样后面使用giza-pp进行对齐训练的时候才能精准对齐词、词组和短语。我使用的是中科院ictclas分词系统,但是又licence过期的可能,你也可以使用Ansj,基本是将ictlas用java重写了一遍,词库基本不变,分词的程序我可以在之后的文章里给出。
我的语料存在/data/traing_500m_data/中,则执行以下指令即可:
tokenisation:
/home/yaoqiang/moses/moses_binary/scripts/tokenizer/tokenizer.perl-\len‐threads8<all_movie_data_20130422_en
>all_movie_data_20130422.tok.en
/home/yaoqiang/moses/moses_binary/scripts/tokenizer/tokenizer.perl-\lzh‐threads8<all_movie_data_20130422_zh
>all_movie_data_20130422.tok.zh
Truecaser和truecasing:
/home/yaoqiang/moses/moses_binary/scripts/recaser/train-truecaser.perl--modeltruecase-model.en--corpus\
all_movie_data_20130422.tok.en
/home/yaoqiang/moses/moses_binary/scripts/recaser/train-truecaser.perl--modeltruecase-model.zh--corpus\
all_movie_data_20130422.tok.zh
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\model.en<all_movie_data_20130422.tok.en\
>all_movie_data_20130422.true.en
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\
model.zh<all_movie_data_20130422.tok.zh\
>all_movie_data_20130422.true.zh
cleaning:
/home/yaoqiang/moses/moses_binary/scripts/training/clean-corpus-n.perlall_movie_data_20130422.truezhen\
all_movie_data_20130422.clean180
2语言模型训练
首先,我前面预处理过的语料已经存储在/data/train_500m_data/文件夹下了。
再说一下,这里要训练生成的语言模型(LM)是用来确保最后翻译后流畅的输出的,所以它是关于目标语言(这里是中翻英,即英语)的。Irstlm的文献给出很多命令行选项的详细说明,但以下的指令足以建立一个合适的3-gram语言模型,消除singletons,并使用改进的Kneser-Ney方法进行平滑了,且添加句子边界符号:
/home/yaoqiang/moses/moses_binary/training-tools/irstlm/bin/add-start-\
end.sh<all_movie_data_20130422.true.en>all_movie_data_20130422.sb.en
exportIRSTLM=$HOME/irstlm;/home/yaoqiang/moses/moses_binary/training-tools/irstlm/bin/build-lm.sh-\
iall_movie_data_20130422.sb.en-t./tmp-p-simproved-kneser-ney-oall_movie_data_20130422.lm.en
/home/yaoqiang/moses/moses_binary/training-tools/irstlm/bin/compile-lm--\
textyesall_movie_data_20130422.lm.en.gzall_movie_data_20130422.arpa.en
经过这一步之后我们会得到一个*.arpa.en格式的语言模型文件,接下来我们将会使用KenLM对其进行二值化(这样的话载入的时间会更快)。
这一步的指令如下:
/home/yaoqiang/moses/moses_binary/bin/build_binary all_movie_data_20130422.arpa.enall_movie_data_20130422\.blm.en
我们可以在这一步之后测试一下训练的模型是否正确,运用如下的linux命令:
echo"isthisanEnglishsentence?"|/home/yaoqiang/moses/moses_binary/bin/queryall_movie_data_20130422.blm.en
我的测试结果如下,表明生产模型成功:
root@yaoqiang-KVM:/data/train_500m_data#echo"isthisanEnglishsentence?"|/home/yaoqiang/moses/moses_binary/bin/queryall_movie_data_20130422.blm.en
Loadingstatistics:
user 0
sys 0.040002
VmPeak:217224kB
VmRSS:215600kB
is=282-2.221 this=1403-1.03372 an=4513-2.22049 English=75172-3.12162 sentence=82562-3.97998?=602-1.19407 </s>=163-0.0103952 Total:-13.7813OOV:0
Afterqueries:
user 0
sys 0.040002
VmPeak:217232kB
VmRSS:215600kB
Totaltimeincludingdestruction:
user 0
sys 0.052003
VmPeak:217232kB
VmRSS:656kB
3翻译模型训练
经过上述这一系列过程之后,我们可以开始训练我们的翻译模型了。接下来这一条linux命令,将完成包括词对齐(使用GIZA++),短语提取和评分,创建词汇化的重新排序表以及创建你的moses的配置文件(moses.ini)等一系列任务。我建议你建立适当的目录结构,然后运行训练命令,我的目录结构如下指令中所述。记得最后将训练过程记录在日志中:
mkdir/data/translating_working
cd/data/translating_working
nohupnice/home/yaoqiang/moses/moses_binary/scripts/training/train-model.perl-cores8-root-dirtrain-\
corpus/data/train_500m_data/all_movie_data_20130422.clean-fzh-een-alignmentgrow-diag-final-and-\reorderingmsd-
bidirectional-fe-lm0:3:/data/train_500m_data/all_movie_data_20130422.blm.en:8-external-bin-\ dir/home/yaoqiang/moses/moses_binary/training-tools/giza>&training_log.out&
其中参数-cores8将服务器中8个cpu全都用上了。
这一步的时间稍长,主要是前期giza-pp对词和短语对齐训练耗时,比如说我这里训练的语料大概是中英文各300m左右,训练完成的时间大概是36个小时,我这里使用的是12G内存8核cpu的服务器,所以如果你急着看到训练结果的话,加载的语料库要稍小一些,上次加载的语料库大概是100万句子(30m左右),训练了将近4个小时。
上述过程完成后,你可以在translating_working/train/model文件夹下找到一个moses.ini配置文件,这是需要在moses解码时使用到的。但这里有几个问题,首先是它的加载速度很慢,这个问题我们可以通过二值化(binarising)短语表和排序表来解决,即编译成一个可以很快地加载的格式。第二个问题是,该配置文件中moses解码系统用来权衡不同的模型之间重要程度的权重信息都是刚初始化的,即非最优的,如果你打开moses.ini文件看看的话,你会看到各种权重都被设置为默认值,如0.2,0.3等。要寻找更好的权重,我们需要调整(tuning)翻译系统,即下一步。
4调整(tuning)翻译模型
这是所有步骤中过程进行的最慢的一部分,所以你大可在这一步进行的时候,放张椅子,躺下来吃点东西读点莫言的小说啥的。调整(tuning)过程需要一份不同于训练数据的行语料,这个的话又要靠你自己收集了(如果你训练的时候用的是上面提供的欧洲平行语料的话,在相同的网址你还可以下到一些用于tuning的数据),另外一个简单的处理方法就是在训练的时候只用全部平行语料的一大部分,例如95%,而剩下的5%用于调优这一步。以下是用于调整的语料准备的过程(同样需要先将数据进行tokenlizer、truecase和长度限定等处理):
/home/yaoqiang/moses/moses_binary/scripts/tokenizer/tokenizer.perl-len<dev/rwx.web.en>test.tok.en
/home/yaoqiang/moses/moses_binary/scripts/tokenizer/tokenizer.perl-lzh<dev/rwx.web.zh>test.tok.zh
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\model.en<test.tok.en>test.true.en
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\model.zh<test.tok.zh>test.true.zh
/home/yaoqiang/moses/moses_binary/scripts/tokenizer/tokenizer.perl-\len<tuning_data_20130422_en>tuning_data_20130422.tok.en
/home/yaoqiang/moses/moses_binary/tokenizer/tokenizer.perl-\lzh<tuning_data_20130422_zh>tuning_data_20130422.tok.zh
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\model.en<tuning_data_20130422.tok.en>tuning_data_20130422.true.en
/home/yaoqiang/moses/moses_binary/scripts/recaser/truecase.perl--modeltruecase-\model.zh<tuning_data_20130422.tok.zh>tuning_data_20130422.true.zh
接下来我们可以开始tuning我们moses解码器配置文件中的权重了:
nohupnice/home/yaoqiang/moses/moses_binary/scripts/training/mert-\moses.pl../corpus/test.true.zh../corpus/test.true.en\/home/yaoqiang/moses/moses_binary/bin/mosestrain/model/moses.ini--mertdir../moses_binary/bin/&>mert.out&
可在最后加上--decoder-flags="-threads8"以使用多个线程,因为这个过程非常非常缓慢,你当然要使用能使用上的所有资源。
5测试系统
你现在就可以通过/home/yaoqiang/moses/moses_binary/bin/moses-f/data/train_500m_data/translating_working/mert-work/moses.ini来运行moses了,你可以输入你最喜欢的中文句子(分好词的),moses将会将其翻译成为对应的英文句子。
哦,对了,如果你想让运行的速度加快的话,你可能还需要稍微修改下/data/train_500m_data/translating_working/mert-work/文件夹下的moses.ini文件。将其中的语言模型和reordering表载入地址换做二值化后的语言模型和reordering表,如下:
0005/data/train_500m_data/translating_working/train/model/phrase-table.gz
变成
1005/data/train_500m_data/translating_working/binarised-model/phrase-table
0-0wbe-msd-bidirectional-fe-allff6/data/train_500m_data/translating_working/train/model/reordering-table.wbe-msd-bidirectional-fe.gz
变成
0-0wbe-msd-bidirectional-fe-allff6/data/train_500m_data/translating_working/binarised-model/reordering-table
至此为止,moses从编译到训练语言模型到训练翻译模型,再到配置文件中权重的调整和最后的测试都已讲完了,有兴趣的话你可以自己下载相关代码和平行语料测试一下!
下面是运行moses后的一个小结果,大家可以看看:
分享到:
相关推荐
"Moses统计机器翻译系统实验过程" Moses统计机器翻译系统是基于统计机器翻译的开源系统,...Moses统计机器翻译系统的实验过程包括环境搭建、语料库的准备、标注、语言模型的训练、翻译模型的训练、调优和测试等步骤。
- 引言:介绍Moses,概述技术、组成、开发、使用和历史。 - 第1.3节:提供关于加入Moses项目的各种方式,包括邮件列表、建议、贡献和参与项目。 - 第2章:基本设置和安装,介绍了如何开始使用Moses,包括下载、安装...
MOSES算法使用Lagrange方程来描述rigid body mechanics和其他复杂系统。 B. 广义自由度 MOSES算法也使用广义自由度来描述复杂系统的运动。广义自由度是一种数学工具,用于描述复杂系统的自由度。 C. 插值和近似 ...
moses文档 指导更好的使用机器翻译系统moses
该系统具有附加参数、在线特征的权重和在线算法的学习率。 这些参数可以作为 1. "weight-ol <weight>" : is the initial weight of the online feature function2. "f_learningrate <rate>" : is the learning rate...
通常,"MOSES"可能是“Multi-Objective SysteM for Evaluation and Selection of Typefaces”的缩写,这是一个用于多目标字体评估和选择的系统。在IT行业中,字体设计和选择对于用户界面(UI)和用户体验(UX)至关...
NiuTrans开源系统在国际上具有较高的知名度,与爱丁堡大学的Moses系统并列为目前国际上支持统计机器翻译模型最全的两套系统之一。然而,对于非专业人士,这些技术细节可能并不重要,更关键的是如何实际操作搭建起一...
NiuTrans开源系统在国际上具有较高的知名度,被公认为全球两大支持统计机器翻译模型最全的系统之一,与爱丁堡大学的Moses系统并列。尽管这些信息对于专业学者具有价值,但对于非专业人士而言,更关注的是如何快速...
**摩西标记器(Moses Tagger):** 摩西标记器是专为处理MOSES格式语料库而设计的一款工具。MOSES是一种开源的统计机器翻译系统,广泛...通过合理的使用和配置,我们可以利用这个工具提升机器翻译系统的质量和效率。
搜狗在机器翻译模型的训练中使用了大量的数据,包括中英对照翻译数据、人体骨骼关键点标注数据和图片场景标注数据。在数据预处理方面,进行了中文分词和BPE(Byte Pair Encoding)子词切分,英文则做了token处理、转...
### 统计机器翻译开源软件概述 #### 引言 统计机器翻译(Statistical Machine Translation, ...随着技术的不断进步,未来我们可以期待更多高质量的开源工具和系统的出现,进一步推动统计机器翻译技术的应用和发展。
术语“进化”是指MOSES使用遗传编程技术来“进化”新程序。 可以将每个程序视为一棵树(类似于“决策树”,但允许中间节点为任何编程语言构造)。 进化的过程是从一组合理适合的个体中选择一棵示例树
在实际应用中,这些模型可以与其他SMT系统(如Moses或Pharaoh)结合,以实现端到端的翻译。 5. **扩展与优化**:由于`mgiza`提供了Python接口,研究者和开发者可以根据需求对其进行修改和扩展。例如,可以添加新的...
"356305227moses-2007-01-10.zip" 是Moses开源机器翻译系统的旧版本,Moses是一个流行的统计机器翻译系统,特别适合处理短语性的翻译模型。它支持多种语言对,并且有一个活跃的社区提供支持和改进。 综上所述,这些...
Giza++是一款强大的工具,主要用于在自然语言处理(NLP)领域执行词语对齐任务。在机器翻译(Machine Translation, MT)和其他相关应用中,词语对齐...正确地使用和理解Giza++,可以极大地推动跨语言技术的发展和应用。
其中,"摩西核心项目"(Moses Core Project)是一个开源的统计机器翻译系统,它为开发者和研究者提供了构建和优化机器翻译模型的强大平台。 摩西核心项目起源于2007年,由约翰霍普金斯大学、卡内基梅隆大学和IBM等...
在这个数据集中,Moses可以被用来进行数据清洗、分词、对齐以及模型训练等一系列操作,帮助用户高效地构建和优化机器翻译系统。 这个压缩包的使用并非一蹴而就,它需要经过多个步骤。首先,用户需要下载并解压文件...
`Moses`是一个常用的开源统计机器翻译系统,可以用于构建和优化这样的模型。 综上所述,Python提供了强大的工具集来辅助翻译科学论文,但需要结合专业知识和人工审校,才能达到理想的翻译效果。通过合理地利用这些...