机器翻译不可不知的Seq2Seq模型

作者:李雪冬

编辑:李雪冬

前言

Seq2Seq,全称SequencetoSequence。它是一种通用的编码器——解码器框架,可用于机器翻译、文本摘要、会话建模、图像字幕等场景中。Seq2Seq并不是GNMT(GoogleNeuralMachineTranslation)系统的官方开源实现。框架的目的是去完成更广泛的任务,而神经机器翻译只是其中之一。在循环神经网络中我们了解到如何将一个序列转化成定长输出。在本文中,我们将探究如何将一个序列转化成一个不定长的序列输出(如机器翻译中,源语言和目标语言的句子往往并没有相同的长度)。

1

简单入门

(1)设计目标

通用这个框架最初是为了机器翻译构建的,但是后来使用它完成了各种其他任务,包括文本摘要、会话建模和图像字幕。只要我们的任务,可以将输入数据以一种格式编码并将其以另一种格式解码,我们就可以使用或者扩展这个框架。

可用性支持多种类型的输入数据,包括标准的原始文本。

重现性用YAML文件来配置我们的pipelines和models,容易复现。

可扩展性代码以模块化的方式构建,添加一种新的attention机制或编码器体系结构只需要最小的代码更改。

文档化:所有的代码都使用标准的Python文档字符串来记录,并且编写了使用指南来帮助我们着手执行常见的任务。

良好的性能:为了代码的简单性,开发团队并没有试图去尽力压榨每一处可能被拓展的性能,但是对于几乎所有的生产和研究项目,当前的实现已经足够快了。此外,tf-seq2seq还支持分布式训练。

(2)主要概念

Configuration

许多objects都是使用键值对来配置的。这些参数通常以YAML的形式通过配置文件传递,或者直接通过命令行传递。配置通常是嵌套的,如下例所示:

model_params:attention.class:seq2seq.decoders.attention.AttentionLayerBahdanauattention.params:num_units:embedding.dim:encoder.class:seq2seq.encoders.BidirectionalRNNEncoderencoder.params:rnn_cell:cell_class:LSTMCellcell_params:num_units:

InputPipeline

InputPipeline定义了如何读取、解析数据并将数据分隔成特征和标签。如果您想要读取新的数据格式,我们需要实现自己的输入管道。

Encoder(编码)

Decoder(解码)

Model(Attention)

2

Encoder-Decoder

整个过程可以用下面这张图来诠释:

图1:最简单的Encoder-Decoder模型

其中,X、Y均由各自的单词序列组成(X,Y可以是同一种语言,也可以是两种不同的语言):

X=(x1,x2,...,xm)

Y=(y1,y2,...,yn)

Encoder:是将输入序列通过非线性变换编码成一个指定长度的向量C(中间语义表示),得到c有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给c,还可以对最后的隐状态做一个变换得到c,也可以对所有的隐状态做变换。

C=F(x1,x2,...,xm)

Decoder:是根据向量C(encoder的输出结果)和之前生成的历史信息y1,y2,...,yn来生成i时刻要生成的单词yi。

yi=G(C,y1,y2,...,yn-1)

下图是一个生成对联的示意图。

图2:生活中的小栗子

编码阶段

在RNN中,当前时间的隐藏状态由上一时间的状态和当前时间输入决定的,即:获得了各个时间段的隐藏层以后,再将隐藏层的信息汇总,生成最后的语义向量当然,有一种最简单的方法是将最后的隐藏层作为语义向量C,即

解码阶段

可以看做编码的逆过程。这个阶段,我们根据给定的语义向量C和之前已经生成的输出序列y1,y2,...,yt-1来预测下一个输出的单词yt,即也可以写作

在RNN中,也可以简化成

其中s是输出RNN(即RNN解码器)中的隐藏层,C代表之前编码器得到的语义向量,yt-1表示上个时间段的输出,反过来作为这个时间段的输入。g可以是一个非线性的多层神经网络,产生词典中各个词语属于yt的概率。

3

Attention模型

encoder-decoder模型虽然非常经典,但是局限性也非常大。最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,二是先输入的内容携带的信息会被后输入的信息稀释掉。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息,那么解码时准确率就要打一定折扣。

为了解决上述问题,在Seq2Seq出现一年之后,Attention模型被提出了。该模型在产生输出的时候,会产生一个注意力范围来表示接下来输出的时候要重点







































复方卡力孜然酊效果怎么样
北京去白癜风最好的医院



转载请注明:http://www.92nongye.com/xxmb/204621530.html