文 / Google Brain Team 的研究科学家 Stephan Gouws、阿姆斯特丹大学的 Mostafa Dehghani 博士生、谷歌研究实习生

去年,我们发布了 Transformer,这是一种新的机器学习模型,相较现有的机器翻译算法和其他语言理解任务,成效卓著。 在 Transformer 之前,大多数基于神经网络的机器翻译方法依赖于循环运算的递归神经网络(RNN),它们使用循环(即每一步的输出都进入下一步)按递归顺序运行(例如,逐字翻译句中的单词)。 虽然 RNN 在建模序列方面非常强大,但它们的顺序性本质意味着它们训练起来非常缓慢,因为长句需要更多的处理步骤,并且其繁复循环的结构也使训练难上加难。

相较于基于 RNN 的方法,Transformer 不需要循环,而是并行处理序列中的所有单词或符号,同时利用自醒机制将上下文与较远的单词结合起来。 通过并行处理所有单词,并让每个单词在多个处理步骤中处理句子中的其他单词,使 Transformer 的训练速度比起复制模型要快得多。 值得注意的是,与此同时其翻译结果也比 RNN 好得多。 然而,在更小、更结构化的语言理解任务中,或是简单的算法任务诸如复制字符串(例如,将 “abc” 的输入转换为 “abcabc”)上,Transformer 则表现欠佳。 相比之下,在这方面表现良好的模型,如神经 GPU 和神经图灵机,在大规模语言理解任务(如翻译)中溃不成军。

在《Universal Transformer》一文中,我们使用新颖高效的时间并行循环方式将标准 Transformer 扩展为计算通用(图灵完备)模型,从而可在更广泛的任务中产生更强的结果。我们将模型建立在 Transformer 的并行结构上,以保持其快速的训练速度。但是我们用单一的时间并行循环的变换函的多次应用代替了 Transformer 中不同变换函数的固定堆叠(即,相同的学习转换函数在多个处理步骤中被并行应用于所有符号,其中每个步骤的输出馈入到下一个步骤中)。关键在于,RNN 逐个符号(从左到右)处理序列,而 Universal Transformer 同时处理所有符号(像 Transformer 一样),随后使用自醒机制在可变数量的情况下并行地对每个符号的解释进行细化。 这种时间并行循环机制比 RNN 中使用的顺序循环更快,也使得 Universal Transformer 比标准前馈 Transformer 更强大。

Universal Transformer 模型通过自醒机制结合不同位置的信息,应用循环转换函数,以并行化方式重复为序列的每个位置细化一系列向量表征(显示为 h1 到 hm)。 箭头表示操作之间的依赖关系

在每个步骤中,利用自醒机制将信息从每个符号(例如,句中的单词)传递到其他符号,就像在原始 Transformer 中一样。 但是,现在这种转换的次数(即循环步骤的数量)可以提前手动设置(比如设置为某个固定数字或输入长度),也可以通过 Universal transformer 本身进行动态设定。 为了实现后者,我们在每个位置都添加了一个自适应计算机制,可以分配更多处理步骤给较模糊或需要更多计算的符号。

我们用一个直观的例子来说明这是如何起效的,比如 “I arrived at the bank after crossing the river 我穿过河流终于抵达岸边” 这句话。 在这个案例中,与没有歧义的 “I 我” 或 “river 河流” 相比,推断 “bank” 一词最确切的含义需要用到更多的语景信息。 当我们使用标准 Transformer 对这个句子进行编码时,我们需要把同样的计算量无条件地应用于每个单词。 然而, Universal Transformer 的自适应机制允许模型仅在更模糊的单词上花费更多的计算,例如, 使用更多步骤来整合消除 “bank” 的歧义所需额外的语境信息,而在那些比较明确的单词上则花费较少的步骤。

起初,让 Universal Transformer 仅重复应用单一学习函数来处理其输入似乎是有限制性的,尤其是与学习应用固定序列的不同函数的标准 Transformer 相比。但是,学习如何重复应用单一函数意味着应用程序的数量(处理步骤)现在是可变的,而这是一个很重要的区别。综上所述,除了允许 Universal Transformer 对更模糊的符号应用更多的计算之外,它还允许模型根据输入的整体大小来调整函数应用的数量(更长的序列的更多步骤),或者根据训练期间学习到的其他特性来动态地决定将函数应用到输入的任何给定部分的频率。这使得 Universal Transformer 在理论意义上更加强大,因为它可以有效地学习将不同的变换应用于输入的不同部分。这是标准 Transformer 无法做到的事情,因为它是由只应用一次的学习变换块的固定堆叠组成。

尽管 Universal Transformer 在理论上更强大,但我们也关心实验性能。我们的实验结果证实,Universal Transformers 确实能够从样本中学习如何复制和反转字符串,以及如何比 Transformer 或 RNN 更好地执行整数加法(尽管不如神经 GPU 那么好)。此外,在各种具有挑战性的语言理解任务中,Universal Transformer 的泛化效果明显更好,且在 bAbI 语言推理任务和很有挑战性的 LAMBADA 语言建模任务上达到了当前最优性能。但或许最令人感兴趣的是,Universal Transformer 在与基础 Transformer 使用相同数量的参数、训练数据以相同方式进行训练时,其翻译质量比后者提高了 0.9 个? BLEU 值。去年 Transformer 发布时,它的性能比之前的模型提高了 2 个 BLEU 值,而 Universal Transformer 的相对改进量是去年的 50%。

因此,Universal Transformer 弥补了大规模语言理解任务(如机器翻译)教育部雅思上具有竞争力的实际序列模型与计算通用模型(如神经图灵机或神经GPU)之间的差距,计算通用模型可使用梯度下降来训练,用于执行随机算法任务。 我们很高兴看到时间并行序列模型的最新进展,以及处理深度中计算能力和循环的增加,我们希望对此处介绍的基本 Universal Transformer 的进一步改进将有助于我们构建更多,更强大的,更能高效利用数据的算法功能,泛化性能超越当前最优算法。

如果您想要亲身体验,可以在开源的 Tensor2Tensor 存储库中找到用于训练和评估 Universal Transformers 的代码。

注:代码链接

https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/models/research/universal_transformer.py

鸣谢

执行本项研究的人员 Mostafa Dehghani,Stephan Gouws,Oriol Vinyals,Jakob Uszkoreit 和 ?ukasz?Kaiser。?另外还要感谢来自 Ashish Vaswani,Douglas Eck 和 David Dohan 富有成效的意见建议和灵感。

更多 AI 相关阅读:

·?智能编撰:使用神经网络协助编写电子邮件

·?使用 Flutter 反序列化 JSON 的一些选项

·?将连接组学提高一个数量级


文章来源:https://blog.csdn.net/jILRvRTrc/article/details/82392615

转载于:https://www.cnblogs.com/yujingyua/p/9639723.html

利用 Universal Transformer,翻译将无往不利!相关推荐

  1. 【青少年编程】黄羽恒:翻译小工具 -- 利用有道翻译

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  2. python有道翻译接口-【Python】Python利用有道翻译开发API应用示例

    Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单, ...

  3. python有道字典_【Python】Python利用有道翻译开发API应用示例

    Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单, ...

  4. 利用有道翻译Api实现英文翻译功能

    有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更灵活地定制翻译和查词功能. 第一步: ...

  5. 利用Google在线翻译引擎制作自己的多国语言翻译机

    本文介绍如何利用Google在线翻译引擎来制作自己的多国语言翻译器.本程序利用Google的在线翻译引擎实现汉语到英语,英语到汉语,英语到日语的单词,整句的翻译.因为是在命令行运行,不支持/n,不能对 ...

  6. (转)利用Google在线翻译引擎制作自己的多国语言翻译机

    出处:http://www.blogjava.net/ekinglong/archive/2006/11/12/80704.html?Pending=true#Post 本文介绍如何利用Google在 ...

  7. 基于Pytorch的Transformer翻译模型前期数据处理方法

    基于Pytorch的Transformer翻译模型前期数据处理方法 Google于2017年6月在arxiv上发布了一篇非常经典的文章:Attention is all you need,提出了解决s ...

  8. php英文翻译,利用有道翻译Api实现英文翻译效能

    利用有道翻译Api实现英文翻译功能 有道翻译提供了翻译和查词的数据接口.通过数据接口,您可以获得一段文本的翻译结果或者查词结果.       通过调用有道翻译API数据接口,您可以在您的网站或应用中更 ...

  9. Levenshtein Transformer翻译

    摘要 现有的神经序列生成模型,要么是从头开始逐步生成字符,要么(迭代地)修改以固定长度为边界的字符序列.在这项工作中,我们提出了Levenshtein Transformer,这是一种新的部分自回归模 ...

最新文章

  1. linux运维第二讲
  2. IOS-TextField控件详解
  3. 8个排序算法的稳定性总结
  4. GDCM:SCU功能的测试程序
  5. Java Longest Palindromic Substring(最长回文字符串)
  6. JSON字符串与JSON对象的区别
  7. E-SKILL网络工程师考试认证必备
  8. Spring-boot 打成jar包后使用外部配置文件
  9. oracle多条sql语句常量,如何在Oracle中一次执行多条sql语句
  10. 并发编程总结一,进程
  11. ExtremeC3Net: 使用高级C3模块的极轻量人像分割模型
  12. switchhosts以管理员身份运行后不显示故障处理
  13. android 歌词 开源,NLyric 网易云音乐歌词自动搜索下载【开源】
  14. 生成自己的自签名证书
  15. c# 判断时间是否在 某一时间段内
  16. 中山大学3D游戏设计读书笔记 unity3D Note2
  17. 艾永亮:时代的较量,谁在定义四个轮子的未来?
  18. C# 反射类Assembly用法举例
  19. 遥感监测草原产草量的方法
  20. 一步一动在PVE安装黑群晖

热门文章

  1. 滴滴全民拼车日背后的运维技术揭秘
  2. 史上最人性化的U型枕,再也不用担心睡不好了!
  3. 一个40岁老程序员的学习之路,在别人为“中年危机”而忧愁时,你可以淡然处之
  4. 立象Argox A-50 打印机驱动
  5. 关于JS里的数组和对象的日常使用
  6. 网鼎杯 Comment 解题记录
  7. ndk开发流程,9次Android面试经验总结,已拿offer入职
  8. Regsvr32 用法
  9. 读取Java文件到byte数组的三种方式及Java文件操作大全(包括文件加密,String加密)
  10. 阿里巴巴起诉迪拜“阿里巴巴币”商标侵权:别让人误以为阿里在发币