Seq2Seq综述

这篇文章是一个科研项目中博主翻了很多文献后写的一个Part,于是想要搬上来小小记录一下,里面参考了很多其他的博客,但是在写的时候自己也在逐渐理清自己的思路~对Seq2Seq有了更深一些的理解。版权相关问题可以私信我(毕竟这篇也是一时兴起哇)

(一)Seq2Seq历史以及作用

Seq2Seq模型全名Sequence-to-sequence,以下全部简称为Seq2Seq,该模型最早由两篇文章独立地阐述了它主要思想,分别是Google Brain团队的《Sequence to Sequence Learning with Neural Networks》和Yoshua Bengio团队的《Learning Phrase Representation using RNN Encoder-Decoder for Statistical Machine Translation》。这两篇文章针对机器翻译的问题不谋而合地提出了相似的解决思路,Seq2Seq由此产生。《Sequence to Sequence Learning with Neural Networks》论文提出了一种新的Encoder-Decoder模式,之后该技术被广泛运用于机器翻译中,之后该工程师也基于这个模型提出了一些其他的模型,并且在NLP领域得到了广泛的使用。除了机器翻译以外,在语音识别、文本摘要、问答系统、实体名称/主题提取、关系分类、文本分类、文本摘要、产品销售预测中Seq2Seq也取得了巨大的成功。

Seq2Seq是一个编码器-解码器结构的网络模型,这个模型的输入是一个不固定长度的序列,输出也是不固定长度的序列数据。编码器-解码器模型的这种特点突破了传统的固定序列长度输入的框架,在机器翻译等任务中得到了充分的利用,也是得益于这种特性,它开创了将DNN运用于翻译、聊天(问答)这类序列型任务的先河,并且在各种主流语言的相互翻译,语音助手中人机短问快答的应用中有非常好的表现。也正是由于Seq2Seq在多种任务上表现出来的普适性,我们认为它也可以被应用于文言文翻译白话文的工作当中。

在Seq2Seq模型被提出之后,学者基于该模型的基础上提出了基于Attention改进的Seq2Seq以及后来延伸出的Transformer等更加复杂的模型,进一步提高了机器翻译的准确性以及效果。

(二)Seq2Seq模型简介

编码器-解码器模型简介

Seq2Seq是一个编码器-解码器结构的网络模型,因此要探讨Seq2Seq模型的内部结构,我们首先需要了解编码器-解码器模型。编码器-解码器模型并不是某种具体的算法,而是某一类算法的统称,相当于一个通用的框架,在这个框架之下我们可以使用不同的算法来解决不同的任务,根据不同的任务可以选择不同的编码器和解码器,如RNN、LSTM、GRU等

编码器的输入通常为文字、图片、音频等,输入经过编码器后输出一个向量C。解码器得到中间语义向量C后,根据这个向量以及已经生成的历史信息y_1,y_2,y_3....y_t-1生成t时刻的单词y_t:

图1:编码器-解码器模型基本结构(来源:https://blog.csdn.net/wshixinshouaaa)
图1:编码器-解码器模型基本结构(来源:https://blog.csdn.net/wshixinshouaaa)

在这个过程中,无论整体结构的输入和输出的长度是多少,中间的向量C长度都是固定的。但这也造成了普通的编码器-解码器模型的局限性,下面我们来具体讨论这个问题。

编码器-解码器模型的局限性

从上一部分中的编码器-解码器模型基本结构的抽象图中可以看出,编码器和解码器唯一的联系只有语义编码C,即将整个输入序列的信息编码成一个固定大小的状态向量再解码,相当于将信息“有损压缩”。这样的方式有如下两个缺点:

(1)中间语义向量无法完全表达整个输入序列的信息。

(2)随着输入信息长度的增加,由于向量长度固定,先前编码好的信息会被后来的信息覆盖,丢失很多信息。

另一方面而言,在生成图1中的另一方面而言,在生成图1中的y_1,y_2,y_3时,语义编码对这三者的贡献都是一样的,然而在实际情况下,我们翻译的时候,对语义的贡献并非一致的。解决这个问题的常见方式是引入Attention(注意力机制),从而让模型理解并更多地专注于部分重点内容。

从编码器-解码器模型到Seq2Seq

以上部分我们阐述了编码器-解码器的基本结构,其本质上是一种框架,而Seq2Seq则是一种应用层上的概念,即从序列到序列,更加强调应用场景,而编码器-解码器则是一种解决Seq2Seq问题的基本模型。

Seq2Seq的优化目标函数

Seq2Seq模型通常用于将不定长的输入序列转换为另一段不定长的输出序列,当前项的内容来源于前一步的输出与输入。于是我们假设输入序列为x = {x_1,x_2,x_3....x_n},输出序列为y = {y_1,y_2,y_3...y_m},y_t代表当前输入词,Seq2Seq模型优化的目标是最大化实际输出序列的联合概率分布函数:

p(y|x) = \prod_{t=1}^{n_y}p(y_t|y_1,y_2,y_3.....y_{t-1},x)

其中y_t不仅取决于t时刻前的输出y_1,y_2,y_3....y_{t-1} ,也取决于输入序列x

但是该条件概率模型存在问题:数值下溢问题,这是因为这个式子中的每一项p(y_t|y_1,y_2,y_3...y_{t-1},x)都小于1甚至远远小于1,最终我们就会得到一个远小于1的数字,造成数值下溢。因此,在实际运用中,我们一般是将其取对数值,选择求其概率的对数和而非概率的乘积,因此实际中我们在优化的过程中我们一般将目标函数设置为:

P(y|x)=\prod _{t=1}^{n_y}log P(y_t|y_1,y_2,y_3.....y_{t-1},x)

从而避免数值下溢的问题。

Seq2Seq网络的架构

Seq2Seq的网络主要由一个编码器和一个解码器组成。 编码器将输入转换为一个隐藏状态向量,其中包含输入项的内容。 解码器进行相反的过程,将向量转换成输出序列,并使用前一步的输出作为下一步的输入。原则上编码器和解码器可以由CNN、RNN、Transformer、LSTM、GRU等结构中的任意一种组合,但是在实际的应用当中,编码器与解码器通常使用相同的网络。

优化

注意力机制:解码器编码器和解码器的结构选择基本上是一致的。输入只有一个单独的向量,这个向量包含输入序列的全部信息。注意力机制允许解码器有选择的分块地使用输入序列的信息。

束搜索,而不是选择单一的输出(文字)作为输出、多极有可能选择是保留,结构化作为一个树(使用 Softmax 上设置的注意力的分数)。 平均编码器国家加权关注的分布。

存入桶:变序列长度是可能的,因为填补0,这可以做到的输入和输出。 然而,如果的序列长度为100和输入只有3项长、昂贵的空间被浪费。 桶可以不同规模和指定的输入和输出的长度。

Seq2Seq在训练时通常使用交叉熵损失函数

参考文献

 [1]诗雨时. (2020, September 26). Python自然语言处理—Seq2Seq(Sequence-to-Sequence). CSDN. https://blog.csdn.net/weixin_38477351/article/details/108814274

 [2]Wadhwa, Mani. seq2seq model in Machine Learning. GeeksforGeeks. 2018-12-05 [2019-12-17].

 [3]Wadhwa, Mani. seq2seq model in Machine Learning. GeeksforGeeks. 2018-12-05 [2019-12-17].

 [4]Hewitt, John. Sequence 2 sequence Models (PDF). Stanford University. 2018. 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值