一、Binary Phrase Tables with On-demand Loading

顾名思义,就是moses具有这样一个功能:将词表(phrase table)二值化并按所需(所需要翻译的内容)载入需要的部分。这是因为一个实际的翻译系统,其phrase table通常会非常大,大到很难一次性将其载入内存。

首先需要将标准ascii编码的phrase tables转化成二值化的格式,以下是其一个例子(标准phrase-table,有5个得分的那种):

export LC_ALL=C

cat phrase-table | sort | bin/processPhraseTable \

-ttable 0 0 - -nscores 5 -out phrase-table

其中参数:

· -ttable int int string -- 最后的string表示的是要转换的phrase table名称, 如果从标准输入读取,该参数设为 '-' ,如上例所示

· -out string -- 自己设定的输出的二值化ttable前缀名

· -nscores int --ttable中打分的个数(例如这里是5)

注意,若你的数据是UTF-8格式编码的,你需要先设定一下你的系统环境变量,即export LC_ALL=C,之后再sort(排序),当然如果你输入的phrase table是已经排序好的,可略过这一步。得到的二值化phrase table如下所示:

phrase-table.binphr.idx

phrase-table.binphr.srctree

phrase-table.binphr.srcvoc

phrase-table.binphr.tgtdata

phrase-table.binphr.tgtvoc

二、词对词对齐输出(Word-to-word alignment)

在做解码的时候,有两个参数可以帮助输出最后的短语对齐信息。这两个参数分别是:

-alignment-output-file [file]

这个将在做完翻译(解码)之后将对其信息写入file中。

-print-alignment-info-in-n-best

这个将在生成的n-best文件中,每一个结果之后都另起一行标明其对齐信息。

在这里又要提一下上面二值化得到的5个文件了,如果在对phrase table二值化的时候,其中.scrtree和.tgtdata的两个文件将以.wa后缀结尾。

三、产生n-Best文件

Moses自然也支持产生n-Best结果(前n个解码时搜索算法搜索到的路径)。你只需要在解码的时候指定生产的n-Best结果存储文件即可。

例如以下是一个示例命令:

moses -f moses.ini -n-best-list listfile 100 < in

执行命令之后,解码后的前100最佳结果将存储在listfile中。

打开n-best文件,可以看到起内部结构如下所示:

0 ||| we must discuss on greater vision .  ||| d: 0 -5.56438 0 0 -7.07376 0 0 \

lm: -36.0974 -13.3428 tm: -39.6927 -47.8438 -15.4766 -20.5003 4.99948 w: -7 ||| -9.2298

0 ||| we must also discuss on a vision .  ||| d: -10 -2.3455 0 -1.92155 -3.21888 0 -1.51918 \

lm: -31.5841 -9.96547 tm: -42.3438 -48.4311 -18.913 -20.0086 5.99938 w: -8 ||| -9.26197

0 ||| it is also discuss a vision .  ||| d: -10 -1.63574 -1.60944 -2.70802 -1.60944 -1.94589 -1.08417 \

lm: -31.9699 -12.155 tm: -40.4555 -46.8605 -14.3549 -13.2247 4.99948 w: -7 ||| -9.31777

N-best文件中的每一行都是由以下内容组成的(它们之间用|||分隔开):

Ø 翻译原句编码,例如以上的0表示这些结果都是第一个句子的n-best结果。

Ø 翻译结果。

Ø 单独成分打分

Ø 加权后总得分

这里需要注意的一点是,生成的n-best句子并非每一个都是不一样的,里面可能会完全一样的句子,但是得分不一样,这是因为他们有不同的短语组合方式。

当然,你完全可以只看不同的n-best翻译结果,这个只需要添加关键词distinct就可以完成。如下:

moses -f moses.ini -n-best-list listfile 100 < in

这样,在有相同的句子出现的时候,只出现概率最高的那句。

四、Minimum Bayes Risk Decoding

最小贝叶斯风险解码由Shankar Kumar和Bill Byrne在04年提出的HLT/NAACL上提出。大致说来,选择这种方法decoding(翻译)的时候,我们并不选择最大概率的翻译结果,此时我们输出最可能是正确结果的翻译(the translation that is most similar to the most likely translations),这需要一个相似度准则来估测相似性,Moses中使用到的是BLEU打分。

使用MBR做decoding非常简单,只需要在解码时添加参数-mbr即可。

moses -f moses.ini -mbr < in

MBR解码默认对top 200的翻译结果进行选择,选出其中满足最小贝叶斯风险的结果,当然这个数值是可以修改的,方法是通过参数-mbr-size指定,例如:

moses -f moses.ini -decoder-type 1 -mbr-size 100 < in

MBR解码需要翻译分数转换成为概率。默认的是使用log概率,但是通过scaling scores你可能可以得到更好地结果。例如可使用以下指令:

moses -f moses.ini -decoder-type 1 -mbr-scale 0.5 < in

五、Lattice MBR and Consensus Decoding

事实上,在EMR解码被提出后一些年内,研究人员对其进行扩展优化,使得翻译解码速度可以更快同时我们也可以得到更好的翻译结果。具体的论文可参见Tromble et al (2008), Kumar et al (2009) ,De Nero et al (2009) ,而ngram后验(ngram posteriors,是Lattice MBR解码所需的)和ngram期望(ngram expectations,是Consensus解码所需的)都是使用论文De Nero et al (2010)中所描述的一个算法计算得到的。现在moses所作的lattice MBR和consensus解码都是基于n-best重排序来完成的。话句话说,我们假设最佳的翻译结果一定在我们的n-best结果中。

下面介绍一下影响lattice mbr和consensus解码结果的一些可设定参数:

· -lmbr -- 使用Lattice MBR解码

· -con -- 使用Consensus 解码

· -mbr-size -- 后接数字,指明MBR解码时的n-best list取值大小

· -mbr-scale -- 后接数字,指明MBR解码时的幅度基准因子

· -lmbr-pruning-factor -- mean words per node in pruned lattice, 如论文Tromble et al (2008) 所述,默认值为30

而lattice MBR有更多的参数可以设定,也都是论文Tromble et al (2008) 所提到的,可通过以下参数设定:

· -lmbr-p -- 后接数值表明unigram精度(缺省情况下默认值为0.8)

· -lmbr-r -- 后接数值表明ngram准确比率(precision ratio , 默认值为0.6)

· -lmbr-                                  thetas THETAS Instead of specifying p and r, lattice MBR can be configured by specifying all the ngram weights and the length penalty (5 numbers). This is described fully in the references.

· -lmbr-map-weight WEIGHT The weight given to the map hypothesis (default 0)

从上述介绍可以发现,lattice MBR有非常多的参数需要设置,moses提供了一个字格搜索(grid search)的可执行文件。编译成功过后,你可以找到一个lmbrgrid存放在bin下面。一条典型的指令如下所示:

./lmbrgrid -lmbr-p 0.4,0.6,0.8 -lmbr-r 0.4,0.6,0.8 -mbr-scale 0.1,0.2,0.5,1 -lmbr-pruning-factor   \

30 -mbr-size 1000 -f moses.ini -i input.txt

运行之后得到的结果每一行的格式如下所示:

<sentence-id> ||| <p> <r> <pruning-factor> <scale> ||| <translation>

就目前的moses Lattice MBR实验结果看来,当以上参数挑选合适的时候,lattice MBR能使得系统得到的翻译结果有一个小程度的提高(阿拉伯语数据集上提高了0.4)。以下是moses团队对一定数量的句子实验得到的一个优化参数设置:

-lmbr-p 0.8 -lmbr-r 0.8 -mbr-scale 5 -lmbr-pruning-factor 50

六、处理不认识的短语

在moses解码的时候,有可能会遇到phrase table中没有的短语,而在默认的情况下,moses会将这未翻译的短语也放置在其余翻译好的短语中进行排序,结果可能会影响最后翻译出来的句子的短语顺序。这时候你可以选择放弃未翻译的短语(不将其放入翻译结果中)。

可以通过解码时加入参数-drop-unknown来实现该功能。

当我们实际完成翻译任务时,放弃未知的短语可以让最后的BLEU得分提高一些,但是人们对该句话的理解程度变化未知,有可能人们反而因缺失成分而更加不理解。

七、Early Discarding of Hypotheses

在束搜索(Beam Search)中,许多假说被创建,但其中一些太不合理以至于甚至无法进入堆中。对于它们中的许多,甚至在建立假设之前就可以明确它是没有用的。去掉它们会对速度的提升也有帮助,当然也有可能丢掉了一种合理的翻译可能性,我们一般将阈值设在0.5和1之间。用法如下指令所示:

-early-discarding-threshold THRESHOLD-- 使用提前丢弃一部分假设信息,设定的阈值为 THRESHOLD (default: 0 = not used)。

八、多翻译表和备选模型

Moses 允许使用多个翻译表,一共有两种方法可以使用它们。

1)两个翻译短语表(translation tables)用于评分的:这意味着,每一个翻译选项在每个表中都选一次,并各自打分。同时这样的做法,也要求对于翻译的内容,两张表中都要有对应的翻译结果:如果其中一个表中没有,则这种情况下没办法得到结果。

2)其中一个翻译短语表用于评分:翻译选项先从一个表中选,再从另一张表中收集其它选项。如果相同的翻译选项在多个表中发现,则每次遇见这种情况,一个新的不同的翻译结果都会被创建,但它们的分数是不同的。

在任何情况下,每一个翻译表有它自己的一组权重。

首先,你需要的指定moses.ini配置文件的[ttable-file]选项,例如:

[ttable-file]

0 0 5 /my-dir/table1

0 0 5 /my-dir/table2

第二步,你需要在配置文件中[weight-t]设置适当数量的权重,在我们的例子中,总共是10个参数(每个表5个)。

第三,你需要在配置文件[mapping]下指定这些表是如何使用的。像上文提到的,有两种使用方法:

使用两个表进行打分:

[mapping]

T 0

T 1

任一表的得分:

[mapping]

0 T 0

1 T 1

注:这里我们使用的其实是moses使用不同解码路径的能力。“T”前面的数字定义一条解码路径,因此,在第二个例子中是两个不同的指定的路径进行解码。解码路径也可能包含额外的映射的步骤,例如使用不同的因素(factors)的生成步骤和翻译的步骤。

另外请注意,有没有办法做到让系统“在翻译选项同时出现在两张表中时,使用两张表的结果。而当结果只出现在一张表时,只使用出现的这张表”。为了有效地使用这个选项,你可能会创建第三个表,其包含的上述两个翻译短语表的交集,并从每个表中删除共享短语对。

退避模型(Backoff Models):您可能想更倾向于使用第一个表,而只在没有翻译选项在第一个表时使用第二个翻译短语表。换句话说,第二个表仅仅是回退的表格可用于未知的第一个表中的单词和短语。

例如,如果你有两个翻译表,你想使用第二个未知词,你应该指定:

[decoding-graph-backoff]

0

1

0表示对第一个表,使用全部内容,1表示,第二个表用于对未知的大小为1的n-gram,进行使用。

MOSES的高级特征和功能相关推荐

  1. 5绘制收银台程序_透视Matplotlib核心功能和工具包 - 高级特征绘制

    关联知识 Matplotlib Python 使用属性循环器 Matplotlib具有默认的颜色循环,当我们在给定轴上绘制更多图形时,该颜色循环会重复进行. 通过属性循环程序,我们可以在单个函数中为多 ...

  2. Python 5种不为人知的高级特征

    任何编程语言的高级特征通常都是通过大量的使用经验才发现的.比如你在编写一个复杂的项目,并在 stackoverflow 上寻找某个问题的答案.然后你突然发现了一个非常优雅的解决方案,它使用了你从不知道 ...

  3. The Rust Programming Language - 第19章 高级特征 - 19.5 宏

    19 高级特征 我们将在这一章学习更多高级功能 19.5 宏 宏指的是Rust中一系列功能,宏用macro_rules!来声明 三种过程宏: 1.自定义#[derive]宏在结构体和枚举上指定通过de ...

  4. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:06 高级特征工程和NLP算法

    06 高级特征工程和NLP算法 6.1 词嵌入 6.2 word2vec基础 6.2.1 分布语义 6.2.2 定义word2vec 6.2.3 无监督分布语义模型中的必需品 6.3 word2vec ...

  5. 更新日志 - fir.im「高级统计」功能上线

    距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...

  6. 【OS】操作系统的特征与功能

    文章目录 操作系统--特征 操作系统--功能 操作系统--阶段与分类 分时操作系统特征 操作系统是计算机系统中 最基本的 系统软件 操作系统--特征 并发性 在多道程序环境下,并发性是在同一时间间隔内 ...

  7. miRNA的特征、功能及识别方法等详解

    什么是miRNA    MicroRNAs (miRNAs)是一种大小约21-23个碱基的单链小分子RNA,是由具有发夹结构的约70-90个碱基大小的单链RNA前体经过Dicer酶加工后生成,不同于s ...

  8. Java 类的一些高级特征

    1. 面向对象的特征二:继承性 * 1.为什么要设计继承性? 继承的出现提高了代码的复用性. 继承的出现让类与类之间产生了关系,提供了多态的前提. * 2.通过"class A extend ...

  9. 对比学习效果差?谷歌提出弱语义负样本,有效学习高级特征!

    文 | jxyxiangyu 编 | 小轶 对比学习是 2021 年几大研究热点之一了.如果说预训练模型解决了机器学习对大规模标注数据的需求问题,那么,对比学习可以说是将无监督/自监督学习推广到更一般 ...

最新文章

  1. 被劝退的学渣,逆袭成高级语言之父,改变编程方式却说“不喜欢写代码”!...
  2. OpenStack 通用设计思路 - 每天5分钟玩转 OpenStack(25)
  3. python七夕快乐_python编写简单抽奖系统
  4. Esfog_UnityShader教程_前言
  5. 树的先序遍历,中序遍历,后续遍历(递归和非递归实现)
  6. boost::type_erasure::binding_of相关的测试程序
  7. 奇数阶幻方 java_N(奇数)阶幻方-java实现代码
  8. 今天的我也不太清楚的即时通讯
  9. Java中高维数组或高维矩阵构建及运算
  10. 【Zepto笔记】Zepto.js
  11. 移动端H5 页面 input 获取焦点不灵敏
  12. 关于_beginthreadex、_beginthread和CreateThread
  13. zabbix使用ipv6地址监控snmp客户端
  14. python闭包函数的必要条件_Python闭包函数
  15. sleep方法和wait方法的区别?
  16. Tkinter教程(每天半小时,3天彻底掌握Tkinter)day1
  17. 中南大学计算机学院考研好考吗,中南大学or湖南大学:我考研选学校的心路历程...
  18. 金蝶K3安装环境检测缺少microsoft vm for java组件解决办法
  19. java 痛并快乐着 day02(2021-11-09)
  20. 如何修改 gitlab 的项目名称

热门文章

  1. 学习javaweb第二天
  2. Cannot mix different versions of joi schemas报错解决方案
  3. 四旋翼无人机避障飞行
  4. 孟子《生于忧患,死于安乐》日:“故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。”...
  5. elementUi中的图片预览功能(图片放大、缩小)preview-src-list属性
  6. 微软展示Windows 8新LOGO:倾斜纯蓝色窗口
  7. c语言36块砖36人搬答案编程,在C语言中.36块砖,36人搬;男搬4,女搬3,两个小孩抬一块.要求一次搬完,问男女小孩各多少?设计程序....
  8. 好用的在线音乐网站,有这5个就够了(收藏备用)
  9. 雅思做题技巧误区一,不敢选TRUE。误区二,见到only或must等绝对词就选FALSE。误区三,找不到就选NOT GIVEN。误区四,喜欢把TRUE/FALSE/NOT GIVEN理解为
  10. 如何按数字或者日期时间顺序对多个文件夹进行批量重命名?