NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram
结论
Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram
n-gram VS Transformer
我们可以用一个 图书馆查询 的类比来解释它们的差异:
一、核心差异对比
| 维度 | n-gram 模型 | Transformer |
|---|---|---|
| 工作方式 | 固定窗口的"近视观察员" | 全局关联的"侦探" |
| 依赖距离 | 只能看前N-1个词(如3-gram只看前2词) | 可关注任意距离的上下文 |
| 语义理解 | 机械统计共现频率 | 理解词语间的深层关系 |
| 典型场景 | "牛奶要配_" → "饼干"(高频搭配) | "牛奶要配_" → "燕麦"(健康概念关联) |
二、具体差异拆解
1. 观察范围限制
-
n-gram 像用 望远镜片段观察
例:处理句子 "虽然价格贵但质量真的好"-
3-gram只能看到局部组合:
["价格_贵_但", "贵_但_质量", "但_质量_真"] -
无法关联首尾的 "价格" 和 "质量" 的对比关系
-
-
Transformer 像用 全景扫描仪
通过自注意力机制,让每个词都能关注到句子中所有其他词:# "质量"对"价格"的注意力权重可能高达0.7 # "但"对"虽然"的注意力权重可能达0.6
2. 语义关联能力
-
n-gram 的局限性案例
输入: "苹果股价大涨,因为新品很甜"-
3-gram会错误关联:"新品_很_甜" → 可能预测"西瓜"(高频搭配)
-
无法发现 "苹果" 在此处指公司而非水果
-
-
Transformer 的解决方案
通过上下文注意力权重识别语义:"苹果" ← 关注到 "股价" (权重0.8) → 判定为企业 "甜" ← 关注到 "新品" (权重0.3) + "股价" (权重0.6) → 判定为比喻用法
3. 处理新词能力
-
n-gram 的困境
遇到新词 "元宇宙":-
所有包含 "元宇宙" 的n-gram都成为低频组合
-
导致预测结果不可靠
-
-
Transformer 的优势
通过词向量和注意力机制:-
即使没出现过 "元宇宙",也能根据词根 "元"+"宇宙"_ 推测其语义
-
类似处理过 "元数据" 和 "宇宙探索" 的经验
-
n-gram VS RNN
n-gram 和 RNN 在自然语言处理中是两种截然不同的建模思路,我们可以通过 图书馆管理 的类比来理解它们的核心差异:
一、核心机制对比
| 维度 | n-gram 模型 | RNN 模型 |
|---|---|---|
| 记忆方式 | 固定长度的纸质笔记 | 可延展的电子备忘录 |
| 依赖距离 | 只能记住前N-1步(如3-gram记2步) | 理论上可记忆无限步(实际约50-100步) |
| 计算特征 | 基于统计频次的查表操作 | 基于隐藏状态的动态计算 |
| 典型表现 | "昨天买的_奶茶"→"珍珠"(高频搭配) | "昨天买的_奶茶"→"已经变质"(因果推理) |
二、工作原理拆解
1. 信息传递方式
-
n-gram 像 接力赛跑
每个预测只依赖前一棒选手(前N-1个词):输入:"我想喝一杯热的" 3-gram预测流程: 想喝→杯 → 喝杯→热 → 杯热→的 → 热的→[END]
-
RNN 像 滚雪球
通过隐藏状态积累历史信息:hidden_state = update("我", init_state) hidden_state = update("想", hidden_state) hidden_state = update("喝", hidden_state) # 当处理到"热"时,隐藏状态已包含"我/想/喝"的信息

3. 处理长距离依赖
-
n-gram 的局限案例
句子:"虽然这款手机价格比同类产品高2000元,但它的_"-
5-gram只能看到"产品高2000元但它的"
-
无法关联开头的"虽然"与结尾的预测
-
-
RNN 的优势体现
通过隐藏状态传递,即使相距20个词:h_("虽然") → h_("价格") → ... → h_("它的") 仍保留着转折关系的语义特征
三、性能对比实验
以 诗歌生成 任务为例:
输入: "春风又绿江南岸"
| 模型 | 续写结果 | 得分 |
|---|---|---|
| 3-gram | "明月何时照我还"(高频组合) | 合格但缺乏新意 |
| RNN | "细雨轻拂柳叶弯"(创新性关联) | 更具文学性 |
| 人类 | "万物复苏生机盎" | 标准答案 |
关键差异:
-
n-gram依赖"江南岸"与"明月"的常见搭配
-
RNN捕捉到"春风"与"细雨"的意境关联
RNN/LSTM VS Seq2Seq
在序列到序列(Seq2Seq)任务中(如机器翻译、文本摘要等),直接使用RNN后通过全连接层输出(1 to N)看似简单,但存在以下关键问题,而编码器-解码器(Encoder-Decoder)结构通过分步编码和解码的方式有效解决了这些挑战:
1. 序列的时序依赖性
自然语言中的单词顺序至关重要。例如:
-
句子1:
猫追老鼠 -
句子2:
老鼠追猫
两个句子包含相同的词,但含义完全相反。 -
简单词嵌入+全连接的缺陷:
若直接将所有词嵌入拼接成一个向量(如[猫, 追, 老鼠]→ 一个长向量),模型会丢失词序信息,无法区分两个句子的差异。 -
编码器-解码器的优势:
通过LSTM或Transformer按顺序处理输入词,编码器能够保留词序信息,并在隐藏状态中传递时序依赖关系。
2. 输入和输出的变长问题
在Seq2Seq任务中,输入和输出的长度通常是动态变化的。例如:
-
输入:英文句子
"Hello world"(2个词) -
输出:中文翻译
"你好世界"(3个词) -
简单词嵌入+全连接的缺陷:
全连接层需要固定维度的输入和输出,无法处理变长序列。 -
编码器-解码器的优势:
-
编码器可处理任意长度的输入序列,将其压缩为固定长度的上下文向量(
hidden和cell)。 -
解码器基于上下文向量逐步生成变长的输出序列(逐词生成,直到预测到
<eos>)。
-
3. 长距离依赖建模
语言中常存在跨越多个单词的依赖关系。例如:
-
句子:
The cat, which was hungry and had been wandering the streets for days, finally found some food.
主句的主语cat与谓语found相隔很远。 -
简单词嵌入+全连接的缺陷:
全连接层难以捕捉长距离依赖(尤其是当句子较长时)。 -
编码器-解码器的优势:
-
LSTM通过门控机制(遗忘门、输入门)逐步更新
cell状态,传递长期信息。 -
Transformer通过自注意力机制(Self-Attention)直接建模词与词之间的全局依赖。
-
4. 信息压缩与语义表示
编码器的核心作用是将输入序列编码为一个全局语义表示(上下文向量)。
-
简单词嵌入+全连接的缺陷:
直接将所有词嵌入拼接为一个向量,缺乏对整体语义的抽象(相当于“词袋模型”)。 -
编码器-解码器的优势:
-
编码器通过循环或注意力机制逐步融合上下文信息,生成紧凑的语义表示。
-
解码器基于此表示逐步展开生成目标序列,确保输出与输入语义一致。
-
5. 模型效率与参数共享
-
简单词嵌入+全连接的缺陷:
若输入长度为N,输出长度为M,全连接层的参数量为(N×embedding_dim) × M,随序列长度增长迅速膨胀,导致计算成本高且易过拟合。 -
编码器-解码器的优势:
-
LSTM或Transformer通过参数共享(同一层处理所有时间步),参数量仅与隐藏层维度相关,与序列长度无关。
-
例如,LSTM的参数量为
4×(embedding_dim + hidden_dim)×hidden_dim,与输入长度N无关。
-
6. 实际案例对比
假设用两种模型处理机器翻译任务:
方案1:简单全连接
-
输入:将源句子所有词嵌入拼接为一个向量(如
N=5,embedding_dim=256→ 输入维度1280)。 -
输出:直接映射到目标语言的词表(如
vocab_size=10000),参数量为1280×10000 = 12.8M。 -
问题:
-
无法处理长度变化的输入输出。
-
无法建模词序和长距离依赖。
-
参数量大且难以训练。
-
方案2:编码器-解码器(LSTM)
-
编码器:LSTM逐步处理源序列,输出上下文向量(如
hidden_dim=256)。 -
解码器:LSTM基于上下文向量逐词生成目标序列。
-
参数量:编码器和解码器的LSTM参数量均为
4×(256+256)×256 ≈ 1M,总计约2M。 -
优势:
-
处理变长序列。
-
建模词序和长距离依赖。
-
参数量小且高效。
-
总结
编码器-解码器结构通过分步编码和解码,解决了以下核心问题:
-
时序依赖性:保留词序信息。
-
变长序列处理:动态生成输出。
-
长距离依赖建模:通过LSTM或注意力机制捕捉全局关系。
-
语义压缩与传递:生成紧凑的上下文表示。
-
模型效率:参数共享降低计算成本。
相关文章:
NLP模型大对比:Transformer >Seq2Seq > LSTM > RNN > n-gram
结论 Transformer 大于 传统的Seq2Seq 大于 LSTM 大于 RNN 大于 传统的n-gram n-gram VS Transformer 我们可以用一个 图书馆查询 的类比来解释它们的差异: 一、核心差异对比 维度n-gram 模型Transformer工作方式固定窗口的"近视观察员"全局关联的&q…...
DeepSeek部署教程(基于Ollama)
虽说在过年,但不能忘了学习。这几天科技圈最火的莫过于deepseek,我抽空也学习一下deepseek的部署过程,主要还是因为官方服务已经彻底瘫了[手动狗头]。 1、下载Ollama并安装 https://github.com/ollama/ollama/releases/latest/download/Oll…...
Java基础面试题总结(题目来源JavaGuide)
问题1:Java 中有哪 8 种基本数据类型?它们的默认值和占用的空间大小知道不? 说说这 8 种基本数据类型对 应的包装类型。 在 Java 中,有 8 种基本数据类型(Primitive Types): 基本数据类型关键…...
WPS mathtype间距太大、显示不全、公式一键改格式/大小
1、间距太大 用mathtype后行距变大的原因 mathtype行距变大到底怎么解决-MathType中文网 段落设置固定值 2、显示不全 设置格式: 打开MathType编辑器点击菜单栏中的"格式(Format)"选择"间距(Spacing)"在弹出的对话框中调整"分数间距(F…...
宇宙大爆炸是什么意思
根据宇宙大爆炸学说,宇宙间的一切都在彼此远离,而且距离越远,远离的速度越快。我们只能在地球上观察这种现象,而我们观察到的速度符合如下公式,其中 为哈勃常数, 为距离, 为速度(…...
MotionLCM 部署笔记
目录 依赖项 humanml3d: sentence-t5-large 下载数据: 报错:No module named sentence_transformers 继续报错:from transformers.integrations import CodeCarbonCallback 解决方法: GitHub - Dai-Wenxun/Moti…...
VLLM性能调优
1. 抢占 显存不够的时候,某些request会被抢占。其KV cache被清除,腾退给其他request,下次调度到它,重新计算KV cache。 报这条消息,说明已被抢占: WARNING 05-09 00:49:33 scheduler.py:1057 Sequence gr…...
ESP32-S3模组上跑通esp32-camera(39)
接前一篇文章:ESP32-S3模组上跑通esp32-camera(38) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…...
Linux《基础指令》
在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境,那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分,即指令和关于Linux的基础知识;因此本篇指令和基础知识的…...
9.进程间通信
9.进程间通信 **1. 进程间通信(IPC)概述****2. 无名管道(Pipe)****3. 有名管道(FIFO)****4. 信号通信(Signal)****5. 练习与作业****6. 信号的应用****7. 总结** 1. 进程间通信&…...
Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
目录 背景 解决gpedit.msc打不开 解决复制粘贴 剪贴板的问题 启用远程桌面剪贴板与驱动器 重启RDP剪贴板监视程序 以上都不行?可能是操作被Win11系统阻止 最后 背景 远程桌面无法复制粘贴,需要查看下主机策略组设置,结果按WinR输入…...
供应链系统设计-供应链中台系统设计(十二)- 清结算中心设计篇(一)
概述 在之前的文章中,我们通过之前的两篇文章中,如下所示: 供应链系统设计-供应链中台系统设计(十)- 清结算中心概念片篇 供应链系统设计-供应链中台系统设计(十一)- 清结算中心概念片篇 说…...
Vue.js 单页应用(SPA)开发教程:从零开始构建你的第一个项目
单页应用(SPA,Single Page Application)是现代前端开发的主流模式。Vue.js 是一个非常适合构建 SPA 的框架,它通过 Vue Router 实现页面导航,通过组件化开发和状态管理实现复杂的交互功能。本篇教程将带你了解 SPA 的基…...
Linux C openssl aes-128-cbc demo
openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...
你了解哪些Java限流算法?
大家好,我是锋哥。今天分享关于【你了解哪些Java限流算法?】面试题。希望对大家有帮助; 你了解哪些Java限流算法? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java 中常用的限流算法主要有以下几种,它们广泛应用于处理流量控…...
【漫话机器学习系列】065.梯度(Gradient)
梯度(Gradient) 在数学和机器学习中,梯度是一个向量,用来表示函数在某一点的变化方向和变化率。它是多变量函数的一阶偏导数的组合。 梯度的定义 设有一个标量函数 ,它对 是可微的,则该函数在某一点的…...
BswM(基础软件管理)详解
BswM(基础软件管理)详解 BswM(Basic Software Manager) 是 AUTOSAR BSW 的核心模块之一,负责协调基础软件(BSW)各模块的行为,根据系统状态、规则或事件动态配置其他模块。其设计目标…...
上位机知识篇---GitGitHub
文章目录 前言Git&GitHub是什么?GitGitHub Git和GitHub的区别定位功能使用方式开源协作 Git常用命令操作1. 配置2. 仓库操作3. 文件操作4. 分支与合并5.远程操作6.撤销更改7.查看历史 GitHub常用操作1.创建仓库2.Fork仓库3.Pull Request4.Issue跟踪5.代码审查 G…...
网站快速收录:提高页面加载速度的重要性
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/32.html 网站快速收录中,提高页面加载速度具有极其重要的意义。以下从多个方面详细阐述其重要性: 一、提升用户体验 减少用户等待时间:页面加载速度直接…...
Vue.js组件开发-实现全屏背景图片滑动切换特效
使用 Vue 实现全屏背景图片滑动切换特效的详细步骤、代码、注释和使用说明。 步骤 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。准备图片资源:准备好要用于背景切换的图片,并将它们放在项目的合适目录下。编写 HTML 结构࿱…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
