Seq2Seq
Seq2Seq
传统的自然语言处理任务(如文本分类、序列标注)以静态输出为主,其目标是预测固定类别或标签
现实许多应用需要模型动态生成新的序列,例如
- 机器翻译
- 文本摘要
- 问答系统
- 对话系统
这些任务具有两个关键共同点:
- 输入和输出均为序列
- 输入与输出序列动态可变
模型结构
由一个编码器(Encoder)和一个解码器(Decoder)构成
- 编码器负责提取序列的语义信息,并将其压缩为一个固定长度的上下文(Context Vector)
- 解码器则基于该向量,逐步生成目标序列
编码器
编码器主要由一个循环神经网络构成(RNN、LSTM、GRU)
在模型处理输入序列时,循环神经网络会依据接收每个token的输入,并在每个时间步更新隐藏状态。每个隐藏状态都携带了截至到当前位置为止的信息。随着时间序列推进,信息不断积累,最终会在最后一个时间步形成一个包含整句话信息的隐藏状态。
这个最后的隐藏状态就会作为上下文向量(context vector),传递给解码器,用于指导后续的序列生成
解码器
解码器也是主要由一个循环神经网络构成(RNN、LSTM、GRU)
在每个时间步,模型都会根据前一时刻的隐藏状态和上一步生成的token,预测当前的输出。这种“将前一步的输出作为下一步输入”的方式被称为自回归生成(Autoregressive Generation),它确保了生成结果的连贯性
Attention机制
传统的Seq2Seq模型中,编码器在处理源句时,无论是其长度如何,最终都只能将整句信息压缩成为一个固定长度的上下文向量,最为解码器的唯一参考。这种设计存在两个显著问题:
- 信息压缩困难:固定向量难以完整表达长句或复杂语义,容易丢失关键信息
- 缺乏动态感知:解码器在每一步生成中都只能依赖同一个上下文向量,难以根据不同位置的生成需要灵活提取信息
工作原理
注意力机制的核心思想,是解码器在生成目标序列的每一步时,动态地从编码器的各个时间步的隐藏状态中提取当前所需信息,而不是只依赖一个固定的上下文向量。
动态的提取编码器中最为关心的一部分数据,注意力就放在哪部分上
- 相关性计算(注意力评分函数)
- 注意力权重计算(softmax)
- 上下文向量计算:将所有编码器输出按照注意力权重加权求和,得到上下文向量
- 解码信息融合
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WereAsh!
评论
ValineDisqus




