这道题其实是在问:你面对一个具体的检索场景,怎么在语义能力、效率、成本和工程兼容性之间做取舍,没有一个模型能通吃所有场景。
先说语义能力,这得看你的任务。如果你做中文客服,比如用户问订单状态,你想召回退款政策,那国产模型像BGE、GTE就够用,它们在中文上区分度很好,同类文档能拉开距离。但如果你做多语言支持,比如全球电商平台,那得用OpenAI的text-[[embedding]]-3或者E5-mistral。代码检索又是另一种,得CodeBERT那种专门的模型。
这里有个边界:句子级和段落级检索要分开。你的文档如果是一段长说明,比如企业SOP,那模型得支持长上下文,像BGE-large能处理512到8192个token,而有些小模型只支持128,直接截断会丢信息。真正落地时,我常常混用,短查询用轻量模型,长文档用大模型,或者先做[[Chunk]]再分别embed。
再一个关键点是效率与成本。你线上QPS要求高,比如客服系统每秒几百个请求,那模型大小和推理速度就是命门。BGE-small才30MB,跑得飞快,但召回率可能差一点;GTE-large一个G,精度高但延迟大。我倾向小模型加加速,比如用ONNX或TensorRT,能压到几毫秒,比直接上大模型划算。如果预算够,也可以用云端API,但注意数据隐私,有些公司不允许文档出域。
领域适配也是个坑。通用场景直接拿开源模型就行,但垂直领域像医疗或法律,你得检查模型在术语上的编码质量。比如一个医疗诊断系统,'心肌梗死'和'心绞痛'的向量距离如果太近,召回就乱。前提是得有领域数据做验证,不行就微调。微调不贵,用[[LoRA]]在几百条数据上跑几小时,效果提升明显。
工程兼容性容易被忽略。输出维度是768还是1024?得和你的[[Vector Database]]匹配,不然存不进去。还有归一化,模型输出是不是单位向量?这决定了相似度计算用cosine还是点积。上线前我会特别关注,否则线上出现维度不匹配的报错就尴尬了。
所以整体上,我把选型看成 按场景做减法:先定语言和粒度,再砍成本和延迟,最后用领域数据验证。更倾向先用通用小模型快速验证,再逐步优化。
对了,说到微调,有个细节:不是所有模型都适合微调,有些闭源API只能调用不能调。而且微调数据怎么构造也很讲究,比如用对比学习还是用排序学习,效果差很多。
总之,没有银弹,每个决策背后都是 trade-off。