RAG中稠密向量和稀疏向量
本文对比了稀疏向量与稠密向量的特点及其在RAG(检索增强生成)中的应用。稀疏向量(如BM25)通过高维稀疏表示实现精确关键词匹配,但缺乏语义理解;稠密向量(如BERT嵌入)则通过低维稠密编码捕捉语义相似性。在RAG中,稠密向量因其强大的语义理解能力成为核心检索机制,而稀疏向量作为补充处理精确匹配需求。当前趋势是采用混合检索策略,结合两者优势:通过算法(如RRF)融合语义相关性和关键词匹配结果,显著
1. 稠密向量 vs. 稀疏向量:分别是什么?
我的理解是稠密向量指的是语义信息,稀疏向量是语句中的关键词,还可以这样定义:
稀疏向量
-
是什么:一个维度极高(比如词汇表大小,数万甚至数百万维)的向量,但其中绝大多数元素都是0,只有少数几个位置是非零值(比如1、TF-IDF值等)。
-
代表算法:BM25, TF-IDF
-
核心思想:精确的关键词匹配。它基于词频、逆文档频率等统计信息来判断文档与查询的相关性。
-
好比什么:图书馆的索引卡片。如果你找含有“人工智能”和“深度学习”的书,卡片系统会精确地找出所有同时包含这两个确切词汇的书,但它不理解“AI”是“人工智能”的缩写,或者“神经网络”和“深度学习”是高度相关的概念。
稠密向量
-
是什么:一个相对低维(通常是几百到几千维)的向量,其中每一个维度都是一个浮点数,几乎没有零值。每个维度并不对应一个具体的单词,而是代表某种抽象的“语义特征”。
-
代表技术:基于Transformer的模型,如BERT, Sentence-BERT, OpenAI的Embedding模型(
text-embedding-ada-002等)。 -
核心思想:语义相似性匹配。它通过深度学习模型将文本映射到一个语义空间,在这个空间里,语义相近的文本距离更近,即使它们没有共同的关键词。
-
好比什么:一个理解语义的图书管理员。如果你问“让机器像人一样学习的方法”,即使你的 query 里没有“人工智能”或“机器学习”这些词,管理员也能理解你的意图,并为你推荐相关的书籍。它能理解同义词、 paraphrasing(释义)和上下文关联。
2. RAG中谁更多?为什么?
虽然混合检索是趋势,但稠密向量通常承担着更核心的角色。原因如下:
-
核心优势:语义理解:RAG的目的就是为了解决传统关键词搜索的局限性。用户的问题往往是自然语言的、模糊的,稠密向量检索的语义理解能力与之完美匹配。它能够找到“意思上相关”的文档,即使用户查询和文档用词不同。
-
效率与存储:尽管单个稠密向量维度低且密集,计算相似度(如余弦相似度)非常高效。稀疏向量虽然本身计算快,但其高维特性对存储和索引构建有一定挑战。
-
现代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中的角色 | 重要补充,处理精确匹配 | 核心主力,负责语义理解 |
-
“分别指的是什么”:稀疏向量代表关键词存在性,稠密向量代表抽象语义信息。
-
“哪个多”:从作为核心检索机制的角度看,稠密向量是当前更多系统依赖的基础。但从完整解决方案的角度看,结合两者的混合检索正在成为最多、最有效的选择。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)