NLP之Seq2Seq

如果你没有学习过LSTM的知识,那么你可以参考下笔者的前面的一篇文章:深度学习之RNN(循环神经网络)

一 什么是Seq2Seq?

所谓Seq2Seq(Sequence to Sequence), 就是一种能够根据给定的序列,通过特定的方法生成另一个序列的方法它被提出于2014年,最早由两篇文章独立地阐述了它主要思想,分别是Google Brain团队的《Sequence to Sequence Learning with Neural Networks》Yoshua Bengio团队的《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》。这两篇文章不谋而合地提出了相似的解决思路,Seq2Seq由此产生。

举个简单的例子,当我们使用机器翻译时:输入(Hello) --->输出(你好)。再比如在人机对话中,我们问机器:“你是谁?”,机器会返回答案“我是某某某”。

机器翻译、人机对话、聊天机器人等等,这些都是应用在当今社会都或多或少的运用到了我们这里所说的Seq2Seq。

    

                                                                                              图1 邮件对话

如图1所示为一个简单的邮件对话的场景。

图中的 Encoder 和 Decoder 都只展示了一层的普通 LSTMCell(为防止读者误解,这里需要说明的是Seq2Seq使用的cell不仅限于LSTM)。从上面的结构中,我们可以看到,整个模型结构还是非常简单的。 EncoderCell 最后一个时刻的状态就是中间语义向量 C,它将作为 DecoderCell 的初始状态。然后在 DecoderCell 中,每个时刻的输出将会作为下一个时刻的输入。以此类推,直到 DecoderCell 某个时刻预测输出特殊符号 <END> 结束。

这里我们将Encoder阶段叫做编码阶段。对应的Decoder阶段叫做解码阶段。中间语义向量C可以看做是所有的输入内容的一个集合,所有的输入内容都包括在C里面。详细内容会在后面继续讲解,下面我们首先具体看看我们将要学习的Seq2Seq技术到底有什么应用场景呢?

二 Seq2Seq的应用场景

Seq2Seq的应用随着计算机技术、人工智能技术、算法研究等方面的发展以及社会发展的需求,它在许多领域产生了一些运用。目前,它主要的应用场景有(如果你感兴趣可以看看这里):

① 机器翻译(当前最为著名的Google翻译,就是完全基于Seq2Seq+Attention机制开发出来的)。

② 聊天机器人小爱,微软小冰等也使用了Seq2Seq的技术(不是全部))。

③ 文本摘要自动生成今日头条等使用了该技术)。

④ 图片描述自动生成。

机器写诗歌、代码补全、生成 commit message、故事风格改写等。

三 Seq2Seq原理解析

了解了Seq2Seq的应用场景,你有没有急切的学习它的冲动呢?如果有,那么请继续向下看。

首先,我们要明确Seq2Seq解决问题的主要思路是通过深度神经网络模型(常用的是LSTM)将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入(encoder)与解码输出(decoder)两个环节组成。

这里我们必须强调一点,Seq2Seq的实现程序设计好之后的输入序列和输出序列长度是不可变的

3.1 最基础的Seq2Seq模型

         

                                                                  图2 简单的Seq2Seq模型

如图2,最基础的Seq2Seq模型包含了三个部分,即EncoderDecoder以及连接两者的中间状态向量CEncoder通过学习输入,将其编码成一个固定大小的状态向量c,继而将c传给DecoderDecoder再通过对状态向量c的学习来进行输出。

注意:图中每一个box代表了一个RNN单元记住!!,通常是LSTM或者GRU

3.2 一个典型的实例

了解了最简单模型之后,我们举一个常见的栗子来详细说明。

      

                                                                            图3 Seq2Seq实例图

首先说明一点,图中的一些谬误(①Decoder阶段,每次都会参考中间状态向量C,不仅仅是图中的H1②目前,输入的语句序列一般采用倒序输入)。

               

                                                                            图4 Seq2Seq+Attention机制

 如图4为加入Attention机制后的Seq2Seq模型示意图。

LSTM模型虽然具有记忆性,但是当Encoder阶段输入序列过长时,解码阶段的LSTM也无法很好地针对最早的输入序列解码。Attention注意力分配的机制被提出,就是为了解决这个问题。在Decoder阶段每一步解码,都能够有一个输入,对输入序列所有隐藏层的信息h_1,h_2,…h_Tx进行加权求和。打个比方就是每次在预测下一个词时都会把所有输入序列的隐藏层信息都看一遍,决定预测当前词时和输入序列的那些词最相关。

Attention机制代表了在解码Decoder阶段,每次都会输入一个Context上下文的向量Ci, 隐藏层的新状态Si根据上一步的状态Si-1, Yi, Ci 三者的一个非线性函数得出。

                                                         --------------------------------------------------------------(1)

从(1)式可以看出,Si-1和yi分别为Decoder阶段的前一个状态和前一次输出的预测值。Ci为Encoder阶段的每个时刻输出状态的加权平均和。那么Ci是如何求解的呢?

                                                     --------------------------------------------------------------(2)

这里hj为Encoder阶段的每个时刻输出状态,aij为每个Decoder阶段的输入i 对应的 hj 的权重值大小。具体的计算公式为:

                                             ---------------------------------------------------------------(3)

而其中的eij的公式为:

                               --------------------------------------------------------------(4)

                      

                        

四 Seq2Seq的预处理

最后,我们要说的还有一点关键的预处理工作。

如果你有一定的基础,那么应该知道我们的NLP乃至人工智能处理的数据都是数字,那么这里的文字该怎么处理呢?我们都知道OneHot,TF,TF-IDF,词袋法等等都可以将文档数值化处理。那么,我们这里怎么进行数据的预处理工作呢?我们通常的预处理步骤如下:

首先我们假设有10000个问答对,统计得到1000个互异的字以及每个字对于出现的次数

根据统计得到的这1000个字,按照次数从多到少进行排序,序号从0开始到999结束(得到我们的字典表ids)。

对于问答对,进行One-Hot编码

由于One-Hot编码的维度较大且0较多,因此我们进行embedding降维(具体维数自定义)得到我们的特征矩阵。

好了,seq2seq就简单讲到这里。如有问题,欢迎一起讨论,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_32241189/article/details/81591456
今日推荐