来自摩西

摩西:因子教程

使用因子模型教程

注释:此描述与训练脚本的实际工作之间可能存在一些差异。

-训练无系数模型
-使用POS标签训练模型
-使用生成和转换步骤训练模型
-训练形态分析和生成模型
-使用多条解码路径训练模型

要完成本教程,首先需要将数据放在适当的位置。这些说明还假设您在可执行路径中有训练脚本和解码器。

您可以获得以下数据:

有关培训脚本的更多信息,请查看文档,该文档链接在右侧导航栏的“training”(培训)下。

训练无系数模型

语料库包包含语言模型和带有POS和引理因子的并行语料库。在使用因子模型之前,让我们先训练一个传统的基于短语的模型:

%列车模型.perl\--根dir无因子\--语料库因素语料库/项目辛迪加\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--外部-内部目录/工具\--输入-系数-最大4

这将在目录中创建一个基于短语的模型无系数/模型大约20分钟(在2.8GHZ机器上)。对于只需几分钟(结果更糟)的快速训练,只需使用语料库中的前1000个句子对,包含在系数化公司/项目联合体1000.

%列车模型.perl\--根dir无因子\--语料库因子-corpus/proj-syndicate.1000\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--外部-内部目录/工具\--输入-系数-最大4

这将创建一个典型的基于短语的模型,如所创建的配置文件中所指定的那样摩西·伊尼。此处是文件中指向短语表的部分:

[功能]短语定义内存。。。路径=//短语table.gz。。。

您可以查看生成的短语表,它通常以垃圾开始,但偶尔会包含一些不错的条目。分数确保在解码过程中优先选择好的条目。

! ||| ! ||| 1 1 1 1 2.718“(|||”(||| 1 0.856401 1 0.779352 2.718”),新电影|||“一部新电影||| 1 0.0038467 1 0.128157 2.718“),ein neuer filmüber”关于0.000831718 1 0.0170876 2.71的新电影[...]碎片|||发行|||0.25 0.285714 0.25 0.166667 2.718碎片|||问题||0.75 0.555556 0.75 0.416667 2.718

使用POS标签训练模型

看看培训数据。每个单词不仅由其表面形式表示(正如您在原始文本中所期望的那样),还包含其他因素。

%tail-n1因子语料库/项目辛迪加。??==>系数-公司/项目-联合.de<==korruption|korruption|nn|nn.fem.cas.sg floriert|florieren|vvfin|vvfin.||每|每==>系数公司/项目联合<==腐败nn繁荣nns。

德国因素包括

英国因素包括

让我们从简单开始,构建一个只在输出端添加目标部分语言因素的翻译模型:

%列车模型.perl\--根dir pos\--语料库因子-corpus/proj-syndicate.1000\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--lm 2:3:系数-系数/位置.lm\--平移系数0-0,2\--外部-内部目录/工具

这里,我们用指定--平移系数0-0,2翻译表的输入因子是(0)表面形式,输出因子是(1)表面形式和(2)词性。

[功能]短语定义内存。。。输入系数=0输出系数=0,2

生成的短语表看起来非常相似,但现在也包含英语部分的词性标签:

!|||!|.|||1 1 1 1 2.718" ( ||| "|" (|( ||| 1 0.856401 1 0.779352 2.718“),ein neuer film | | |”|“a | dt new | jj film |nn | | 1 0.00403191 1 0.128157 2.718“),ein neuer filmüber”|“a | dt new | jj film | nn about | in | | 1 0.000871765 1 0.0170876 2.718”[...]碎片|||问题|nn||0.25 0.285714 0.25 0.166667 2.718碎片|||问题|nn||0.75 0.625 0.75 0.416667 2.718

我们还指定了两种语言模型。除了基于表面形式的正则语言模型外,我们还有一个基于POS标记的第二语言模型。在配置文件中,这由LM部分中的两行表示:

[功能]KENLM名称=LM0。。。KENLM名称=LM1。。。

此外,还指定了两种语言模型权重:

[重量]LM0=0.5LM1=0.5

半语语言模型包括一些偏好,例如限定词-形容词后面可能跟一个名词,而限定词后面不太可能跟:

-0.192859 dt jj nn-2.952967 dt jj dt

此模型可以像普通的基于短语的模型一样使用:

%echo“普京-贝斯克雷布特·门兴”>在里面%moses-f pos/model/moses.ini<英寸[...]最佳翻译:普京|nnp描述了|vbz人|nns.|。[1111][总计=-6.049]<<0.000, -4.000, 0.000, -29.403, -11.731, -0.589, -1.303, -0.379, -0.556, 4.000>>[...]

在解码过程中,不仅仅是单词(普京),但也会生成部分对话(国家核计划).

让我们看看,如果我们输入一个以宾语开头的德语句子,会发生什么情况:

%echo“menschen beschreibt putin”>在里面%moses-f pos/model/moses.ini<英寸最佳翻译:people|nns描述|vbz putin|nnp.|。[1111][总计=-8.030]<<0.000, -4.000, 0.000, -31.289, -17.770, -0.589, -1.303, -0.379, -0.556, 4.000>>

现在,这不是一个很好的翻译。模型对重新排序的厌恶胜过了我们想出好翻译的能力。如果我们下调重新排序模型,我们可以得到更好的翻译:

%moses-f pos/model/mose.ini<in-d 0.2最佳翻译:普京|nnp描述了|vbz人|nns.|。[1111][总计=-7.649]<<-8.000, -4.000, 0.000, -29.403, -11.731, -0.589, -1.303, -0.379, -0.556, 4.000>>

请注意,这种更好的翻译主要是由部分语言模型驱动的,它更喜欢顺序nnp vbz nns。序列上的(-11.731)nns vbz nnp。(-17.770). 表面形式语言模型仅显示出轻微的偏好(-29.403 vs.-31.289)。这是因为以前从未见过这些单词相邻,所以语言模型几乎不需要使用。半言语言模型知道所涉及的名词的数量,并且喜欢单数名词先于单数动词(nnp vbz)单数动词前的复数名词(nns vbz).

为了强调这一点,即使使用降权重的重新排序模型,非系数模型也无法找到正确的转换:

%moses-f未计算系数/model/moses.ini<in-d 0.2人们描述普京。[1111][总数=-11.410]<<0.000, -4.000, 0.000, -31.289, -0.589, -1.303, -0.379, -0.556, 4.000>>

使用生成和转换步骤训练模型

现在,让我们用相同的因子训练一个稍有不同的因子模型。我们没有直接从德语输入表面形式映射到英语输出表面形式和词性,而是将其分为两个映射步骤,一个是将表面形式映射为表面形式的转换步骤,另一个是从输出端的表面形式生成词性的步骤:

%列车模型.perl\--根dir pos-decomposed\--语料库因子-corpus/proj-syndicate.1000\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--lm 2:3:因子语料库/位置lm\--平移系数0-0\--发电系数0-2\--解码-步骤t0,g0\--外部-内部目录/工具

现在,仅在曲面形状之间指定转换步骤(--平移系数0-0)并指定生成步骤(--发电系数0-2),将(0)表面形式映射到(2)词性。我们还需要指定映射步骤的应用顺序(--解码-步骤t0,g0).

除了与非系数短语表具有相同格式的短语表外,我们现在还有一个生成表。它在配置文件中引用:

[功能]生成。。。输入系数=0输出系数=2[重量]GenerationModel0=0.3 0

让我们看一下生成表:

%更多pos-decomposed/model/generation.0-2尼日利亚nnp 1.0000000.0008163已证明vbn 1.0000000.0021142发行号:1.0000000.0021591[...]控制vb 0.1666667 0.0014451控制nn 0.8333333 0.0017992[...]

开头不是很有趣。正如大多数人所说,尼日利亚人,经过证实的、和问题只出现在一个词类中,例如p(国家核计划|尼日利亚人) = 1.0000000. 然而,有些词,例如控制出现在多个词类中,例如基本形式动词(vb格式)和单个名词(nn个).

该表还包含反向转换概率p(尼日利亚人|国家核计划) = 0.0008163. 在我们的示例中,这可能不是一个非常有用的功能。它基本上伤害了公开课上的单词,尤其是不寻常的单词。如果我们不需要此功能,我们还可以将生成模型训练为交换机的单一功能--代型单.

训练形态分析和生成模型

翻译表面形式似乎是一个有点可疑的追求。处理相同引理的不同单词形式似乎没有多大意义,例如门施门兴不同。在最坏的情况下,我们只能看到其中一种单词形式,因此我们无法翻译另一种。这就是本例中实际发生的情况:

%echo“ein mensch beschreibt putin.”>在里面%moses.1430.srilm-f未计算系数/model/moses.ini<英寸a mensch | UNK | UNK |UNK描述普京。[11111][总计=-158.818]<<0.000, -5.000, -100.000, -127.565, -1.350, -1.871, -0.301, -0.652, 4.000>>

因子翻译模型允许我们创建在翻译过程中进行形态分析和分解的模型。现在让我们训练这样一个模型:

%列车模型.perl\--根dir变形原\--语料库因子-corpus/proj-syndicate.1000\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--lm 2:3:系数-系数/位置.lm\--平移系数1-1+3-2\--发电系数1-2+1,2-0\--解码-步骤t0、g0、t1、g1\--外部bin目录/工具

我们总共有四个映射步骤:

这使我们现在能够翻译上述句子:

%echo'ein|ein|art|art.indef.z mensch|mensch|nn|nn.masc.nom.sg\beschreibte | beschreibmen | vvfin | vvfin普京|普京| nn | nn.masc.cas.sg\.|.|per|per'>中%moses-f morphgen/model/moses.ini<英寸最佳翻译:a | a | dt individual | individial | nn descriptions | description | vbz\普京。[11111][总计=-17.269]<<0.000, -5.000, 0.000, -38.631, -13.357, -2.773, -21.024, 0.000, -1.386, \-1.796, -4.341, -3.189, -4.630, 4.999, -13.478, -14.079, -4.911, -5.774, 4.999>>

请注意,这是唯一可能的,因为我们已经在输出语言中看到了适当的单词形式。这个词个人在平行语料库中作为单个名词出现,作为埃因泽尔南为了克服这一局限性,我们可以在大型单语语料库上训练生成模型,在那里我们希望看到所有可能的单词形式。

使用多条解码路径训练模型

将翻译分解为形态分析和生成过程将使我们的翻译模型更加健壮。然而,如果我们以前见过一个关于表面形态的短语,那么最好利用这些丰富的证据。

上述模型很难翻译句子,因为它完全使用了源表面形式,依赖于翻译表面形式的属性。

在实践中,当我们允许两种方式并行翻译时,我们会更公平。这种模型是通过引入解码路径来训练的。在我们的示例中,一条解码路径是如上所述的形态分析和生成,另一条路径是表面形式到表面形式的直接映射(以及部分语言标记,因为我们使用的是部分语言标记语言模型):

%列车模型.perl\--语料库因子-corpus/proj-syndicate.1000\--root-dir变形备份\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--lm 2:3:系数-系数/位置.lm\--平移系数1-1+3-2+0,2\--发电系数1-2+1,2-0\--解码-步骤t0、g0、t1、g1:t2\--外部-内部目录/工具

除了附加的翻译表外,此命令与之前的培训运行几乎相同0-0,2及其作为不同解码路径的包含:t2.

翻译训练语料库中没有的表面形式的策略是翻译其引理。这对于从形态丰富的语言到简单语言的翻译尤其有用,例如德语到英语的翻译。

%列车模型.perl\--语料库因子-corpus/proj-syndicate.1000\--root-dir引理支持\--f de--e en(f de--e en)\--lm 0:3:系数化corpus/surface.lm\--lm 2:3:系数-系数/位置.lm\--平移系数0-0,2+1-0,2\--解码步骤t0:t1\--外部-内部目录/工具
检索自http://www2.statmt.org/moses/?n=moses.FactoredTutorial网站
页面上次修改时间:2016年5月29日,10:02 PM