跳到主要内容

5 篇博文 含有标签「reranking」

查看所有标签

RAG 位置偏差:为什么分块顺序会影响你的答案

· 阅读需 9 分钟
Tian Pan
Software Engineer

你花了数周时间调优嵌入模型。检索精度看起来不错。分块大小、重叠、元数据过滤器——一切都已调整到位。然而用户不断反映,系统"忽略"了它明明能访问的信息。相关段落每次都出现在 top-5 检索结果中,模型就是不用它。

罪魁祸首往往是位置偏差(position bias):语言模型倾向于过度依赖上下文窗口开头和结尾的信息,而对中间内容的注意力显著不足。在受控实验中,将相关段落从 20 篇文档上下文中的第 1 位移至第 10 位,准确率会下降 30-40 个百分点。你的检索器找到了正确的内容,但排序毁了它。

重排序器(Reranker)鸿沟:为什么大多数 RAG 流水线忽略了最重要的一层

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数 RAG 流水线都有一个隐形的准确率天花板,而构建它们的工程师甚至不知道它的存在。你调整分块策略、升级嵌入模型、更换向量数据库——但系统对于某些顽固的查询,依然返回看似合理但微妙错误的文档。检索看起来很合理。LLM 听起来很自信。但下游准确率已悄然进入平台期,无论进行多少提示工程(prompt engineering)都无法突破。

这个差距几乎总能追溯到同一个缺失的部分:Reranker(重排序器)。具体来说,是在第二个检索阶段缺少了交叉编码器(cross-encoder)。这一层在技术上是可选的,但在实践中跳过它的代价很高,而且在大多数 RAG 流水线所遵循的经典“嵌入、索引、查询”教程中,它往往被系统性地忽略了。

实战交叉编码器重排序:余弦相似度遗漏了什么

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的RAG管道检索了前10个文档,但LLM的答案依然有误。你将检索数量增加到50,结果还是错的。令人沮丧的是:正确的文档一直都在向量数据库里——只是排在第23位。这不是召回率的问题,而是排序的问题,而余弦相似度正是罪魁祸首。

向量搜索在找到语义相邻内容方面做得不错,但"语义相邻"和"对这个具体查询最有用"并不是一回事。余弦相似度衡量的是嵌入空间中两个向量之间的夹角,而这个夹角只能捕捉粗粒度的主题接近度。它无法捕捉查询中特定词语与文档中特定词语之间的细粒度交互——"如何防止缓冲区溢出"与"缓冲区溢出利用技术"在向量层面差异微妙,但对于你的检索系统来说却至关重要。

当 Embedding 不够用时:混合检索架构的决策框架

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数 RAG 实现都以同样的方式开始:启动一个向量数据库,使用一个不错的模型嵌入文档,在查询时运行余弦相似度,然后发布。演示效果看起来很棒。相关性感觉出奇地好。然后你将其部署到生产环境,发现“Error 221”检索到了关于“Error 222”的文档,搜索特定的产品 SKU 会出现语义相似但错误的条目,而添加日期过滤器会导致检索质量大幅下降。

向量搜索是一个真正强大的工具。但在大多数生产环境的检索工作负载中,仅靠它是不够的。在 2025 年,通过 RAG 获胜的团队并不会在稠密嵌入(dense embeddings)和关键词搜索之间做选择——他们会刻意同时使用两者。

这是一个决策框架,用于判断混合检索何时值得增加复杂性,以及如何在不破坏延迟预算的情况下构建每一层。

生产级检索技术栈:为什么纯向量搜索会失败以及应对策略

· 阅读需 15 分钟
Tian Pan
Software Engineer

大多数 RAG 系统在部署时都配备了向量数据库、几千个 embeddings,并假设语义相似度已经足够接近正确性。事实并非如此。这种“语义相似”与“实际正确”之间的差距,正是 73% 的 RAG 系统在生产环境中失败的原因,而且几乎所有这些失败都发生在检索阶段 —— 甚至在 LLM 生成任何文字之前。

“对文档进行嵌入、使用余弦相似度查询、将 top-k 传递给 LLM”的 standard playbook 在演示中有效,是因为演示查询是经过设计的。生产环境的查询则不然。用户搜索的是产品 ID、发票号码、监管代码、拼错的竞争对手名称,以及单个 embedding 向量在几何上无法满足的多重约束问题。稠密向量搜索并没有错 —— 只是它并不完整。构建一个在生产环境中真正起作用的检索栈,需要理解其中的原因,并层层加入能够弥补这些缺陷的组件。