1. 论文核心问题解析:为什么向量RAG无法回答数据集主题
当我们在RAG(Retrieval-Augmented Generation)系统中输入"这个数据集的主题是什么"这类问题时,常常会得到令人失望的结果。这种现象背后隐藏着当前向量检索技术的几个关键瓶颈。
传统RAG系统的工作流程通常是这样:首先将文档分割成片段(chunks),然后通过嵌入模型(embedding models)将这些片段转换为向量表示,存储在向量数据库(如Milvus、PGvector等)中。当用户提问时,系统会将问题也转换为向量,通过相似度搜索(通常是余弦相似度或点积)找到最相关的文档片段,最后将这些片段输入大语言模型生成答案。
问题就出在这个检索机制上。"数据集主题"这类问题需要的是对文档全局结构的理解,而向量检索本质上是一种局部匹配。想象一下,你让一个人通过只看书中的几个随机段落来总结整本书的主题 - 这几乎是不可能的任务。同样,当RAG系统只检索到几个孤立的文档片段时,它缺乏足够的上下文来推断整体主题。
1.1 向量检索的固有局限
向量相似度检索存在三个根本性缺陷:
-
局部性偏差:嵌入模型会将语义相似的句子映射到向量空间中相近的位置,但"主题"这种全局属性无法通过局部片段的简单聚合获得。就像拼图碎片单独看都很清晰,但缺少全局视角就难以还原完整图像。
-
密度不均问题:在向量空间中,高频术语会形成密集区域,而主题相关的关键概念可能分布稀疏。这导致检索结果偏向具体术语匹配而非概念理解。
-
维度诅咒:即使使用768或1024维的高维嵌入空间,也难以有效编码文档的层次结构和长程依赖关系。主题识别恰恰需要捕捉这种多层次语义。
python复制# 典型的RAG检索代码示例
from sentence_transformers import SentenceTransformer
import numpy as np
embedder = SentenceTransformer('all-MiniLM-L6-v2')
query = "这个数据集的主题是什么"
query_embedding = embedder.encode(query)
# 假设doc_embeddings是预计算好的文档片段向量
similariti
