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

深度学习系列 | 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.xdnf.cn/news/19169.html

相关文章:

  • Ansible Playbook 调试与预演指南:从语法检查到连通性排查
  • Qt QML注册全局对象并调用其函数和属性
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • PostgreSQL 灾备核心详解:基于日志文件传输的物理复制(流复制)
  • LINUX-网络编程-TCP-UDP
  • 【光照】[光照模型]发展里程碑时间线
  • 拆解《AUTOSAR Adaptive Platform Core》(Core.pdf)—— 汽车电子的 “基础技术说明书”
  • 无网络安装来自 GitHub 的 Python 包
  • More Effective C++ 条款18:分期摊还预期的计算成本(Amortize the Cost of Expected Computations)
  • 构建坚不可摧的数据堡垒:深入解析 Oracle 高可用与容灾技术体系
  • 开发中使用——鸿蒙CoreSpeechKit让文字发声
  • 基于SpringBoot的电脑商城系统【2026最新】
  • 【C++】第二十七节—C++11(下) | 可变参数模版+新的类功能+STL中一些变化+包装器
  • Gray Code (格雷码)
  • 【机器学习入门】4.1 聚类简介——从“物以类聚”看懂无监督分组的核心逻辑
  • 【蓝桥杯 2024 省 Python B】缴纳过路费
  • 网格纹理采样算法
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • 文件,目录,字符串使用
  • 金仓数据库迁移评估系统(KDMS)V4正式上线,助力企业高效完成数据库国产化替代
  • Ubuntu 中通过 SSH 克隆 Windows 上的 Git 仓库
  • STFT和梅尔频谱图
  • Notepad++常用设置
  • Session
  • HunyuanVideo-Foley - AI视频配音 根据视频和文本描述生成逼真的电影级音频 支持50系显卡 一键整合包下载
  • uniapp解析富文本,视频无法显示问题
  • 网络初识及网络编程
  • WPF中的ref和out
  • Shell 秘典(卷三)——循环运转玄章 与 case 分脉断诀精要
  • 访问Nginx 前端页面,接口报502 Bad Gateway