开源 Embedding(词嵌入向量)模型排行榜:中文语义检索与知识库匹配最佳选择

模型与算力

帮做 RAG 和知识库检索的人挑开源中文 Embedding 模型:从评测口径、维度与多语言适配到上线前的自测流程。

知识库答不准,很多人第一反应是换生成模型,其实卡在检索那一步——Embedding 把中文句子转成向量时没抓住语义,后面再强的模型也救不回来。这篇不搭 RAG 流水线,只解决一件事:面对一堆开源中文 Embedding 模型,按什么顺序筛、哪些指标能信、哪些说法要打问号,以及上线前怎么用你自己的语料做一次小规模实测。

知识库答不准,很多人第一反应是换生成模型,其实卡在检索那一步。Embedding 把中文句子转成向量时没抓住语义,后面再强的模型也救不回来。这篇不搭 RAG 流水线,只解决一件事:面对一堆开源中文 Embedding 模型,按什么顺序筛、哪些指标能信、哪些说法要打问号。

下面按一条从判断到落地的顺序走:先弄懂排行榜为什么容易误导,再看中文场景专有的坑,接着算维度与部署成本、判断多语言和重排的取舍,最后给一份筛候选的清单和一套用自己语料跑的小自测。具体数字和版本一律以站内页面当天的记录为准,本文不写死。

排行榜为什么经常坑你:开源 Embedding 榜单的三种读法

公开榜单最容易被误读的地方,是它通常在一批公开语料上刷分,而你的语料是中文长句、行业术语加口语提问。榜首模型在你的场景里未必排第一,甚至可能直接不适用。读榜单之前先问一句:这张榜测的是我关心的那类任务吗。

句子相似度任务
判断两句话是不是一个意思,适合做去重、聚类、意图归类
检索召回任务
给一句查询,从一堆文档里找出相关的那几条,知识库问答主要看这个
分类聚类任务
把文本自动归堆,和检索的目标不完全一致,分数不能直接互相套用
  • 先看评测任务类型:句子相似度、检索召回、分类聚类是三回事,你的场景通常只对应其中一到两类,对不上的分数参考价值很低
  • 看分数来源:自评分和厂商自测要单独标注,优先找有第三方复现或交叉验证的结果,别只信一张图或一个仓库自述
  • 去 /benchmarks 和 /benchmarks/registry 对照多个来源,同一个模型在不同榜单的位次差异本身就是信息,差异大说明它只擅长特定任务
  • 如果榜单没写清语料构成和评测方式,就当它是广告,不要作为选型依据

中文场景专有的四个坑:分词、长句、专名与口语

中文没有空格,不同模型对分词的处理方式不一样,结果就是短查询词和长文档段落的表现会分裂。很多模型在短句上很准,一到几百字的长文档就开始糊。选型时必须把长短两类样本分开测,别用平均分掩盖问题。

坑点典型表现怎么测
分词依赖同一个词换个说法就召不回用同义词、别称各造几条查询,看召回是否稳定
长句与段落短查询准、整段文档糊把同一内容按句子和整段两种粒度分别入库对比
专有名词与中英混排型号、缩写、英文术语直接掉召回专门造一批含型号和英文的查询样本
口语提问书面问题能中,随口一问就偏从真实聊天记录里抄提问,不用自己改写

第四类最容易被忽略。用户不会按文档里的措辞提问,他们会说「上次说的那个方案咋样了」这种没有关键词的句子。如果你的测试集全是标准书面问法,上线后真实命中率会明显低于预期。

维度、模型体积与部署成本:多高维度才够用

维度不是越高越好。高维向量占存储、拖慢相似度计算,检索量一上来显存和延迟都会顶上去。常见的误区是照着榜单选最大档,结果线上查询并发稍微高一点就排队。

  1. 估语料规模先数清楚要入库的文档块数量级,以及每天大概多少查询。这两个数决定了存储和算力的下限,拍脑袋选模型之前先写下来
  2. 算部署开销到 /models/deploy 和 /compute/sizing 按你的实际规模算一遍,看显存、吞吐和延迟是否落在可接受区间
  3. 把换模型的代价算进去向量库里存的是已经算好的向量,换模型等于全量重算。语料越大,迁移成本越高,选型时把「以后换不换得动」也算成一笔成本
  4. 留一档余量按峰值而不是平均值配资源,检索高峰通常和用户活跃时间重合,别按日均摊平后的数字配

多语言与中英混排:什么时候必须换模型

只要语料里有成规模的外文,单语中文模型基本不够用。重点不是它认不认识那几个英文词,而是跨语言检索能不能对齐:拿中文问句去搜英文原文,能不能把正确的那条召回来。对齐不了,就说明跨语言能力不达标。

  • 语料里有整段外文文档,且用户会用中文提问,必须选跨语言对齐能力经过验证的模型
  • 中英混排的 FAQ、产品文档、代码注释是常见雷区,自测时要专门包含这类混合样本
  • 判断标准很简单:中文问句检索英文原文,看召回;反过来英文问句检索中文原文再测一遍
  • 如果只是偶尔出现几个英文术语,不一定要上多语言模型,先看中文模型的专名表现能不能接受

这里的取舍是:多语言模型在纯中文任务上通常不是最优,用它是为了覆盖外文语料,不是因为它在中文上更强。没有外文需求就别为多语言能力买单。

要不要加重排:Embedding 单打独斗的边界

粗排召回几十上百条、再精排取前几条,是常见组合。只靠向量相似度,靠前的几条经常夹着语义相近但答非所问的内容,因为向量只捕捉整体语义,不判断这个片段是否真的回答了问题。重排模型专门做这件事,代价是多一段延迟和一份算力开销。

场景特征可以先不加建议加重排
文档量几百条以内,问题集中上万条,问题五花八门
错例特征召回的错例语义差得远召回的错例语义很像、就是答不对
延迟预算卡得很紧能容忍多一段处理时间
维护成本不想多养一个模型有精力做两段式调优

这一节只讲选型层面的取舍。重排怎么接进检索链路、召回和精排怎么配比,属于 RAG 搭建篇的范围,本篇不展开。

许可证与可部署性:能不能商用、能不能自己跑

开源权重不等于随便用。商用范围、是否要求署名、能否二次分发、训练数据有没有附加限制,都要逐条读,别只看仓库首页的标语。很多团队踩的坑不是模型效果,而是上线后才发现授权口径不允许当前用法。

  • 先确认用途:内部检索、对客产品、再分发模型,这三种场景的授权要求通常不同
  • 到 /ai-dict/category/safety 和 /models 核对授权口径,但法务结论以许可证原文为准
  • 本地跑还是调接口,取决于数据能不能出内网;涉密语料只能私有化,那就得连带算显存和吞吐
  • 私有化部署还要看是否依赖特定推理框架,依赖越重,运维成本越高

五分钟筛出候选:一份可执行的选型清单

到这一步手上应该已经有一堆模型名了。别挨个试,用排除法,把范围压到三到五个。多了测不完,少了没有比较价值。

  1. 定边界写清四项:语料语言构成、是否必须出内网、日查询量、能接受的延迟上限。这四项是后面所有判断的依据
  2. 拉候选从 /embeddings 和 /stacks/vector-dbs 拉一份清单,控制在三到五个模型。注意向量库和 Embedding 模型是两件事,别混在一起比
  3. 排除法过一遍许可证不合、资源跑不动、不支持你的语言,任意一条不满足就直接划掉。不要因为它在榜上靠前就留着
  4. 记录排除原因把每个被划掉的模型和原因写下来。下次再有人提这个模型,你直接翻记录,不用重新调研一遍

上线前的自测:用你自己的 50 条语料做一次小评测

公开榜单只能帮你缩范围,最终决定必须用你自己的语料做。不用大动干戈,从真实历史提问里抽五十条,配好正确答案对应的文档片段,就是一个固定的测试集。关键是这五十条要覆盖前面提到的坑:短查询、长段落、专名、口语、中英混排各来几条。

  1. 抽样本从真实历史提问里抽,不要自己改写。改写过的提问会失真,测出来的结果偏乐观
  2. 配答案每条提问标注它应该召回哪段文档。标不出来说明这个问题本身没明确答案,换一条
  3. 跑基线当前模型或默认配置先跑一遍,记录召回命中情况,作为后面所有对比的基准
  4. 看错例别只看整体准确率,重点看「差一点就对了」的那几条错在哪。是向量没抓住语义,还是切分把答案切断了,这两类问题的解法完全不同
  5. 换变量重跑换模型、换切分方式前后各跑一遍,数字对比才有意义。一次只换一个变量,不然说不清是谁的功劳

切分和语料本身的问题,比如一段话被从中间切开、表格被切散,属于知识库语料自查那篇的范围,本篇只负责模型选型这一段。实际数字和候选清单随时间变化,以站内 /benchmarks、/embeddings 和 /models 当天的记录为准。

下一步把你现在的语料语言构成、部署约束和延迟上限记下来,对着站内模型清单过一遍排除法,先压到三到五个候选,再用自己的五十条语料跑基线。

常见问题

中文 Embedding 是不是直接选榜单第一名就行?

不建议。榜单多在英文或混合语料上评,中文长句、专名、口语提问上的排序经常不一样。稳妥做法是先按语言、许可证、能否私有化筛掉一批,再用自己抽的几十条真实提问做一次小实测,看召回而不是看排名。

维度和模型大小,是不是越大效果越好?

高维和大模型通常上限更高,但代价是存储、显存和检索延迟一起涨。中小知识库、查询量不大的场景,中等维度往往够用;先去 /models/deploy 按你的语料条数和并发估一遍,再决定要不要上大的。

只有中文资料,还需要考虑多语言模型吗?

看你的真实提问。如果用户会用英文关键词、或者语料里夹着英文术语和代码注释,单语模型的召回会明显掉。判断方法很直接:拿中文问句去搜英文片段,搜得到就不用,搜不到就得换跨语言能力强的。

换了更好的 Embedding 模型,知识库会自动变准吗?

不会自动。换模型意味着所有向量要重算,而且如果切分太碎、重复内容多、旧文档没清理,换模型也救不回来。建议先做一次语料自查,再换模型,两次改动分开做,才知道是哪一步起了作用。

要不要一开始就加重排?

看场景。文档量小、问题集中在固定几类时,光靠向量检索往往够用,加了重排只是多花延迟。文档量大、问法发散、前几条经常答非所问,再加重排更划算,加之前先确认是检索问题而不是切分问题。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。