选 Embedding 模型就像相亲:合适的才是最好的

月度成本复盘会,财务小刘把云服务账单投在屏幕上,所有人的目光都集中在一行醒目的数字上。

“OpenAI API 费用,这个月环比增长 340%,”小刘推了推眼镜,“大头是 Embedding 服务,光 text-embedding-3-large 就烧掉了预算的六成。”

老李放下保温杯,语气笃定:“我们用的是最好的模型,贵点怎么了?一分钱一分货,技术投入不能省。”

小王在角落里轻轻咳了一声:“老李,我上周跑了个 benchmark。咱们中文文档的检索准确率,用 text-embedding-3-large 是 87.2%,但用开源的中文嵌入模型 bge-large-zh,准确率是 88.1%。而且后者的推理成本,只有前者的十分之一。”

老李的眉毛瞬间拧成了麻花:“你说那个不要钱的模型,比 OpenAI 收费的还准?”

“不是不要钱,是自己部署要服务器。但算下来,处理同样数量的文档,bge-large-zh 每月成本大概 200 块,text-embedding-3-large 是 2000 块。”小王把一张对比表投到屏幕上,“而且准确率还高了将近一个点。”

老李沉默了几秒,保温杯在手里转了半圈:“这玩意儿靠谱吗?不就又一个号称‘国产之光’然后年底就跑路的开源项目?”


嵌入模型不是越大越好

“老李你想啊,嵌入模型跟大语言模型不一样。LLM 需要海量参数来生成流畅的回答,但嵌入模型的任务是‘把文字压缩成向量’,它的核心能力是表征学习,不是参数堆积。”

小王走到白板前,画了两个不同大小的圈:“text-embedding-3-large 的参数量没公开,但业内估计在十亿级别。bge-large-zh 是 3.26 亿参数。参数多三倍,但在中文场景下效果反而略低——为什么?”

“因为训练数据。”小王在大圈里写下“英文为主”,在小圈里写下“中文为主”。“OpenAI 的模型训练语料里,中文占比可能不到 10%。你参数再多,没见过足够多的中文句子,对中文语义的理解就是不如专门用中文训练的模型。就像你请了个哈佛教授来教小学数学,他学术水平再高,不如一个本地的小学老师懂孩子。”

老李若有所思:“所以这个 bge 是专门用中文语料训的?”

“对,BAAI 的中文嵌入模型系列,训练数据里中文占比极高,而且针对中文的句式、成语、多义词做了专门优化。它在中文场景的 MTEB 基准上拿过第一。”

老李追问:“MTEB 又是什么?你们年轻人能不能不要动不动就蹦缩写?”


MTEB:嵌入模型的“高考”

“MTEB 就是 Massive Text Embedding Benchmark,嵌入模型的大规模评测基准。”小王调出一个排行榜页面,“你可以理解成嵌入模型的高考。它不只看一门成绩,而是考八门——分类、聚类、配对、重排序、检索、语义相似度、摘要、双语匹配。最后给一个综合平均分。”

他在屏幕上画了个简单的示意:

图:MTEB 评测的八个维度,综合得分反映模型的通用表征能力

“你看这个排行榜,”小王指着屏幕,“总榜第一可能是某个超大模型,但在中文检索子任务上,排第一的往往是 bge-m3 或 bge-large-zh。选模型不能只看总榜,得看具体任务和语言。就像相亲,不能只看对方年收入,还得看性格合不合、兴趣爱好匹不匹配。”

老李哼了一声:“那你说说,都有哪些模型值得相?”


中文嵌入模型相亲大会

小王打开一张自己整理的对比表:

模型维度中文检索速度成本特点
text-embedding-3-small512/1536OpenAI 出品,API 方便
text-embedding-3-large3072中上维度最高,但中文非强项
bge-large-zh1024中文专属,开源
bge-m31024很高多语言,支持稀疏+稠密
m3e-large1024轻量中文,社区活跃
Cohere Embed v31024中上多语言,API 服务

“咱们的需求是中文技术文档的语义检索。bge-m3 效果最好但模型稍大,m3e-large 速度最快但效果略逊,bge-large-zh 是均衡之选。”小王指着表格,“而咱们现在用的 text-embedding-3-large,在中文检索上排名大概第五六位,价格却是第一。”

老李盯着表格,脸上写满了“我不信”:“你这 benchmark 怎么跑的?别是自己编的数据吧。”

小王二话不说,打开笔记本跑了一段代码:

python
# 对比不同嵌入模型的中文语义检索效果
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import time

# 准备中文检索评测数据
queries = ["数据库连接池怎么配置?", "年会日期是几号?", "K8s 部署流程"]
docs = ["PostgreSQL 连接池使用 pgBouncer...", "2025年会于11月8日举行...", 
        "Kubernetes 部署需配置 YAML..."]
ground_truth = [0, 1, 2]  # 每个 query 对应的正确 doc 索引

models_to_test = {
    "bge-large-zh": "BAAI/bge-large-zh-v1.5",
    "m3e-large": "moka-ai/m3e-large",
    "bge-m3": "BAAI/bge-m3",
}

for name, path in models_to_test.items():
    model = SentenceTransformer(path)
    start = time.time()
    q_embs = model.encode(queries)
    d_embs = model.encode(docs)
    sims = cosine_similarity(q_embs, d_embs)
    hits = sum(1 for i, s in enumerate(sims) if s.argmax() == ground_truth[i])
    elapsed = time.time() - start
    print(f"{name}: 命中 {hits}/{len(queries)}, 耗时 {elapsed:.2f}s")
# 输出示例:
# bge-large-zh: 命中 3/3, 耗时 0.45s
# m3e-large: 命中 3/3, 耗时 0.28s
# bge-m3: 命中 3/3, 耗时 0.62s

老李看完输出,沉默了片刻:“这测试用例才三条,说服力不足。”

“所以我跑的是完整 benchmark,用了 500 条真实用户查询和 2000 篇公司文档。结果刚才的表格里列了。”小王毫不退缩,“而且不光是准确率,我还算了成本。”


成本账:大模型的 ROI 陷阱

小王切换到大屏幕上的一张柱状图。横轴是模型名称,纵轴是每月推理成本,柱子上方标注了中文检索准确率。

“text-embedding-3-large,每月处理 200 万次 embedding 调用,API 费用约 1800 元。bge-large-zh 部署在一台 4 核 GPU 服务器上,电费加运维折旧,每月约 220 元。准确率前者 87.2%,后者 88.1%。”

老李皱着眉头:“API 调用那 1800 里包含了 OpenAI 的运维成本,你自己部署那 220 没算小王你的加班费吧?”

小王嘿嘿一笑:“模型部署好之后基本不用管,我加班是因为你在产品 demo 前临时改需求——这个不能算在模型成本里。”

老李被噎了一下,转移话题:“那私有化部署还有什么好处?除了省钱。”

“数据不出公司。咱们的合同、技术方案、薪资讨论,全在内部服务器上向量化。用 OpenAI 的 API,这些数据要发到境外服务器,合规风险你自己掂量。”

老李的表情严肃起来,这个问题显然戳中了他。


动态嵌入:下一个拐点

“还有一个新趋势,”小王趁热打铁,“刚才说的那些模型,都是静态嵌入——一个词不管出现在什么上下文里,向量都是固定的。但动态嵌入不一样,它根据上下文实时调整向量。比如‘苹果’在‘苹果手机’和‘吃苹果’里,向量是不同的。”

“这有啥用?”老李问。

“解决一词多义。比如咱们公司文档里的‘RAG’,有时指检索增强生成,有时是财务科目代码。静态嵌入搞不清,动态嵌入能区分。目前 bge-m3 已经支持了这种稀疏加稠密的混合表示,效果比纯稠密更好。”

老李拧开保温杯喝了一口,枸杞已经沉底了。

“那照你这么说,咱们该换模型?”

“我的建议是分两步走。第一步,本周内把 text-embedding-3-large 换成 bge-m3,部署在公司服务器上,每月省钱,准确率还能提升。第二步,下个月我调研一下动态嵌入在长文档场景的效果,如果好,再升级。”

老李沉默了一会儿,用手指在桌上敲了三下。

“行。你写个方案。但是——”他站起来,指着小王,“这次可别再让我在成本复盘会上被财务点名了。下不为例啊。”

小王比了个 OK 的手势。

老李走到门口,又转过身来,保温杯晃了一下:“那什么,你刚才说的动态嵌入,它到底怎么做到一个词两个向量的?是存两份吗?还是输入的时候实时算的?明天你给我讲讲这个。”

小王咧嘴笑了:“老李,你这是对嵌入模型上瘾了啊。行,明天茶水间见。”

老李摆摆手走了,保温杯里的枸杞晃荡着,像是无数个浮动的向量,在寻找自己最合适的那个维度。

图:嵌入模型选型决策树——根据数据合规、预算、语言、规模综合判断

你的 RAG 到底好不好?评测指标全解析
混合搜索:当关键字和向量手拉手成为好朋友