/ NLP  

NLP系列

图解seq2seq

1.seq2seq(序列到序列模型)简介

对于很多自然语言处理任务,比如聊天机器人,机器翻译,自动文摘,智能问答等,传统的解决方案都是检索式(从候选集中选出答案),这对素材的完善程度要求很高,随着深度学习的发展,研究界将深度学习技术应用与自然语言的生成和自然语言的理解的方面的研究,并取得了一些突破性的成果,比如,Sequence-to-sequence (seq2seq) 模型,它是目前自然语言处理技术中非常重要和流行的一个模型,该技术突破了传统的固定大小输入问题框架,开通了将经典深度神经网络模型运用于翻译与职能问答这一类序列型任务的先河,并且被证实在各主流语言之间的相互翻译以及语音助手中人机短问快答的应用中有着非常好的表现,我们在这个notebook中主要给大家以动图的方式展示一下seq2seq模型的一些细节。

参考资料:Visualizing A Neural Machine Translation Model

2.编码解码模型

序列到序列的模型是非常有意思的NLP模型,我们的很多NLP任务,是文本到文本的映射(对应),这个过程就像是下面图里展示的过程。当然seq2seq模型不仅仅是用在NLP中的模型,它的输入也可以是语音信号或者图像表示。

更具体一点,在NLP的任务中,其实输入的是文本序列,输出的很多时候也是文本序列,下图所示的是一个典型的机器翻译任务中,输入的文本序列(源语言表述)到输出的文本序列(目标语言表述)之间的变换。

更细节一点的结构是一个“编码解码器”结构,编码器处理输入序列中的每个元素(在这里可能是1个词),将捕获的信息编译成向量(称为上下文内容向量)。在处理整个输入序列之后,编码器将上下文发送到解码器,解码器逐项开始产生输出序列。

在机器翻译的场景下,是下面这样的。

所谓的上下文向量其实就是

输入的数据(文本序列)中的每个元素(词)通常会被编码成一个稠密的向量,这个过程叫做word embedding,如下图所示

我们的encoder和decoder都会借助于循环神经网络(RNN)这类特殊的神经网络完成,循环神经网络会接受每个位置(时间点)上的输入,同时经过处理进行信息融合,并可能会在某些位置(时间点)上输出。如下图所示。

所以动态地展示整个编码器和解码器,分拆的步骤过程大概是下面这个样子。

更详细地展开,其实是这样的。

在更多的时候,我们考虑到提升效果,不会寄希望于把所有的内容都放到一个上下文向量(context vector)中,而是会采用一个叫做注意力模型的模型来动态处理和解码,动态的图如下所示。

所谓的注意力机制,可以粗略地理解为是一种对于输入的信息,根据重要程度进行不同权重的加权处理(通常加权的权重来源于softmax后的结果)的机制,如下图所示,是一个在解码阶段,简单地对编码器中的hidden states进行不同权重的加权处理的过程。

更详细一点的注意力解码过程如下图所示。

  • 带注意力的解码器RNN接收的嵌入(embedding)和一个初始的解码器隐藏状态(hidden state)。
  • RNN处理输入,产生输出和新的隐藏状态向量(h4),输出被摒弃不用。
  • attention的步骤:使用编码器隐藏状态(hidden state)和h4向量来计算该时间步长的上下文向量(C4)。
  • 把h4和C4拼接成一个向量。
  • 把拼接后的向量连接全连接层和softmax完成解码
  • 每个时间点上重复这个操作

也可以把这个动态解码的过程展示成下述图所示的过程。

注意力机制是一个很神奇地可以学习源语言和目标语言之间词和词对齐关系的方式。如下图所示。