循环神经网络二:序列到序列模型与机器翻译基础

循环神经网络二:序列到序列模型与机器翻译基础

26.1 本章导学

上一章的 RNN、LSTM 可以处理单序列的输入或输出,解决分类、标注、单步预测等任务。但现实中很多场景是输入一个序列、输出另一个序列,比如机器翻译输入中文序列输出英文序列、文本摘要输入长文本输出摘要序列、对话系统输入上文输出回复。这类任务统称为序列到序列任务,简称 Seq2Seq。

Seq2Seq 架构的提出,是自然语言处理发展史上的重要里程碑。它用编码器 - 解码器的统一框架,解决了任意长度序列到序列的映射问题,让端到端的机器翻译成为可能。更重要的是,Seq2Seq 范式直接催生了注意力机制,而注意力正是 Transformer 的核心组件。大语言模型的自回归生成、编码器 - 解码器架构,全部源自 Seq2Seq 的技术体系。

本章是循环神经网络的进阶篇章,聚焦 Seq2Seq 范式与机器翻译应用。首先讲解编码器 - 解码器架构的核心思想,拆解 RNN 编码器与 RNN 解码器的工作流程;然后对比训练与推理的差异,讲解教师强制与自回归生成两种模式;接着分析固定语义向量的瓶颈,引出注意力机制的诞生背景与计算逻辑,讲清注意力为什么是 Seq2Seq 的关键升级;再结合机器翻译任务,介绍完整的任务流程、数据处理与评估方法;最后梳理 Seq2Seq 范式的局限,以及它向 Transformer 演进的技术脉络,打通循环网络到大模型的认知链路。

26.2 Seq2Seq:编码器 - 解码器架构

26.2.1 核心思想:编码与解码

序列到序列任务的核心难点在于:输入和输出都是变长的,而且长度不一定相等。比如中文句子 10 个词,翻译成英文可能是 15 个词,一一对应是行不通的。 Seq2Seq 采用编码器加解码器的两段式架构,完美解决了这个问题。 编码器负责处理输入序列,把整个输入序列压缩成一个固定长度的语义向量,也叫上下文向量。这个向量承载了输入序列的全部语义信息,是输入的抽象表示。 解码器负责根据编码得到的语义向量,逐词生成输出序列。它是一个自回归的生成过程,每一步生成一个词,生成的结果又作为下一步的输入,直到生成结束标记。

整个架构非常优雅:编码器负责 "理解输入",解码器负责 "生成输出",二者各司其职,中间通过语义向量衔接。无论输入输出多长,都可以用这个统一的框架处理。早期的 Seq2Seq,编码器和解码器通常都使用 LSTM 或 GRU,因此也叫循环编解码模型。

26.2.2 RNN 编码器的工作流程

编码器通常使用多层双向 LSTM,能够同时提取输入序列的上文和下文信息。输入序列的每个词先转为词向量,然后依次输入编码器 LSTM,逐层提取特征。 编码器的最终输出,是最后一个时刻的隐藏状态和细胞状态,也就是语义向量 C。理论上,这个向量包含了整个输入序列的所有语义信息。解码器初始状态就用这个语义向量初始化,相当于解码器在生成之前,已经读完了整个输入序列,知道要基于什么内容生成。

比如机器翻译中,编码器读完整个中文句子,把语义压缩到状态向量里,解码器基于这个状态,逐词生成英文翻译。

26.3.3 RNN 解码器的工作流程

解码器是一个单向的 LSTM,因为生成是从左到右依次进行的,看不到未来的词。 初始时刻,解码器的隐藏状态初始化为编码器的最终语义向量,输入是特殊的起始标记。解码器根据当前状态和输入,计算得到当前时刻的输出,再通过全连接层和 Softmax 得到词表上的概率分布,选择概率最大的词作为当前生成的词。 生成的当前词,又作为下一个时刻的输入,更新隐藏状态,生成下一个词。不断重复这个过程,直到生成结束标记,或者达到最大长度,生成过程终止。

整个生成过程是自回归的:每一步的输出都成为下一步的输入,一步步生成完整序列。这和人类翻译的过程很像:读完源语言句子,理解意思,然后一个词一个词地写出目标语言句子。

26.3 训练与推理的差异

Seq2Seq 模型的训练和推理,生成方式是不一样的,这是非常重要的细节。

26.3.1 训练阶段:教师强制

训练的时候,如果用上一步的预测作为下一步的输入,一旦前面预测错了,后面的输入就都是错的,误差会不断累积,模型很难收敛。因此训练阶段采用教师强制策略:每一步的输入都使用真实的前一个词,而不是模型自己预测的词。 也就是说,训练时解码器每一步都能拿到正确的上文,只需要专注学习当前位置该输出什么。这样训练非常稳定,收敛速度快。 损失函数是每一步的交叉熵损失之和,所有生成位置的损失加起来,反向传播更新参数。编码器和解码器一起训练,端到端优化。

26.3.2 推理阶段:自回归生成

推理的时候,没有真实的目标序列,只能用模型自己生成的结果作为下一步输入。这就是自回归生成:第一步输入起始标记,生成第一个词;第二步把第一个词作为输入,生成第二个词;依次类推,直到生成结束符。 自回归生成是串行的,必须一个词一个词生成,无法并行,这也是生成模型推理速度慢的根本原因。现在的大语言模型推理,本质也是同样的自回归模式。

26.3.3 训练与推理的偏差

教师强制训练虽然收敛快,但会导致训练和推理的输入分布不一致:训练时每一步都是正确的上文,推理时每一步可能是错误的上文。这种偏差叫做暴露偏差,会导致推理效果下降。 为了缓解这个问题,研究者提出了计划采样等方法,训练时偶尔用模型自己的预测作为输入,让模型逐渐适应错误的上文,提升推理鲁棒性。但这只是缓解,无法从根本上解决。

26.4 注意力机制:Seq2Seq 的关键升级

26.4.1 固定语义向量的瓶颈

早期的 Seq2Seq 有一个非常严重的问题:无论输入序列多长,都要压缩成一个固定长度的语义向量。输入短的时候还好,输入一长,比如长句子、长文档,一个固定向量根本装不下所有信息,信息丢失非常严重。 解码器生成每个词的时候,都只能用同一个全局语义向量,无法针对性地关注输入的对应部分。比如翻译到 "苹果" 这个词的时候,应该重点关注输入中对应的源语言词,但固定向量做不到,所有位置都用同样的信息,生成准确率很低。 这是 Seq2Seq 最大的性能瓶颈,长序列翻译效果急剧下降。注意力机制正是为了解决这个问题而诞生的。

26.4.2 注意力的核心思想

注意力的思路非常符合人类的认知习惯:人在翻译的时候,生成每个词,目光都会聚焦在输入句子对应的部分,而不是整句话同等关注。生成哪个词,就重点关注输入中对应的位置。 注意力机制让解码器不再使用固定的全局语义向量,而是每生成一个词,都动态计算当前时刻对输入所有位置的注意力权重,然后根据权重对输入的所有隐藏状态做加权求和,得到当前步专属的上下文向量。 简单说,就是生成第 i 个词的时候,自动算出输入每个位置的重要程度,加权组合出当前需要的语义信息。不同的生成位置,关注的输入位置不一样,完美解决了固定向量的信息瓶颈。

26.4.3 注意力的计算流程

注意力的计算分为三步: 第一步,计算注意力得分。用解码器当前时刻的查询向量,和编码器每个位置的键向量做相似度计算,得到每个位置的原始得分。最常用的是点积相似度,也可以用加性注意力。 第二步,Softmax 归一化。把原始得分做 Softmax,得到 0 到 1 之间的权重,所有权重加起来等于 1。权重越大,代表当前步越关注这个输入位置。 第三步,加权求和。用注意力权重对编码器的值向量做加权求和,得到最终的上下文向量。 这个上下文向量和解码器当前隐藏状态结合,再生成当前词的输出。

注意力机制的效果是革命性的。加入注意力之后,长句子的翻译准确率大幅提升,甚至超过了当时最好的统计机器翻译系统。更重要的是,注意力权重是可视化的,可以清晰看到生成每个词的时候,模型关注了输入的哪个位置,可解释性非常好。

26.4.4 从 Seq2Seq 注意力到自注意力

Seq2Seq 的注意力是编码器和解码器之间的注意力,也叫交叉注意力。很快研究者就想到,不仅编码器和解码器之间可以做注意力,编码器内部、解码器内部也可以做自注意力,让序列内部的每个位置都能关注其他所有位置,更好地建模上下文依赖。 自注意力的提出,彻底摆脱了循环结构的束缚。既然通过注意力可以直接建模任意两个位置的依赖,为什么还需要串行的 RNN?基于这个思路,Transformer 架构应运而生:完全抛弃循环,全部用自注意力建模序列依赖,实现了完全并行的计算。 可以说,Seq2Seq 加注意力,就是 Transformer 的直接前身。Transformer 的编码器 - 解码器结构、交叉注意力、自注意力,全部都是在 Seq2Seq 注意力的基础上发展而来的。理解了 Seq2Seq 注意力,就能轻松理解 Transformer 的注意力机制。

相关推荐
SamChan906 小时前
对比 4 种主流 PDF 文档解析方案:PyMuPDF vs pdfplumber vs Apache PDFBox vs 大模型 OCR
python·ai·pdf·ocr·apache·机器翻译
阿图灵21 小时前
Seq2Seq Transformer 中英翻译实战:从 GRU 到 Transformer,BLEU 0.225 → 0.307
pytorch·深度学习·gru·transformer·机器翻译·seq2seq
qyyyyy5704 天前
英文技术标准和协议规范怎么读?RFC、接口规范与安全标准 PDF 翻译流程
网络协议·网络安全·机器翻译·csrf·技术美术
qyyyyy5704 天前
PDF 表格翻译后总是错位?参数表、测试数据和跨页表格处理方法
ai·语音识别·机器翻译·数据库管理员·石墨文档
阿图灵6 天前
基于 GRU 的 Seq2Seq 中英机器翻译:从 Tatoeba 语料到 BLEU 0.195
深度学习·gru·nlp·机器翻译·seq2seq
SamChan907 天前
用Python+Requests批量翻译PDF:从脚本到调度
后端·python·microsoft·ai·pdf·机器翻译
佛祖让我来巡山9 天前
把AI从"文盲"训练成"学霸",人类只用了四步
ai训练·ai学习
SamChan9019 天前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
SamChan9021 天前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译