一. 哈佛大学机器翻译开源项目 OpenNMT

2016年12月20日,哈佛大学自然语言处理研究组,宣布开源了他们研发的机器翻译系统 OpenNMT [1],并声称该系统的质量已经达到商用水准。

在 OpenNMT 官网上,有这么一段话,

The main model is based on the papers "Neural Machine Translation by Jointly Learning to Align and Translate" Bahdanau et al. ICLR 2015 and "Effective Approaches to Attention-based Neural Machine Translation" Luong et al. EMNLP 2015

我们阅读一下这篇论文,"Neural Machine Translation by Jointly Learning to Align and Translate" [2],了解 OpenNMT 的工作原理。

二. 机器翻译的任务和难度

翻译有三个境界,信、达、雅。信者,语义正确。达者,无过无不及。雅者,文学性。

机器翻译的任务很明确,譬如英翻中,输入一句英文(Source),输出一句中文(Target),两者语义相同,也就是符合 “信” 和 “达” 的要求,暂时不奢望达到 “雅” 的境界。

早先的机器翻译,通常用统计翻译的办法来实现,精度不高。近年来,神经机器翻译的新方法,逐渐取代了原先的统计翻译的办法。

神经机器翻译(Neural Machine Translation,NMT)的基本原理,是把用一种自然语言写成的句子 X,先编码(encode),转换成一组向量 H,向量组 H 不仅包含 X 语句中每一词的语义,而且也包含词与词之间的语法结构。然后再把向量组 H 解码(decode),转换成用另一种自然语言写成的句子 Y。

举个英翻中的例子,英文源句是,“Quite cold today in Beijing, keep warm when going outdoors。” 中文译句是,“今天北京天气很冷,出门时要保暖。”

先把英文源句中每个单词和标点,按顺序编码成数字向量组 H。在这个例子中,向量组 H 共包括 12 个向量,每个向量的维度人为确定,譬如 600 维。然后再把这个 600 * 12 向量组,解码成中文译句。

换而言之,向量组是超越一切自然语言的数字语言。所谓翻译,就是把一种自然语言,先编码成数字语言,然后再从数字语言解码成另一种自然语言。

不管是哪一种机器翻译方法,都面临以下挑战,

1. 输入的语句往往不规范,也就是不完全符合语法规则。譬如上面的例子,缺失了主语。

2. 有些语言有阴性阳性、单数复数、过去时完成时现在时未来时之分,其它语言不一定有。所以不能逐字逐句翻译,要结合上下文。

3. 有些语言的句法,按主谓宾顺序排列,有些则把动词放在句尾。譬如德语和日语,谓语放在句子末尾。

4. 句子长短不一。长句子可能包含多个从句,句法成分复杂。

三. 编码的工作原理

编码的任务,是把语句 X 转换成向量组 H,这个工作由一个双向循环神经网络(EncoderBiLSTM)来完成。编码包含以下几个步骤。

1. 假如语句 X 由 Tx 个词组成,把每个词都转换成词向量。这样,语句 X 就变成 f * Tx 的矩阵,f 是词向量的维度,Tx 是语句 X 中词的数量。x(t) 是指这个矩阵的第 t 列,也就是对应于第 t 个词的词向量。

2. 把第 1 个词向量 x(1),输入到 EncoderBiLSTM,得到输出 hf(1)。重复这个过程,逐个输入语句 X 中所有词向量 x(2) ... x(Tx),得到一系列向量 hf(1), hf(2) ... hf(Tx),每个向量 hf(i) 的维度都是 k。

3. 从语句 X 的最末端的词 x(Tx) 开始,反向到第 1 个词 x(1),逐个输入到 EncoderBiLSTM,得到一系列输出 hb(Tx), hb(Tx-1) ... hb(1),每个向量的维度也是 k。

4. 对应于语句 X 中每一个词向量 x(t),把 hf(t) 和 hb(t) 拼接起来,得到 h(t),它的维度是 2k。

语句中第 t 个词的词向量是 x(t),x(t)  隐含着第 t 个词的语义信息。h(t) 比 x(t) 更超越。h(t) 不仅隐含着第 t 个词的语义信息,而且除此之外,h(t) 还隐含着上下文的语义信息,以及上下文的语法结构。

把 h(t) t=1...Tx,摆放在一起,组成一个 2k * Tx 的矩阵,h(t) 是其中一列。这个矩阵,就是向量组 H。H 表达着自然语句 X 的全部语义和语法结构。

四.  解码的工作原理

解码的任务,是先把向量组 H 转换成一连串词向量 y(t) t = 1... Ty,然后再把这些词向量 y(t) 逐个替换成译句中的某个单词。解码的工作由一个单向循环神经网络(DecoderUniLSTM)来完成。

沿用前面的英翻中的例子,英文源句是,“Quite cold today in Beijing, keep warm when going outdoors。” 中文译句是,“今天北京天气很冷,出门时要保暖。”

编码工作完成后,英文源句转换成 600 * 12 的向量组 H,h(1) ... h(5) h(6) 分别对应着 “Quite” ... “Beijing” “,” 。中文译句的词序,与英文源句的词序并不完全一致,譬如中文翻译的第一个词,并不是 “很” 而是 “今天”。

在选择中文译句的第一个词的时候,先对 h(1) ... h(12) 逐个打分,看谁最适合。打分的规则,先看谁是第一个从句的主语。因为英文源句中主语缺失,所以接着尝试第二个规则。第二个规则是当主语缺失时,中文会把时间或地点用来充当主语。根据这个规则,中文译句的第一个词,既有可能对应着 “today”,也有可能对应着 “Beijing”。再根据第三个规则,在所有候选词中,谁的排序靠前,谁充当译句的第一个词。所以,最后确定中文译句的第一个词,对应着 “today”。

推而广之,翻译的难点,在于选择源句中对应的词向量。对应(alignment)的强弱,由四个因子决定。

1. 源句中每一个词,在语句中担当的语法角色,譬如是主语,还是谓语,或者宾语,或者从句中的主语谓语或者宾语。

2. 源句中每一个词的语义类别,譬如是时间,还是地点。

3. 译句中已经翻译了源句中哪些词。

4. 译句中期待的下一个词的语法角色和语义类别。

不妨用公式来表达,score( h(i) ) = align( s(t-1), h(i) ) = Va' * tanh( Wa * s(t-1), Ua * h(i) ),其中 Va、Wa、Ua 是需要训练的参数,而 s(t-1) 是译句的状态,它隐含着若干内容:

1. 译句中已经翻译了的词,y(1)...y(t-1) 。

2. y(1)...y(t-1) 对应着源句中的哪些词向量 h(j) 。

沿用前面的例子,如果中文译句已经翻译了若干词,“今天北京天气很”,接下去要决定 “很” 后面紧跟的中文词,对应着源句中的哪一个英文词,正确答案是 “cold”。

为了正确地选择下一个词,我们给源句中每一个英文词的词向量 h(i),都打一个分,分值取决于中文译句到目前为止的状态 s(t-1),与英文词向量 h(i) 的距离。译句状态 s(t-1),记录着 “今天北京天气很” 的语义内容和语法结构,也记录着这几个词对应着英文源句中的 “Quite ... today in Beijing”。

对应着 “Quite” 的 h(1),与 s(t-1) 的距离,由 score( h(i) ) 公式计算得出。如果 Va、Wa、Ua 这几个参数取值得当,“Quite” 的 h(1),与 s(t-1) 距离会很远。同理,对应着 “keep” 的 h(7),与 s(t-1) 距离也很远。而对应着 “cold” 的 h(2),与 s(t-1) 的距离最近。这样,就能正确地选择 “cold”,作为要翻译的下一个词。

总结一下,假如已经翻译了若干词,y(1)...y(t-1),下一步的解码工作,包含以下几个步骤。

1. 根据 DecoderUniLSTM 当前的状态 s(t-1),给向量组 H 中每一个向量 h(i),都打一个分,表示下一步要翻译这个词的概率。

2. 根据向量组 H 的加权和,更新 s(t-1),得到 s(t)。

3. 根据三项输入,DecoderUniLSTM 下一步预期的 s(t),向量组 H 的加权和,以及目前已经翻译了的 y(1)...y(t-1),决定下一步要翻译的词 y(t)。

4. 完成了整个译句的所有词向量 y(t), t = 1...Ty 后,把 y(t) 转换成译句的单词。

五. 训练数据

无论是编码器 EncoderBiLSTM,还是解码器 DecoderUniLSTM,都有很多参数需要确定。确定这些参数的最优值,需要大量的语料。[2] 使用的语料是同时兼有英文版和法文版的大量新闻稿,这些双语新闻稿共包含 3.48 亿个单词。

文章转自新智元公众号,原文链接

【邓侃】哈佛大学机器翻译开源项目 OpenNMT的工作原理相关推荐

  1. oracle区块链开源项目,区块链Oracle原理及实现

    区块链本身是封闭的.区块链的确定性模型基于这样一个事实:在交易执行时区块链不能执行任何来自外部的逻辑,所有的外部数据只能通过交易进入到系统中.预言机/Oracle就是通过交易为智能合约提供可信数据的服 ...

  2. 小姐姐:如何参与大型开源项目-Taro 共建

    大家好,我是若川.持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  3. Android常见开源项目的原理及使用方法

    Android常见开源项目的原理及使用方法 http://www.duobei.com/course/4514662053 [课程目标]  提升Android技术,提升软件设计技能,迈向架构师 [课程 ...

  4. 中国开源项目迈向全球化!

    整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 中国开源正在登上全球化舞台,成为一股不容忽视的中坚力量.在国际开源领域,ant-design.vue-element-admin 等热门开 ...

  5. 资源 | 我们从8800个机器学习开源项目中精选出Top30,推荐给你

    最近,Mybridge发布了一篇文章,对比了过去一年中机器学习领域大约8800个开源项目后,选出30个2017年度优秀的开源项目,包含机器学习开源库.数据库以及其他应用程序,这些项目差不多都是在201 ...

  6. 8800个机器学习开源项目为你精选TOP30!

    授权自AI科技大本营(ID: rgznai100) 本文共图文结合,建议阅读5分钟. 本文为大家带来了30个广受好评的机器学习开源项目. 最近,Mybridge发布了一篇文章,对比了过去一年中机器学习 ...

  7. Github 平均 Star 为 3558 的机器学习开源项目,你错过了哪些?

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 最近,Mybridge发布了一篇文章,对比了过去一年中机器学习领域大约8800个开源项目后, ...

  8. 各种机器学习开源项目精选TOP30

    8800个机器学习开源项目为你精选TOP30! 授权自AI科技大本营(ID: rgznai100) 本文共图文结合,建议阅读5分钟. 本文为大家带来了30个广受好评的机器学习开源项目. 最近,Mybr ...

  9. 大家都收藏了的最新开源项目Top12!CV、NLP、机器学习一应俱全

    参加 2018 AI开发者大会,请点击大会官网 译者 | 林椿眄.Jane 责编 | Jane 出品 | AI科技大本营 [导读]作者整理了近期最新发布及更新的 12 个非常有学习和收藏意义的开源项目 ...

最新文章

  1. python【数据结构与算法】动态规划详解从背包到最长公共子序列(看不懂你来打我)
  2. JavaScript实现MergeSort归并排序算法(附完整源码)
  3. winform的UI设计关键属性汇总
  4. Oracle的resouce、unlimited tablespace 及如何把数据导入不同的表空间
  5. java_basic_review(5) java继承
  6. Gridview SummaryItem 格式化数字
  7. python获取当前文件路径
  8. F-Spot 0.3.2
  9. PoJ3278--Catch That Cow(Bfs)
  10. 三态门三个状态vhdl_人防门施工方案
  11. matlab相对误差均值计算公式,相对误差怎么算_平均相对误差怎么计算公式
  12. 毕业论文ppt的研究方法及过程计算机专业,毕业论文答辩ppt(要求和制作技巧)...
  13. 17.光照(点光源)
  14. 何为A站、B站、C站、D站、F站
  15. (待补充)【读书笔记】20190816《码农翻身》——刘欣
  16. 巴比特 | 元宇宙每日必读:手握多个NFT IP,无聊猿“教父” Yuga Labs 如何建元宇宙?...
  17. xpath中的position()函数使用
  18. 咸鱼前端—CSS初识
  19. 武汉新时标文化传媒有限公司新型网红经济爆发式增长
  20. 人情似纸张张薄 世事如棋局局新

热门文章

  1. PYTHON2.day03
  2. 微软发布了Spartan项目的细节,并证实了某些流言
  3. mssql,mysql,oracle中查询数据库表的比较
  4. 什么是锚文本以及锚文本连接
  5. android代码里 写线程,在Android线程池里运行代码任务实例
  6. java输入星期几的字母_输入字母判断星期几java编程答案
  7. Python Module — WSME
  8. Docker 容器技术 — 容器网络
  9. ETSI GS MEC 016,Device application interface
  10. jlink的SWD与JTAG下载模式的对应接线方法