使用 Seq2Seq 实现中英文翻译

1. 介绍

1.1 Deep NLP

自然语言处理(Natural Language Processing,NLP)是计算机科学、人工智能和语言学领域交叉的分支学科,主要让计算机处理或理解自然语言,如机器翻译,问答系统等。但是因其在表示、学习、使用语言的复杂性,通常认为 NLP 是困难的。近几年,随着深度学习(Deep Learning, DL)兴起,人们不断尝试将 DL 应用在 NLP 上,被称为 Deep NLP,并取得了很多突破。其中就有 Seq2Seq 模型。

1.2 来由

Seq2Seq Model是序列到序列( Sequence to Sequence )模型的简称,也被称为一种编码器-解码器(Encoder-Decoder)模型,分别基于2014发布的两篇论文:

  • Sequence to Sequence Learning with Neural Networks by Sutskever et al.,
  • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation by Cho et al.,

作者 Sutskever 分析了 Deep Neural Networks (DNNs) 因限制输入和输出序列的长度,无法处理未知长度和不定长的序列;并且很多重要的问题都使用未知长度的序列表示的。从而论证在处理未知长度的序列问题上有必要提出新解决方式。于是,创新性的提出了 Seq2Seq 模型。下面让我们一起看看这个模型到底是什么。

2. Seq2Seq Model 之不断探索

为什么说是创新性提出呢? 因为作者 Sutskever 经过了三次建模论证,最终才确定下来 Seq2Seq 模型。而且模型的设计非常巧妙。让我们先回顾一下作者的探索经历。语言模型(Language Model, LM)是使用条件概率通过给定的词去计算下一个词。这是 Seq2Seq 模型的预测基础。由于序列之间是有上下文联系的,类似句子的承上启下作用,加上语言模型的特点(条件概率),作者首先选用了 RNN-LM(Recurrent Neural Network Language Model, 循环神经网络语言模型)。<br />rnn.png<br />上图,是一个简单的 RNN 单元。RNN 循环往复地把前一步的计算结果作为条件,放进当前的输入中。<br />适合在任意长度的序列中对上下文依赖性进行建模。但是有个问题,那就是我们需要提前把输入和输出序列对齐,而且目前尚不清楚如何将 RNN 应用在不同长度有复杂非单一关系的序列中。为了解决对齐问题,作者提出了一个理论上可行的办法:使用两个 RNN。 一个 RNN 把输入映射为一个固定长度的向量,另一个 RNN 从这个向量中预测输出序列。<br />double RNN.png<br />为什么说是理论可行的呢?作者 Sutskever 的博士论文 TRAINING RECURRENT NEURAL NETWORKS (训练循环神经网络)提出训练 RNN 是很困难的。因为由于 RNN 自身的网络结构,其当前时刻的输出需要考虑前面所有时刻的输入,那么在使用反向传播训练时,一旦输入的序列很长,就极易出现梯度消失(Gradients Vanish)问题。为了解决 RNN 难训练问题,作者使用 LSTM(Long Short-Term Memory,长短期记忆)网络。<br />lstm0.png<br />上图,是一个 LSTM 单元内部结构。LSTM 提出就是为了解决 RNN 梯度消失问题,其创新性的加入了遗忘门,让 LSTM 可以选择遗忘前面输入无关序列,不用考虑全部输入序列。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
去年,谷歌发布了 Google Neural Machine Translation (GNMT),即谷歌神经机器翻译,一个 sequence-to-sequence (“seq2seq”) 的模型。现在,它已经用于谷歌翻译的产品系统。   虽然消费者感受到的提升并不十分明显,谷歌宣称,GNMT 对翻译质量带来了巨大飞跃。   但谷歌想做的显然不止于此。其在官方博客表示:“由于外部研究人员无法获取训练这些模型的框架,GNMT 的影响力受到了束缚。”   如何把该技术的影响力最大化?答案只有一个——开源。   因而,谷歌于昨晚发布了 tf-seq2seq —— 基于 TensorFlow 的 seq2seq 框架。谷歌表示,它使开发者试验 seq2seq 模型变得更方便,更容易达到一流的效果。另外,tf-seq2seq 的代码库很干净并且模块化,保留了全部的测试覆盖,并把所有功能写入文件。   该框架支持标准 seq2seq 模型的多种配置,比如编码器/解码器的深度、注意力机制(attention mechanism)、RNN 单元类型以及 beam size。这样的多功能性,能帮助研究人员找到最优的超参数,也使它超过了其他框架。详情请参考谷歌论文《Massive Exploration of Neural Machine Translation Architectures》。   上图所示,是一个从文到英文的 seq2seq 翻译模型。每一个时间步骤,编码器接收一个汉字以及它的上一个状态(黑色箭头),然后生成输出矢量(蓝色箭头)。下一步,解码器一个词一个词地生成英语翻译。在每一个时间步骤,解码器接收上一个字词、上一个状态、所有编码器的加权输出和,以生成下一个英语词汇。雷锋网(公众号:雷锋网)提醒,在谷歌的执行,他们使用 wordpieces 来处理生僻字词。   据雷锋网了解,除了机器翻译,tf-seq2seq 还能被应用到其他 sequence-to-sequence 任务上;即任何给定输入顺序、需要学习输出顺序的任务。这包括 machine summarization、图像抓取、语音识别、对话建模。谷歌自承,在设计该框架时可以说是十分地仔细,才能维持这个层次的广适性,并提供人性化的教程、预处理数据以及其他的机器翻译功能。   谷歌在博客表示: “我们希望,你会用 tf-seq2seq 来加速(或起步)你的深度学习研究。我们欢迎你对 GitHub 资源库的贡献。有一系列公开的问题需要你的帮助!”   GitHub 地址:https://github.com/google/seq2seq   GitHub 资源库:https://google.github.io/seq2seq/nmt/ 标签:tensorflow  seq2seq  谷歌  机器学习

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值