Embedding 模型迁移复盘:从 ada-002 到 bge-m3,我们踩了哪些坑
一个内部知识库检索系统原来用 text-embedding-ada-002,成本可控但中文长文档召回一般。评估后决定迁到 bge-m3,支持多语言、长文本和稀疏稠密混合。迁移不是换个模型名那么简单,前后花了两周。
坑一:维度变了,索引必须重建。
ada-002 是 1536 维,bge-m3 稠密向量是 1024 维。原以为可以原地替换,实际必须全量重算并重建索引。好在我们提前把 embedding 版本写进了 metadata,切换时可以双索引并行,灰度切流量。
坑二:归一化方式不一致。
不同模型对向量归一化的预期不同。有的检索库默认做 cosine,有的用内积。迁移后第一版召回明显变差,排查发现是归一化没对齐。统一在写入前做 L2 归一化,查询侧保持一致,效果才恢复。
坑三:长文档切分策略要跟着模型改。
ada-002 对长输入不友好,原来切得很碎;bge-m3 支持更长上下文,切得太碎反而丢失上下文。我们重新按语义段落切分,块大小从 300 token 调到 500—800 token,重叠 15%,召回质量有可感知提升。
坑四:评测集必须复用。
迁移前我们有一份 120 条真实问题的检索评估集,标注了必须召回的证据片段。新旧模型在同一份评估集上对比 Recall@5 和 MRR,而不是靠感觉。最终 bge-m3 在中文长文档上 Recall@5 提升约 9 个百分点,英文短查询基本持平。
坑五:成本不只看单价。
bge-m3 可以自托管,单价低,但 GPU 推理和运维也是成本。我们最终采用自托管加批量离线计算,在线查询走缓存,整体成本比原方案低,但前提是团队有人能维护推理服务。
- 点赞
- 收藏
- 关注作者
评论(0)