资源 | 谷歌全attention机器翻译模型Transformer的TensorFlow实现

选自GitHub

机器之心编译

参与:黄小天、Smith

谷歌前不久在 arXiv 上发表论文《Attention Is All You Need》,提出一种完全基于 attention 的翻译架构 Transformer,实现了机器翻译的新突破;近日,Github 上的一个项目给出了 Transformer 模型的 TensorFlow 实现,在官方代码公布之前共享了自己的代码。机器之心对该文进行了编译,项目地址见文中。

项目链接:https://github.com/Kyubyong/transformer

需求

  • NumPy >= 1.11.1
  • TensorFlow >= 1.2(1.1 很可能也可以,但是我没有测试它)
  • regex
  • nltk

项目来由

我试图在论文《Attention Is All You Need》中实现我的想法。该论文的作者声称其模型,即 Transformer,在机器翻译方面的表现优于当前任何的模型;它仅使用 attention,而没有 CNN 和 RNN,这酷极了。论文最后,作者承诺将很快公开代码,但是目前为止并没有。我的这一项目有两个目标,一是我想要全面了解这篇论文,如果不写代码就很难理解论文;二是在官方代码公布之前,与感兴趣的人共享我写的代码。

与原论文的不同

内容,而是要实现论文的核心思想,并作出简单快速的验证。由于这个原因,我的部分代码与原论文有所不同。这些不同之处有:

  • 我使用了 IWSLT 2016 de-en 数据集,而不是 wmt 数据集,因为前者更小,且不需要特殊的预处理。
  • 为了简化,我用单词而非子单词构建了词表。当然,如果愿意你可以尝试 bpe 或者 word-piece。
  • 我将位置编码直接用作了参数,而原文用了一些正弦公式。论文作者之一 Noam 说两种方法都有效,详见:https://www.reddit.com/r/MachineLearning/comments/6gwqiw/r_170603762_attention_is_all_you_need_sota_nmt/
  • 论文根据训练步数逐渐调节学习率,我简单地把学习率固定在一个非常小的值 0.0001 上。因为使用小数据集,训练的速度已经足够快(使用单块 GTX 1060 仅需几个小时!!)

文件描述

  • hyperparams.py 包括全部所需的超参数
  • prepro.py 可为源和目标创建词汇文件(vocabulary file)
  • data_load.py 包括装载和批处理数据的相关函数
  • modules.py 拥有全部编码/解码网络的构建模块
  • train.py 包含模型
  • eval.py 是为了进行评估

训练

  • 第一步:下载 IWSLT 2016 German–English parallel corpus 并且把它放在 corpora/文件夹
  • 第二步:如果必要的话在 hyperparams.py 下调整超参数(hyper parameters)
  • 第三步:运行 prepro.py,在 preprocessed 文件下生成词汇文件
  • 第四步:运行 train.py 或下载预训练好的文件(pretrained files)

训练损失和精度

训练损失

训练精度

评估

  • 运行 eval.py.

结果

我的 BLEU 得分为 17.14。(我用小数据集、有限的词汇进行训练)一些评估结果如下所示。详见文件夹 results

source: Sie war eine jährige Frau namens Alex expected: She was a yearold woman named Alex got: She was a woman named yearold name source: Und als ich das hörte war ich erleichtert expected: Now when I heard this I was so relieved got: And when I heard that I was an source: Meine Kommilitonin bekam nämlich einen Brandstifter als ersten Patienten expected: My classmate got an arsonist for her first client got: Because my first came from an in patients source: Das kriege ich hin dachte ich mir expected: This I thought I could handle got: I'll go ahead and I thought source: Aber ich habe es nicht hingekriegt expected: But I didn't handle it got: But I didn't it source: Ich hielt dagegen expected: I pushed back got: I thought about it source: Das ist es was Psychologen einen AhaMoment nennen expected: That's what psychologists call an Aha moment got: That's what a like a source: Meldet euch wenn ihr in euren ern seid expected: Raise your hand if you're in your s got: Get yourself in your s source: Ich möchte ein paar von euch sehen expected: I really want to see some twentysomethings here got: I want to see some of you source: Oh yeah Ihr seid alle unglaublich expected: Oh yay Y'all's awesome got: Oh yeah you all are incredibly source: Dies ist nicht meine Meinung Das sind Fakten expected: This is not my opinion These are the facts got: This is not my opinion These are facts

本文为机器之心编译,转载请联系本公众号获得授权。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2017-06-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

10行代码实现目标检测,请收下这份教程

12010
来自专栏玉树芝兰

如何用Python和深度神经网络识别图像?

(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)

21220
来自专栏人人都是极客

教程 | 基于计算机视觉使用Python和OpenCV计算道路交通

本文介绍了不使用复杂的深度学习算法计算道路交通的方法。该方法基于计算机视觉,仅使用 Python 和 OpenCV,在背景提取算法的帮助下,使用简单的移动侦测来...

63160
来自专栏量子位

深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

问耕 编译自 Source Dexter 量子位 出品 | 公众号 QbitAI 作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题。Sour...

59890
来自专栏漫漫深度学习路

tensorflow学习笔记(三十二):conv2d_transpose ("解卷积")

deconv解卷积,实际是叫做conv_transpose, conv_transpose实际是卷积的一个逆向过程,tf 中, 编写conv_transpose...

79990
来自专栏编程

基于micropython的数字滤波器

刚参加了昨天的硕士研究生考试,专业课考的信号与系统,报考学校今年出题出的有点偏,不是题型偏而是考察知识点有明显的偏重,简单说考纲里所罗列的考点最多只考了百分之三...

34860
来自专栏FreeBuf

Kaggle:一套完整的网站流量预测模型

今天给大家推荐的是一个名叫Kaggle的网站流量预测项目,本项目采用Python语言开发,可以给大家的流量预测建模提供一些思路。 ? 数据模型 Kaggle的训...

50760
来自专栏吉浦迅科技

如何在Jetson TX2上用Python捕获摄像头影像,并用Caffe进行推理

本文转载自JK Jung的帖子:https://jkjung-avt.github.io/tx2-camera-caffe/ 如果有侵犯到贴主利益,请立刻跟我联...

66850
来自专栏信数据得永生

《Scikit-Learn与TensorFlow机器学习实用指南》第2章 一个完整的机器学习项目

1.2K200
来自专栏AI科技评论

开发 | 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题

引言 2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了...

46990

扫码关注云+社区

领取腾讯云代金券