Seq2Seq(Sequence-to-Sequence)模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译,但后来广泛应用于其他任务,如文本摘要、对话系统、语音识别、问答系统等。
核心思想
Seq2Seq 模型的目标是将一个序列(如一句话)转换为另一个序列,例如:
-
输入:英文句子 "Hello, how are you?"
-
输出:法语句子 "Bonjour, comment ça va ?"
模型结构
Seq2Seq 模型通常由两部分组成:
-
编码器(Encoder):
-
将输入序列(如源语言句子)编码为一个固定长度的上下文向量(Context Vector),用于捕捉输入序列的语义信息。
-
常用循环神经网络(RNN、LSTM、GRU)或 Transformer 作为编码器。
-
-
解码器(Decoder):
-
基于编码器生成的上下文向量,逐步生成输出序列(如目标语言句子)。
-
解码器通常也是一个循环神经网络(或 Transformer),每一步生成一个输出词,直到生成结束符(如
<EOS>
)。
-
首先,来简单介绍下RNN(循环神经网络)结构:
1. RNN 简介
RNN结构
RNN中,每个单元接受两个输入,一个是当前时间步输入的信息 ,另一个是上一个单元的隐藏层状态
。为什么这种结构的RNN适合用于做文本等序列型数据的任务,主要是因为隐藏状态的存在使得模型具有记忆性。针对不同的任务,根据输入和输出的数量,通常对RNN结构进行调整。
RNN的常见几种结构
1.1 N to N
该模型处理的一般是输入和输出序列长度相等的任务,如
- 词性标注
- 语言模型(Language Modeling)
1.2 1 to N
此类结构的输入长度为1,输出长度为N,一般又可以分为两种:一种是将输入只输入到第一个神经元,另一种将输入输入到所有神经元。
一般用于以下任务:
图像生成文字,一般输入 X 为图片,输出为一段图片描述性的文字;
输入音乐类别,生成对应的音乐
根据小说(新闻情感)类别,生成对应的文字
1.3 N to 1
和1 to N相反,一般常见任务有:
- 序列分类任务,如给定一段文本或语音序列,归类(情感分类,主题分类等)
2. Seq2Seq 模型
经过上面对几种RNN结构的分析,不难发现RNN结构大多对序列的长度比较局限,对于类似于机器翻译的任务,输入和输出长度并不对等,为N to M的结构,简单的RNN束手无策,因此便有了新的模型,Encoder-Decoder模型,也就是Seq2Seq模型。
模型一般由两部分组成:第一部分是Encoder部分,用于对输入的N长度的序列进行表征;第二部分是Decoder部分,用于将Encoder提取出的表征建立起到输出的M长度序列的映射。
2.1 编码器 Encoder
Encoder部分一般使用了普通RNN的结构。其将一个序列表征为一个定长的上下文向量c,计算方式有多种,如下:
2.2 解码器 Decoder
相对于编码器而言,解码器的结构更多,下面介绍三种:
第一种
这种结构直接Encoder得到的上下文向量作为RNN的初始隐藏状态输入到RNN结构中,后续单元不接受 c 的输入,计算公式如下:
- 隐藏状态的更新&