Embedding 模型怎么选?我把 bge-m3 和 OpenAI 的实测对比写在这
张张老师412 阅读
做 RAG 的时候,embedding 模型的选择直接决定检索质量。我把 bge-m3(BAAI/bge-m3)和 OpenAI 的 text-embedding-3-small 在中文场景下做了一轮实测,结论可能和你想的不一样。
先看数据。我用了一个内部的中文知识库,500 个问题,人工标注了标准答案文档,用 Recall@5 做指标:
- bge-m3:Recall@5 = 0.83
- text-embedding-3-small:Recall@5 = 0.76
- text-embedding-3-large:Recall@5 = 0.81
中文场景 bge-m3 反而超过了 OpenAI 的 large 版本,这是让我意外的。原因可能是 bge-m3 在中文语料上训练更充分,而 OpenAI 的模型英文权重更大。
bge-m3 的几个特点:
第一,它支持 8192 token 的输入,长文档可以直接整段编码,不用强拆。第二,它同时支持稠密检索和稀疏检索,可以配合 BM25 做混合检索。第三,完全本地化,数据不出内网,合规压力小。
用法很简单:
Python
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-m3")
vec = model.encode("今天天气怎么样")
但有个坑:bge-m3 默认输出的向量是 1024 维,如果你的向量库或后续计算对维度有要求,需要先降维。另外查询和文档应该用不同的 prompt 前缀("为这个句子生成表示以用于检索相关文章"),这个在官方文档里有说明,别漏了。
最后说句实话:如果预算充足、对英文内容多,OpenAI 的 large 也完全可以;但中文为主、又要私有化部署的,bge-m3 是目前性价比最高的选择。
评论0
还没有评论,来抢沙发~