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

RAG中稠密向量和稀疏向量

1. 稠密向量 vs. 稀疏向量:分别是什么?

我的理解是稠密向量指的是语义信息,稀疏向量是语句中的关键词,还可以这样定义:

稀疏向量
  • 是什么:一个维度极高(比如词汇表大小,数万甚至数百万维)的向量,但其中绝大多数元素都是0,只有少数几个位置是非零值(比如1、TF-IDF值等)。

  • 代表算法:BM25, TF-IDF

  • 核心思想精确的关键词匹配。它基于词频、逆文档频率等统计信息来判断文档与查询的相关性。

  • 好比什么图书馆的索引卡片。如果你找含有“人工智能”和“深度学习”的书,卡片系统会精确地找出所有同时包含这两个确切词汇的书,但它不理解“AI”是“人工智能”的缩写,或者“神经网络”和“深度学习”是高度相关的概念。

稠密向量
  • 是什么:一个相对低维(通常是几百到几千维)的向量,其中每一个维度都是一个浮点数,几乎没有零值。每个维度并不对应一个具体的单词,而是代表某种抽象的“语义特征”。

  • 代表技术:基于Transformer的模型,如BERT, Sentence-BERT, OpenAI的Embedding模型(text-embedding-ada-002等)。

  • 核心思想语义相似性匹配。它通过深度学习模型将文本映射到一个语义空间,在这个空间里,语义相近的文本距离更近,即使它们没有共同的关键词。

  • 好比什么一个理解语义的图书管理员。如果你问“让机器像人一样学习的方法”,即使你的 query 里没有“人工智能”或“机器学习”这些词,管理员也能理解你的意图,并为你推荐相关的书籍。它能理解同义词、 paraphrasing(释义)和上下文关联。


2. RAG中谁更多?为什么?

虽然混合检索是趋势,但稠密向量通常承担着更核心的角色。原因如下:

  1. 核心优势:语义理解:RAG的目的就是为了解决传统关键词搜索的局限性。用户的问题往往是自然语言的、模糊的,稠密向量检索的语义理解能力与之完美匹配。它能够找到“意思上相关”的文档,即使用户查询和文档用词不同。

  2. 效率与存储:尽管单个稠密向量维度低且密集,计算相似度(如余弦相似度)非常高效。稀疏向量虽然本身计算快,但其高维特性对存储和索引构建有一定挑战。

  3. 现代Embedding模型的成熟:像OpenAI, Cohere等公司提供的以及开源的(如BGE-M3)Embedding模型效果非常好,使得基于稠密向量的语义搜索成为RAG的“标配”起点。

稀疏向量(如BM25)并未被抛弃,它在RAG中扮演着重要的“补充”角色:

  • 处理专有名词和精确匹配:对于日期、人名、产品代码、特定术语等,精确的关键词匹配可能更有效。例如,查询“Python 3.12新特性”,BM25能精准匹配到包含“Python 3.12”的文档,而语义模型可能可能会找到关于“编程语言版本更新”的一般性文章。

  • 可解释性:稀疏检索的结果更容易解释,因为你可以清晰地看到是哪些关键词匹配上了。


3. 混合检索:强强联合

正因为两者各有优劣,现代的先进RAG系统普遍采用混合检索

  • 如何工作:系统会同时使用稠密检索器和稀疏检索器对知识库进行搜索。

    • 稠密检索器返回一个基于语义相似度的排名列表。

    • 稀疏检索器返回一个基于关键词匹配的排名列表。

  • 结果融合:将两个列表通过特定的算法(如** Reciprocal Rank Fusion - RRF**)进行融合,得到一个最终的、综合了语义相关性和关键词匹配度的排名结果。

这种方法既能找到语义上相关的内容,又能确保精确的关键词匹配不被遗漏,大大提高了检索的召回率和准确性。

总结

特性稀疏向量(如BM25)稠密向量(如Embedding模型)
核心关键词匹配语义相似性
向量特点高维、大量零值相对低维、连续浮点数
优点精确匹配、可解释性强理解语义、泛化能力强
缺点无法处理一词多义、同义词可能忽略关键术语;模型有训练成本
在RAG中的角色重要补充,处理精确匹配核心主力,负责语义理解
  • “分别指的是什么”:稀疏向量代表关键词存在性,稠密向量代表抽象语义信息

  • “哪个多”:从作为核心检索机制的角度看,稠密向量是当前更多系统依赖的基础。但从完整解决方案的角度看,结合两者的混合检索正在成为最多、最有效的选择。

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

相关文章:

  • 基于抗辐照性能的ASP4644S电源芯片特性分析与多领域应用验证
  • show-overflow-tooltip使用当内容过多不展示...
  • 国密双证书双向认证实践
  • 浅拷贝,深拷贝
  • SkyWalking高效线程上下文管理机制:确保调用链中traceId来自同一个请求
  • 图像指针:高效处理像素数据的核心工具
  • 贪吃蛇--C++实战项目(零基础)
  • 直播间聊天室直播录播消息发送自动对话点赞H5开源
  • Datawhale AI夏令营---coze空间共学
  • RoboTwin--CVPR2025--港大--2025.4.17--开源
  • NLP 场景下的强化学习
  • 数据分析编程第二步: 最简单的数据分析尝试
  • 总线之间的关系,64位32位与DB数据总线CB控制总线与AB地址总线的关系
  • Spring 中 @Import 注解:Bean 注入的灵活利器
  • Java面试-自动装箱与拆箱机制解析
  • Springboot项目的各层级详细总结
  • 腾讯云COS SDK签名有效期设置为10分钟到期会自动刷新
  • 2721. 【SDOI2010】外星千足虫
  • ArduPilot plane 俯仰姿态稳定器源码逐行解析:从期望角度到升降舵 PWM_角度环角速度环
  • day24
  • Nginx(一)认识Nginx
  • 一级指针遍历二维数组
  • 3-2〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB安全防护体系
  • Python Flask快速实现163邮箱发送验证码
  • 防爆自动气象监测设备:高危环境的 “安全堡垒”
  • 高防cdn如何缓存网页静态资源
  • Nacos docker 版本配置kingbase 人大金仓 达梦 数据库
  • 定时器中断学习汇总
  • 从快递运输与排队办事,看实时通信的MVP方案与增强方案
  • V380E telnet远程连接导致rce漏洞复现(CVE-2025-7503)