关于Moses训练的那些事
前面已经将moses从编译到训练测试的整体流程过了一遍,想必大家对这个工具有了一个大致的理解。这里再详细说一些东西,可能能帮助大家对moses有更深的认识。
也许你在训练过程中会遇到一定的问题,事实上,训练总共分为7个steps(步骤),有些情况下(尤其是语料非常大的时候,这个本人非常有体会,昨天训练了700万句平行语料数据,结果...)执行到某些步骤的时候会停下来,这样后续步骤无法从该步骤获得数据,整个过程就停止了。也就是说:你训练到了一半!!!这是很蛋疼的一个问题,因为从头训练意味着要大量的时间,而且你还是不能保证整个步骤是流畅的,所以本节的内容可能对你帮助很大。你可以通过它了解到如何分步进行训练,也可以在训练中断时判断目前训练进度以及下一步改进型训练的哪一个小步骤了。
1训练过程中产生的文件和内容
言归正传,首先给大家介绍一下使用moses训练后的目录以及目录下的文件,在调用moses训练命令之后,如果训练全程都很顺利,那么在你的train文件夹下,会有四个文件夹Corpus、giza.zh-en、giza.en-zh、model,其目录下文件如下所示,在后续第2节会介绍每个文件夹中哪些文件分别是训练那个阶段获得的:
上述各目录结构内容截图如下所示:
lTrain文件夹下:
lTrain/corpus文件夹下:
lTrain/giza.en-zh文件夹下:
lTrain/giza.zh-en文件夹下:
lTrain/model文件夹下:
下面我们看看以上后4个文件夹下的东西的内部结构是什么样的:
Ø首先我们看看corpus下的内容:
Ø 上面是corpus下的英文部分,中文部分的文件也是类似的:
Ø下面我们看看giza.en-zh下的文件:
相应的giza.zh-en文件夹下是反过来相对应的对齐信息,这里就不一一截图列举了。
下面我们看看非常重要的部分,train/model文件夹下内容的内部结构(这里不一一详细说明,后续章节会提到这里文件内容中每个变量具体指代的含义):
aligned.grow-diag-final-and文件记录的是词和短语的对齐信息,如下
extract.inv.sorted.gz如下
extract.o.sorted.gz
extract.sorted.gz
lex.e2f
lex.f2e
moses.ini
phrase-table.gz
reordering-table.wbe-msd-bidirectional-fe.gz
2训练过程及中间步骤
整个训练的命令如之前所述,总结下来,最基本的格式是
train-model.perl--root-dir.--fzh--een--corpuscorpus/data>&LOG
其中有一些可配置参数,这个在之后会提到。这是一条总体的训练命令,也就是说敲下这条命令之后,如果中途不出问题,训练完成之后我们就可以完整的得到上述所说的四个文件夹及全部文件。事实上,moses的训练是可以分作9个步骤的,你可以通过--first-step和--last-step任意选择你需要的训练步骤,9个步骤分别如下所示(右侧为某次训练时所花费时间):
1)Preparedata(45分钟)
2)RunGIZA++(16小时)
3)Alignwords(2.5小时)
4)Getlexicaltranslationtable(30分钟)
5)Extractphrases(10分钟)
6)Scorephrases(1.25小时)
7)Buildreorderingmodel(1小时)
8)Buildgenerationmodels
9)Createconfigurationfile(1秒)
如果我们需要从第4步开始,则使用train-model.perl[...]--first-step4即可以满足我们的需求。
如果你的电脑是多核的,你可以试着加上--parallel参数,这将加快你的训练过程。
上述9个步骤中,起始步骤必须是7之前。下面我将详述以上9个步骤。
2.1第一步:preparedata
在进行第二步之前,我们的平行语料库需要先被转换成一种适用于GIZA++工具包的格式。这一步之后会有两个词汇文件被生成,这两个文件中定量地记录了我们的平行语料库中标点和词汇词组的个数。如下所示:
==>corpus/en.vcb<==
1UNK0
2the1085527
3.714984
4,659491
5of488315
6to481484
7and352900
8in330156
9is278405
10that262619
==>corpus/zh.vcb<==
1UNK0
2我1578046
3他的614454
4你们631793
GIZA++在处理的时候还需要我们将词划分到词类里(wordstobeplacedintowordclasses)。这是通过调用mkcls程序来自动完成的。词类只在GIZA++IBM重新排序模型中用到。词类文件格式如下所示:
>headcorpus/en.vcb.classes
!14
"14
#30
%31
&10
'14
(10
)14
+31
,11
2.2第二步:运行GIZA++
GIZA++是IBM模型的一个免费实现工具。他的输入需要如第一步建立的词对齐样式。
运行GIZA++这一步是整个训练过程中最耗时的一步。它同时也需要大量的内存(如果你要训练大的平行语料,我建议你在64位系统上进行,否则3.5G的内存限制很有可能让你这一步失败,我个人训练的服务器内存是12GB的)。
GIZA++能处理获得IBM模型4的转换表,但我们只对词对齐文件感兴趣,如下所示(这是moses官网训练的德语和英语对齐的一个示例,中文和英文的对齐方式可以看我上一节列举的对应文件的截图):
>zcatgiza.de-en/de-en.A3.final.gz|head-9
#Sentencepair(1)sourcelength4targetlength3alignmentscore:0.00643931
wiederaufnahmedersitzungsperiode
NULL({})resumption({1})of({})the({2})session({3})
#Sentencepair(2)sourcelength17targetlength18alignmentscore:1.74092e-26
icherklaeredieamdonnerstag,den28.maerz1996unterbrochenesitzungsperiode
deseuropaeischenparlamentsfuerwiederaufgenommen.
NULL({7})i({1})declare({2})resumed({})the({3})session({12})
of({13})the({})european({14})parliament({15})
adjourned({111617})on({})thursday({45}),({6})28({8})
march({9})1996({10}).({18})
#Sentencepair(3)sourcelength1targetlength1alignmentscore:0.012128
begruessung
NULL({})welcome({1})
这里的例子来源于moses官网,德语和英语平行语料训练的结果,在这个文件中,一些统计信息和德语句子后,对应的英语句子是词对词与德语词对齐的,例如:第一个词resumption({1})与德国第一个字wiederaufnahme对齐。
注意每个英语单词可能是对齐的多个德语词,但每个德语词只能和一个英语单词对齐。在逆GIZA++训练过程中这个限制是相反的,即一个英语词对应多个德语词,如下:
>zcatgiza.en-de/en-de.A3.final.gz|head-9
#Sentencepair(1)sourcelength3targetlength4alignmentscore:0.000985823
resumptionofthesession
NULL({})wiederaufnahme({12})der({3})sitzungsperiode({4})
#Sentencepair(2)sourcelength18targetlength17alignmentscore:6.04498e-19
ideclareresumedthesessionoftheeuropeanparliamentadjournedonthursday,
28march1996.
NULL({})ich({1})erklaere({210})die({4})am({11})
donnerstag({12}),({13})den({})28.({14})maerz({15})
1996({16})unterbrochene({3})sitzungsperiode({5})des({67})
europaeischen({8})parlaments({9})fuer({})wiederaufgenommen({})
.({17})
#Sentencepair(3)sourcelength1targetlength1alignmentscore:0.706027
welcome
NULL({})begruessung({1})
2.3第三步:AlignWords
词对齐的过程建立基于两个GIZA++对齐步骤,可以使用一系列的探索法。其中默认的探索法是grow-diag-final(生长-诊断-结束),该过程由两个对齐的词开始,逐步添加新的对齐词直至完成句子的对齐。
其余的对齐探索方法如下所示:
Øintersection
Øgrow(onlyaddblock-neighboringpoints)
Øgrow-diag(withoutfinalstep)
Øunion
Øsrctotgt(onlyconsiderword-to-wordalignmentsfromthesource-targetGIZA++alignmentfile)
Øtgttosrc(onlyconsiderword-to-wordalignmentsfromthetarget-sourceGIZA++alignmentfile)
这些方法之间可以通过--alignment参数进行选择和切换.
默认的grow-diag-final探索法的对齐过程伪代码如下所示:
GROW-DIAG-FINAL(e2f,f2e):
neighboring=((-1,0),(0,-1),(1,0),(0,1),(-1,-1),(-1,1),(1,-1),(1,1))
alignment=intersect(e2f,f2e);
GROW-DIAG();FINAL(e2f);FINAL(f2e);
GROW-DIAG():
iterateuntilnonewpointsadded
forenglishworde=0...en
forforeignwordf=0...fn
if(ealignedwithf)
foreachneighboringpoint(e-new,f-new):
if((e-newnotalignedorf-newnotaligned)and
(e-new,f-new)inunion(e2f,f2e))
addalignmentpoint(e-new,f-new)
FINAL(a):
forenglishworde-new=0...en
forforeignwordf-new=0...fn
if((e-newnotalignedorf-newnotaligned)and
(e-new,f-new)inalignmenta)
addalignmentpoint(e-new,f-new)
下面的图是对齐的例子:
在上图的对齐基础上,加上了一些新的对齐词组并调整,如下图:
但是上图中两个动词的对齐方式混淆了,resumed和unterbrochene对齐,adjourned和wiederaufgenommen对齐,但事实上,实际的对齐结果是相反的。
我们来看一看,词语对齐之后的结果文件,也许对本节的认识会深一些:
==>model/aligned.de<==
wiederaufnahmedersitzungsperiode
icherklaeredieamdonnerstag,den28.maerz1996unterbrochenesitzungsperiode
deseuropaeischenparlamentsfuerwiederaufgenommen.
begruessung
==>model/aligned.en<==
resumptionofthesession
ideclareresumedthesessionoftheeuropeanparliamentadjournedon
thursday,28march1996.
welcome
==>model/aligned.grow-diag-final<==
0-00-11-22-3
0-01-12-33-103-114-115-127-138-149-1510-211-412-512-613-7
14-815-916-917-16
0-0
2.4第四步:GetLexicalTranslationTable(获得词汇翻译概率表)
基于上一步得到的对齐词汇表,很容易估计得到一个最大似然词汇翻译表。我们估计的W(E|F)以及逆W(F|E)字翻译表。下面为europa这个德语单词翻译成英文的最佳翻译结果:
>grep'europa'model/lex.f2n|sort-nrk3|head
europeeuropa0.8874152
europeaneuropa0.0542998
unioneuropa0.0047325
iteuropa0.0039230
weeuropa0.0021795
eueuropa0.0019304
europeanseuropa0.0016190
euro-mediterraneaneuropa0.0011209
europaeuropa0.0010586
continenteuropa0.0008718
2.5第五步:ExtractPhrases(抽取短语)
在这一步中,所有的短语被扔进了一个大的文件中,文件从前那往后读的部分内容如下所示:
>headmodel/extract
wiederaufnahme|||resumption|||0-0
wiederaufnahmeder|||resumptionofthe|||0-01-11-2
wiederaufnahmedersitzungsperiode|||resumptionofthesession|||0-01-11-22-3
der|||ofthe|||0-00-1
dersitzungsperiode|||ofthesession|||0-00-11-2
sitzungsperiode|||session|||0-0
ich|||i|||0-0
icherklaere|||ideclare|||0-01-1
erklaere|||declare|||0-0
sitzungsperiode|||session|||0-0
可以从上面看到,每一行的格式都是固定的:德语,英语,词对齐时候的点标记。点标记是一对一对的。哦,对了,还有一个逆的extract.inv也产生了,里面的内容和上述文件刚好是相反的。
2.6第六步:ScorePhrases(短语概率打分)
随后,从存储的短语翻译对中我们可以得到一张翻译表。需要有这个步骤而不是直接用翻译表替代短语翻译表,是因为较大的翻译模型中,短语翻译表在内存中存不下。幸运的是,我们不必在内存中存储整个短语翻译表,我们可以将其构建在磁盘上。
估计的短语翻译概率φ(E|F)我们的步骤如下:首先,提取文件排序。这将确保一个外国短语的所有英语短语翻译文件是在彼此旁边的。因此,我们可以处理文件中某一个词的时候,对其翻译做收集和计数,并计算φ(E|F),其中F为外国短语(源语言短语).估计φ(F|E)时,倒排文件要进行排序,φ(F|E)计算时,一个英语短语估测一次。
在得到短语翻译概率分布φ(F|E)和φ(E|F)之后,有一些其他的短语翻译打分结果可以计算,例如词汇权重,单词惩罚,短语惩罚等。目前我们在计算的时候,词汇权重是正向反向翻译概率的叠加,再加上五分之一分的短语惩罚。下面是其中文件的示例:
>grep'|ineurope|'model/phrase-table|sort-nrk7-t\||head
ineuropa|||ineurope|||0.8290070.2079550.8014930.4924022.718
europas|||ineurope|||0.02510190.0662110.03425060.00795632.718
indereuropaeischenunion|||ineurope|||0.0184510.001001260.03195840.01968692.718
ineuropa,|||ineurope|||0.0113710.2079550.2078430.4924022.718
europaeischen|||ineurope|||0.006865480.07543380.0008637910.0461282.718
imeuropaeischen|||ineurope|||0.005792750.009146010.02412870.01624822.718
fuereuropa|||ineurope|||0.004934560.01323690.03721680.05114732.718
ineuropazu|||ineurope|||0.004290920.2079550.7142860.4924022.718
aneuropa|||ineurope|||0.003861830.01144160.3529410.1184412.718
dereuropaeischen|||ineurope|||0.003432740.001415320.000995830.0005121592.718
在现在的moses翻译系统中,我们计算了五种不同的翻译概率,分别是:
1.inversephrasetranslationprobability反向短语概率φ(f|e)
2.inverselexicalweighting反向词汇权重lex(f|e)
3.directphrasetranslationprobability正向短语翻译概率φ(e|f)
4.directlexicalweighting正向词汇权重lex(e|f)
5.phrasepenalty短语惩罚度(alwaysexp(1)=2.718)
默认的情况下我们会使用到上述5中概率,但是也许你只想使用上述概率中的一部分,这样的话,可以通过以下的参数来作调整:
·NoLex--donotuselexicalscores(removesscore2and4)
·OnlyDirect--donotusetheinversescores(removesscore1and2)
·NoPhraseCount--donotusethephrasecountfeature(removesscore5)
这在训练的时候,在调用train-model.perl后添加-score-options调用上述参数可以做到:
train-model.perl[...othersettings...]-score-options'--NoLex'
分享到:
相关推荐
"Moses统计机器翻译系统实验过程" Moses统计机器翻译系统是基于统计机器翻译的开源系统,...Moses统计机器翻译系统的实验过程包括环境搭建、语料库的准备、标注、语言模型的训练、翻译模型的训练、调优和测试等步骤。
MOSES算法使用Lagrange方程来描述rigid body mechanics和其他复杂系统。 B. 广义自由度 MOSES算法也使用广义自由度来描述复杂系统的运动。广义自由度是一种数学工具,用于描述复杂系统的自由度。 C. 插值和近似 ...
Moses 是一款基于统计的机器翻译系统,它是由位于爱丁堡大学的 Hieu Hoang 和 Philipp Koehn 开发,并在约翰霍普金斯大学的夏季研讨会上扩展,以及在 EuroMatrix 和 GALE 项目资助下进一步发展的。该解码器是完整...
通常,"MOSES"可能是“Multi-Objective SysteM for Evaluation and Selection of Typefaces”的缩写,这是一个用于多目标字体评估和选择的系统。在IT行业中,字体设计和选择对于用户界面(UI)和用户体验(UX)至关...
moses文档 指导更好的使用机器翻译系统moses
MOSES已用于多种商业应用中,包括对医疗患者和医师临床数据的分析,以及多种不同的金融系统。 OpenCog还使用它来学习自动行为,动作和动作,以响应人工生命虚拟代理(例如,宠物狗游戏的化身)的感知刺激。 未来的...
#### 四、重要知识点详解 ##### 1. 信号分类与预处理 - **时间域与频率域信号**:介绍信号在不同域的表现形式,以及它们之间的转换方法。 - **信号预处理**:包括滤波、去噪等步骤,为后续的谱分析做好准备。 ###...
MOSES是一种开源的统计机器翻译系统,广泛应用于自动翻译领域。它允许用户利用大量双语数据训练模型,从而实现高质量的文本翻译。在机器翻译领域,语料库的预处理是至关重要的步骤,因为这直接影响到最终模型的性能...
《信号谱分析》是由Petre Stoica和Randolph Moses...综上所述,Petre Stoica和Randolph Moses合著的《信号谱分析》是一本系统深入地介绍信号谱分析理论与应用的教材,非常适合信号处理领域的学者和工程师学习和参考。
In the given excerpt from Chapter 6 of "Spectral Analysis of Signals" by Petre Stoica and Randolph Moses, the focus is on spatial methods and specifically the modulation-transmission-demodulation ...
Moses This book presents an introduction to spectral analysis that is designed for either course use or self-study. Clear and concise in approach, it develops a firm understanding of tools and ...
该系统具有附加参数、在线特征的权重和在线算法的学习率。 这些参数可以作为 1. "weight-ol <weight>" : is the initial weight of the online feature function2. "f_learningrate <rate>" : is the learning rate...
此外,Moses还包含一些其他实用的工具函数,如`first`和`last`用于获取数组的第一个和最后一个元素,`compact`用于移除数组中的空值,`isEqual`用于比较两个值是否相等,`isArray`和`isObject`用于判断值是否为数组...
总之,接收TM程序通过C语言和Synclink USB适配器实现了从MOSES系统接收图像数据的功能,这一过程涉及硬件接口、通信协议、数据解析和图像处理等多个方面,展示了IT技术在实际应用中的复杂性和灵活性。对于有志于深入...
MOSES已用于多种商业应用中,包括对医疗患者和医师临床数据的分析,以及多种不同的金融系统。 OpenCog还使用它来学习自动行为,动作和动作,以响应人工生命虚拟代理(例如,宠物狗游戏的化身)的感知刺激。 未来的...
Moses存储库已移动:https://github.com/moses-smt/mosesdecoder用于统计机器翻译的基于短语的分解式,分层和语法解码器