跳转到主要内容

你的嵌入模型在训练中从未见过的专业术语检索库

阅读需 1 分钟Tian PanTian Pan

一个检索团队针对其产品目录发布了一个开箱即用的嵌入模型 (embedding model)。评估集——从上个月搜索日志中抓取的几百个查询——回传的 recall@10 达到了 0.91。他们将其推向生产环境。三周后,支持部门开始转发工单:一位用户搜索了某个零件的具体 SKU,结果得到了五个看起来很有道理但错误的零件。另一位用户搜索了一个功能的内部代号,结果得到了一个无关功能的营销名称。评估集从未捕捉到这一点,因为评估集是从系统已经处理过的查询中提取的——即关于常用术语的查询。作为业务核心的长尾术语 (jargon) 从未被采样。

模型并没有失败。模型完全按照其训练要求执行了任务,只是针对的是一个不包含团队提供语料库的词汇分布。团队将嵌入视为一种领域中性的原语 (domain-neutral primitive)——一个从文本到向量的函数——而实际上,它是一份关于它可以解析哪些词汇的契约,是与别人的训练语料库签署的。

双峰覆盖问题

嵌入模型是在互联网规模的语料库(Common Crawl、维基百科、书籍、代码)上训练的。它们内化的词汇分布反映了公开互联网最常讨论的内容。领域特定术语——药物名称、内部产品代号、合同条款、零件编号、科学记数法、仅存在于某一行业内部的术语——很少出现或根本不出现。

结果是一种双峰覆盖模式。常用标记 (common tokens)(动词、介词、流行产品名称、众所周知的概念)在嵌入空间中密集表示;模型在许多语境中见过它们,并学会了区分它们的语义邻域。稀有标记——领域词汇所在的长尾部分——则坐落在稀疏、区分度差的区域。多个截然不同的稀有术语坍缩到同一个邻域,因为模型从未有足够的信号来推开它们。

2025 年记录这种失败模式的研究对此直言不讳:稠密检索器 (dense retrievers) 在长尾实体上失败,因为模型内部的标记分布“忘记”了这些实体的某些标记。一个稀有药物名称的嵌入并不是该药物的真实嵌入——它是分词器 (tokenizer) 将其拆分成的子词片段 (subword pieces) 的嵌入,这些片段被平均成一个向量,指向那些恰好共享这些片段的常用词。两个具有重叠子词的不同药物名称最终在嵌入空间中成为邻居,不是因为它们语义相似,而是因为它们的分词结果相似。检索系统会很自然地将一个作为另一个的结果返回。

这就是开头段落中团队遇到的失败模式。产品目录包含嵌入模型从未作为完整标记见过的零件编号和 SKU。模型将每一个都嵌入为对其子词组件的模糊覆盖。检索就变成了针对分词器产物的某种模糊匹配,而不是针对意义。

为什么评估套件没有捕捉到它

评估套件没有捕捉到它,是因为评估套件是从错误的分布中提取的。团队根据生产系统已经处理过的查询构建了评估集。由于选择偏差,系统已经处理过的查询正是系统所擅长的——常用术语、释义、导航式查找。长尾的术语密集型查询要么不在日志中(因为用户已经放弃并直接使用了 SKU 列),要么数量非常少,以至于被总体的召回率数字淹没了。

即使是知道要平衡评估集的团队,也往往平衡错了方向。他们根据查询长度、用户细分、类别进行分层抽样。他们没有根据查询的词汇分布相对于嵌入模型训练语料库的词汇分布进行分层。这种分层才是真正重要的,而且几乎没有人去计算。

MTEB 和 BEIR 基准测试在大规模上也存在同样的问题。它们聚合了许多任务并产生一个单一的数字,让你能够对模型进行排名,但排名榜首的模型在词汇分布与基准测试不同的特定领域中,表现仍然可能不佳。将排行榜得分视为领域质量信号,与将查询日志评估视为覆盖率信号是同一类范畴错误——两者都是针对模型已经训练或评估过的文本进行衡量,而不是针对你自己的语料库实际包含的文本。

该团队需要的纪律是一个领域词汇评估,将稀有术语固定下来,并专门针对它们衡量检索效果。根据语料库词汇的长尾部分构建评估集,而不是根据查询日志的头部。这两个分布完全不同,在一个分布上表现良好的模型在另一个分布上可能会悄无声息地失效。

实践中“糟糕”的表现是什么样的

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 9 分钟

被切分边界拦腰截断的关键句,以及随之消失的答案

固定大小的 Token 切分会将关键子句拦腰切断,导致碎片化的片段无法被单独检索。本文探讨了为什么这种失败在标准评估中难以察觉,以及哪些切分策略能真正解决这一问题。

insider
rag
阅读需 8 分钟

你的检索管道从未衡量的中间上下文盲区

当 Retrieval@10 指标依然处于绿色安全状态时,回答质量却在下滑。这种差距源于一种 U 型注意力偏差,它存在于检索团队和提示词团队之间的交界处,而双方的监控面板都无法察觉模型从未读取过的那段内容。

insider
rag
阅读需 12 分钟

RAG 语料库架构:决定检索质量的索引决策

大多数 RAG 失败发生在查询时被诊断出来,但根本原因在索引时就已埋下。本文深入讲解分块大小、重叠、层级结构和元数据决策如何悄无声息地决定检索质量。

insider
rag
阅读需 11 分钟

你的 Embedding 模型选择决定了 RAG 的上限,而 LLM 无法突破它

Embedding 模型决定了 RAG 质量的上限,而更换 LLM 无法提升该上限。本文提供了一个实用的选择框架:领域匹配、维度选择、多语言表现和指令微调。

insider
rag
阅读需 10 分钟

检索单一化:为什么你的 RAG 系统存在系统性盲点

当所有查询都流经单一嵌入空间时,结构不同的查询类型会系统性地落入同样的盲区。本文介绍如何审计检索多样性并修复它,同时不牺牲延迟预算。

insider
rag