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中谁更多?为什么?
虽然混合检索是趋势,但稠密向量通常承担着更核心的角色。原因如下:
核心优势:语义理解: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中的角色 | 重要补充,处理精确匹配 | 核心主力,负责语义理解 |
“分别指的是什么”:稀疏向量代表关键词存在性,稠密向量代表抽象语义信息。
“哪个多”:从作为核心检索机制的角度看,稠密向量是当前更多系统依赖的基础。但从完整解决方案的角度看,结合两者的混合检索正在成为最多、最有效的选择。