当前位置: 首页 > news >正文

深度学习系列 | Seq2Seq端到端翻译模型

一、通俗总结

Seq2Seq 就像一个 “序列转换器”:先把输入的一段话 “压缩成一个核心意思”,再根据这个意思 “一句句生成另一段话”,能搞定翻译、听写这类 “输入输出不一样长” 的任务,但太长的内容可能记不全,还容易越错越离谱。

二、拆解知识步骤

1. 由来的背景

传统序列模型(如 RNN)只能处理 “输入输出长度固定” 或 “等长” 的任务(如文本分类、情感分析),但现实中很多任务需要 “不等长序列转换”:

  • 机器翻译:输入中文句子(长度 5)→ 输出英文句子(长度 7)
  • 语音转文字:输入音频序列(时长 3 秒)→ 输出文字序列(长度 10)
  • 问答系统:输入问题(长度 8)→ 输出答案(长度 5)
    这些场景下,需要一种能 “吃进一个序列,吐出另一个长度不同的序列” 的模型,Seq2Seq 由此被提出(2014 年由 Google 团队提出)。

2. 目标及解决的问题

  • 目标:实现 “任意长度输入序列→任意长度输出序列” 的端到端转换,无需人工设计特征。
  • 解决的问题:
    • 解决 “输入输出长度不固定” 的问题:突破传统模型对序列长度的限制。
    • 解决 “序列依赖捕捉” 的问题:通过编码器逐词处理输入,捕捉词与词的时序关系(如 “机器学习” 中 “机器” 和 “学习” 的关联)。
    • 解决 “跨模态转换” 的问题:支持文本→文本(翻译)、语音→文本(听写)、文本→语音(合成)等跨类型序列转换。

3. 怎么实现的

我们看seq2seq做了干了什么事情? seq2seq模型的输入可以是一个 (单词、字母或者图像特征) 序列, 输出是另外一个(单词、字母或者图像特征) 序列, 一个训练好的seq2seq模型如下图所示 :

如下图所示,以NLP中的机器翻译任务为例, 序列指的是一连串的单词, 输出也是一连串的单词

将上图蓝色的模型进行拆解, 如下图所示: seq2seq模型由编码器(Encoder) 和解码器(Decoder) 组成。绿色的编码器会处理输入序列中的每个元素并获得输入信息,这些信息会被转换成为一个黄色的向量(称为context向量)。当我们处理完整个输入序列后,编码器把 context向量 发送给紫色的解码器,解码器通过context向量中的信息,逐个元素输出新的序列。

在机器翻译任务中,seq2seq模型实现翻译的过程如下图所示。seq2seq模型中的编码器和解码器一般采用的是循环神经网络RNN,编码器将输入的法语单词序列编码成context向量(在绿色encoder和紫色decoder中间出现),然后解码器根据context向量解码出英语单词序列

我们来看一下黄色的context向量是什么?本质上是一组浮点数。而这个context的数组长度是基于编码器RNN的隐藏层神经元数量的。下图展示了长度为4的context向量,但在实际应用中,context向量的长度是自定义的,比如可能是256,512或者1024.

我们再找个生活中的案例做对比, “翻译官工作流程”:

阶段 1:编码器(理解输入)
  • 角色:像 “翻译官听原文”,逐词 “阅读” 输入序列(如中文句子),每一步记住当前词和之前的内容,最终把整段话的意思压缩成一个 “核心记忆”(上下文向量c)。
  • 工具:常用 LSTM/GRU(带门控机制的 RNN),避免长序列信息丢失(比普通 RNN 更擅长记住早期内容)。
阶段 2:解码器(生成输出)
  • 角色:像 “翻译官说译文”,基于编码器的 “核心记忆”(c),从第一个词开始,结合已说的内容,逐词生成输出序列(如英文句子)。
  • 逻辑:生成每个词时,既要参考 “核心记忆”(确保不偏离原文意思),又要参考已生成的词(确保句子通顺,如生成 “love” 后,更可能接 “machine learning” 而非 “cat”)。

4. 局限性

  • 信息瓶颈:上下文向量c是固定长度(如 512 维),当输入序列过长(如 100 词以上),早期信息会被 “压缩丢失”(类似翻译官记不住长句子的开头)。
  • 累积错误:解码器生成依赖上一个词,若某一步错了(如把 “机器学习” 译成 “machine study”),后续会跟着错(类似翻译错一个词,后面全跑偏)。
  • 无法并行:编码器和解码器都是 “逐词处理”(时序依赖),训练速度慢(比 Transformer 慢 8-10 倍)。
  • 双向信息缺失:编码器虽能看全输入,但解码器生成时只能看已生成的词(单向),难以修正全局错误(如翻译 “我不吃肉”,先译 “I don't eat”,后面很难再补 “meat” 而非 “fish”)。

三、数学表达式及含义

四、Attention的引入

引入注意力机制前, 看看前文说的局限性后, 再思考两个问题:

  • 1、 seq2seq模型处理长文本序列有哪些难点?
  • 2、 基于RNN的seq2seq模型如何结合attention来解决问题1 并提升模型效果?

基于RNN的seq2seq模型编码器所有信息都编码到了一个context向量中,便是这类模型的瓶颈。一方面单个向量很难包含所有文本序列的信息,另一方面RNN递归地编码文本序列使得模型在处理长文本时面临非常大的挑战(比如RNN处理到第500个单词的时候,很难再包含1-499个单词中的所有信息了)。

面对上面的问题, Bahdanau等2014发布的Neural Machine Translation by Jointly Learning to Align and Translate 和 Luong等2015年发布的Effective Approaches to Attention-based Neural Machine Translation 两篇论文中提出了一种叫做注意力attetion的技术。通过attention技术,seq2seq模型极大地提高了机器翻译的质量。归其原因是:attention注意力机制,使得seq2seq模型可以有区分度、有重点地关注输入序列。


让我们继续来理解带有注意力的seq2seq模型:一个注意力模型与经典的seq2seq模型主要有2点不同:

1、首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的hidden state(隐藏层状态)传递给解码器,而不是只传递最后一个hidden state(隐藏层状态),如下面的动态图所示:

2、注意力模型的解码器在产生输出之前,做了一个额外的attention处理。如下图所示,具体为:

  1. 由于编码器中每个hidden state(隐藏层状态)都对应到输入句子中一个单词,那么解码器要查看所有接收到的编码器的hidden state(隐藏层状态)。
  2. 给每个hidden state(隐藏层状态)计算出一个分数(我们先忽略这个分数的计算过程)。
  3. 所有hidden state(隐藏层状态)的分数经过softmax进行归一化。
  4. 将每个hidden state(隐藏层状态)乘以所对应的分数,从而能够让高分对应的 hidden state(隐藏层状态)会被放大,而低分对应的hidden state(隐藏层状态)会被缩小。
  5. 将所有hidden state根据对应分数进行加权求和,得到对应时间步的context向量。

所以,attention可以简单理解为:一种有效的加权求和技术,其艺术在于如何获得权重。


现在,让我们把所有内容都融合到下面的图中,来看看结合注意力的seq2seq模型解码器全流程,动态图展示的是第4个时间步:

  1. 注意力模型的解码器 RNN 的输入包括:一个word embedding 向量,和一个初始化好的解码器 hidden state,图中是 h_init 。
  2. RNN 处理上述的 2 个输入,产生一个输出和一个新的 hidden state,图中为 h_4 。
  3. 注意力的步骤:我们使用编码器的所有 hidden state向量和 h_4 向量来计算这个时间步的context向量( C_4 )。
  4. 再把 h_4 和 C_4 拼接起来,得到一个橙色向量。
  5. 我们把这个橙色向量输入一个前馈神经网络(这个网络是和整个模型一起训练的)。
  6. 根据前馈神经网络的输出向量得到输出单词:假设输出序列可能的单词有 N 个,那么这个前馈神经网络的输出向量通常是 N 维的,每个维度的下标对应一个输出单词,每个维度的数值对应的是该单词的输出概率。
  7. 在下一个时间步重复1-6步骤。

最后,我们可视化一下注意力机制,看看在解码器在每个时间步关注了输入序列的哪些部分

需要注意的是:注意力模型不是无意识地把输出的第一个单词对应到输入的第一个单词,它是在训练阶段学习到如何对两种语言的单词进行对应(在本文的例子中,是法语和英语)

该知识点的学习为我们后续学习Transformer打下坚实的基础

http://www.dtcms.com/a/358298.html

相关文章:

  • 离线大文件与断点续传:ABP + TUS + MinIO/S3
  • IAR工程如何搭建vscode+clangd编辑环境
  • 如何使用快照将 AWS OpenSearch 服务中的数据从开发环境复制到生产环境
  • 互联网医院系统优势介绍
  • 嵌入式linux相机(2)
  • 设计模式 - 静态工厂模式 + 策略模式,
  • 【Java后端】MySQL 常见 SQL 语句优化指南
  • AI 赋能综合能源管理系统:开启智慧能源新时代
  • 掌握表单:React中的受控组件与表单处理
  • 详解Vue2、Vue3与React的Diff算法
  • 【Android】OkHttp发起GET请求 POST请求
  • React Router 6 获取路由参数
  • 【自然语言处理与大模型】如何进行大模型多模态微调
  • 【ASP.NET Core】双Token机制在ASP.NET Core中的实现
  • OpenCV 图像形态学操作与边缘检测实战指南
  • ESPTimer vs GPTimer:ESP32 定时器系统深度解析
  • 机器学习 - Kaggle项目实践(6)Dogs vs. Cats Redux: Kernels Edition 猫狗二分类
  • 最强分布式锁工具:Redisson
  • Git 的核心工作流程(三区域模型)
  • github同一台电脑支持两个或以上的ssh账户(macos或Linux系统),解决Key is already in use问题
  • 医院排班|医护人员排班系统|基于springboot医护人员排班系统设计与实现(源码+数据库+文档)
  • 苍穹外卖Day7 | 缓存商品、购物车、SpringCache、缓存雪崩、缓存套餐
  • SpringCloud Alibaba微服务--Sentinel的使用
  • docker 部署Skywalking
  • 基于大模型与 PubMed 检索的光谱数据分析系统
  • 大语言模型的“可解释性”探究——李宏毅大模型2025第三讲笔记
  • Java类加载与JVM详解:从基础到双亲委托机制
  • idea 普通项目转换成spring boot项目
  • Python实现半角数字转全角数字的完整教程
  • 《中国棒垒球》垒球世界纪录多少米·垒球8号位