NLP学习笔记11:序列到序列模型——从 Encoder-Decoder 到 Attention

张开发
2026/4/22 10:34:38 15 分钟阅读
NLP学习笔记11:序列到序列模型——从 Encoder-Decoder 到 Attention
NLP学习笔记11序列到序列模型——从 Encoder-Decoder 到 Attention作者Ye Shun日期2026-04-19一、前言在自然语言处理任务中我们经常会遇到这样一类问题输入是一段序列输出也是一段序列输入和输出的长度还不一定相同例如机器翻译中文句子 → 英文句子文本摘要长文本 → 短摘要对话生成用户输入 → 系统回复问题生成文章片段 → 问题这类任务最经典的建模方式之一就是序列到序列模型Sequence-to-Sequence, Seq2Seq。Seq2Seq 的核心思想非常直观先把输入序列“读懂”再把它“写出来”。也就是说前半部分负责理解输入后半部分负责生成输出这篇笔记将围绕以下几个问题展开什么是 Seq2Seq 模型编码器和解码器分别在做什么为什么基础 Seq2Seq 会遇到瓶颈Attention 是如何改进 Seq2Seq 的Seq2Seq 在机器翻译、摘要和对话中的典型应用如何用代码实现一个最小 Seq2Seq 模型二、什么是序列到序列模型Seq2Seq 模型是一种把一个输入序列映射为另一个输出序列的神经网络架构。它通常采用Encoder-Decoder编码器-解码器结构编码器Encoder读取输入序列并将其编码成内部表示解码器Decoder根据编码结果逐步生成输出序列如果以机器翻译为例输入序列我 喜欢 自然语言处理输出序列I love natural language processing这里输入和输出长度不同词汇空间不同语序可能不同因此普通的分类模型并不适合而 Seq2Seq 天然适合这种“序列到序列”的转换任务。三、Seq2Seq 的基础架构1. 编码器Encoder编码器的任务是按顺序读取输入 token并逐步更新隐藏状态。在早期 Seq2Seq 模型中编码器通常由RNNLSTMGRU来实现。假设输入序列为x1,x2,x3,...,xTx_1, x_2, x_3, ..., x_Tx1​,x2​,x3​,...,xT​那么编码器在每个时间步都会更新隐藏状态htf(xt,ht−1)h_t f(x_t, h_{t-1})ht​f(xt​,ht−1​)最终最后一个隐藏状态会被视作整个输入序列的语义表示也就是所谓的上下文向量context vector。2. 解码器Decoder解码器的任务是根据上下文向量逐步生成输出序列y1,y2,y3,...,yNy_1, y_2, y_3, ..., y_Ny1​,y2​,y3​,...,yN​解码器在每一步通常会接收上一步生成的 token上一步的隐藏状态编码器提供的上下文信息然后预测当前时刻最可能的输出 token。3. 基本流程一个标准的 Seq2Seq 工作过程如下编码器读取整个输入序列得到上下文向量解码器以该向量初始化状态从起始标记SOS开始逐步生成输出当生成结束标记EOS时停止这就是最基础的 Encoder-Decoder 思路。四、基础 Seq2Seq 的问题固定长度上下文瓶颈早期 Seq2Seq 最大的问题在于整个输入序列的信息要被压缩进一个固定长度向量中。这在短句上也许还行但当输入很长时就会出现明显问题前面的信息容易被遗忘长距离依赖难以保留输入越长压缩越困难例如在长句翻译中句尾的信息可能还能保留但句首的细节很容易丢失。这个问题通常被称为信息瓶颈固定上下文向量问题这也是为什么 Seq2Seq 很快引入了一个关键改进Attention 机制。五、Attention 如何改进 Seq2SeqAttention 的核心思想是解码器在生成每个输出词时不必只依赖一个固定的上下文向量而是可以动态地“回头看”输入序列中的不同位置。也就是说解码器在生成第ttt个词时会对编码器所有隐藏状态h1,h2,...,hTh_1, h_2, ..., h_Th1​,h2​,...,hT​计算一组权重αt,1,αt,2,...,αt,T\alpha_{t,1}, \alpha_{t,2}, ..., \alpha_{t,T}αt,1​,αt,2​,...,αt,T​这些权重表示当前输出更应该关注输入序列中的哪些位置然后得到一个动态上下文向量ct∑i1Tαt,ihic_t \sum_{i1}^{T}\alpha_{t,i} h_ict​i1∑T​αt,i​hi​这样带来的好处非常明显不再只依赖单个固定向量长句性能显著提升模型更容易建立输入和输出之间的对齐关系例如在机器翻译中当模型生成“processing”时它可以重点关注中文中的“处理”。六、Seq2Seq 中常见的关键技术1. Teacher Forcing在训练解码器时常用Teacher Forcing教师强制技术。它的做法是训练时把真实的上一个输出词作为当前步输入而不是把模型自己预测的词再喂回去好处是训练更稳定、收敛更快。但也会带来一个问题训练时看到的是真实历史测试时只能依赖自己生成的历史这会造成训练与推理不一致也叫曝光偏差Exposure Bias。2. Greedy Search 与 Beam Search在生成时最简单的方法是每一步都选概率最高的 token这叫贪心解码Greedy Search。但贪心策略并不一定能得到全局最优结果因此常用Beam Search同时保留多个候选序列每一步扩展这些候选最后选择整体概率更高的输出Beam Search 往往可以显著提升机器翻译和摘要生成质量。3. 双向编码器为了更好地理解输入序列编码器常常使用双向 RNNBiRNN / BiLSTM / BiGRU。它会同时考虑从左到右的上下文从右到左的上下文从而让每个输入位置的表示更完整。七、Seq2Seq 的典型应用场景1. 机器翻译机器翻译是 Seq2Seq 最经典的应用场景之一。特点输入输出都为文本序列两种语言长度不一致需要处理语义、语法和词序变化常见改进包括Attention子词切分BPE、WordPieceBeam SearchTransformer 编码器-解码器2. 文本摘要文本摘要中的生成式摘要本质上也是 Seq2Seq输入原文输出摘要与翻译不同的是摘要要求模型压缩信息保留核心内容避免重复因此常见扩展包括Pointer-Generator指针生成网络Coverage Mechanism覆盖机制3. 对话生成对话系统中模型需要根据用户输入生成回复输入当前对话上下文输出回复文本这同样属于 Seq2Seq 范式。不过对话生成比翻译更难因为它通常开放性更强标准答案不唯一更容易生成空泛回答如“好的”“我明白了”因此很多对话系统会加入人设信息对话状态情感控制检索增强八、Seq2Seq 与 Transformer 的关系很多初学者会误以为Seq2Seq 是一种具体模型Transformer 是另一种完全不同的东西其实更准确地说Seq2Seq 是任务建模范式Transformer 是实现 Seq2Seq 的一种更强架构早期 Seq2Seq 常用RNN 编码器RNN 解码器后来发展为Attention-based Seq2SeqTransformer Encoder-Decoder因此Transformer 可以看作是Seq2Seq 思想在注意力框架下的现代化实现。例如原始机器翻译模型RNN Seq2Seq现代翻译模型Transformer Seq2SeqT5典型的文本到文本 Seq2Seq Transformer九、Seq2Seq 的训练与评估1. 训练步骤Seq2Seq 的训练通常包括以下流程构造输入序列和目标序列对文本进行 tokenization构建词表或子词表编码器得到输入表示解码器逐步预测输出使用交叉熵损失计算误差反向传播更新参数2. 常见评估指标不同任务会使用不同指标任务常见指标机器翻译BLEU文本摘要ROUGE对话生成BLEU、Distinct、人工评估需要注意的是生成任务仅靠自动指标往往不够因此人工评估仍然很重要。十、一个最小 Seq2Seq 模型应该包含什么如果我们要自己写一个最小可理解版 Seq2Seq通常需要这些组件输入嵌入层Embedding编码器Encoder注意力模块Attention解码器Decoder输出层Linear如果是训练模式还需要SOS起始标记EOS结束标记Teacher Forcing下面是一个极简示意classSeq2Seq(nn.Module):def__init__(self,encoder,decoder):super().__init__()self.encoderencoder self.decoderdecoderdefforward(self,src,tgt):encoder_outputs,hiddenself.encoder(src)outputsself.decoder(tgt,hidden,encoder_outputs)returnoutputs真正可用的版本还会进一步处理maskpaddingbatchbeam searchattention weights十一、实践理解为什么 Seq2Seq 很重要Seq2Seq 的意义不只是“能做翻译”。更重要的是它建立了一种统一视角把很多 NLP 任务都看成“输入文本序列 → 输出文本序列”这个思路后来影响了很多模型设计例如机器翻译摘要生成问答生成语法纠错文本改写T5 的 Text-to-Text 范式也就是说Seq2Seq 不只是一个早期模型而是一种非常核心的建模思想。十二、总结Seq2Seq 模型是自然语言处理中非常重要的一类架构它的核心思想可以概括为用编码器理解输入序列用解码器生成输出序列用 Attention 改善长序列建模能力它的发展路径大致是基础 RNN Seq2SeqAttention-based Seq2SeqTransformer Seq2Seq理解 Seq2Seq 的价值在于它帮助我们真正理解“生成任务”是如何建模的它是理解机器翻译、摘要、对话系统和 T5 等模型的重要基础如果说前面的 RNN、Attention、Transformer 是“零件”那么 Seq2Seq 就是在告诉我们这些零件如何组合起来完成一个从输入到输出的完整生成过程。十三、参考学习方向如果你想继续深入可以接着学习这些主题Bahdanau Attention 与 Luong Attention 的区别Beam Search 的具体实现Pointer-Generator 在摘要中的作用Transformer Encoder-Decoder 结构T5/BART 这类现代 Seq2Seq 预训练模型

更多文章