BGE 文本嵌入实战:5 分钟给私有文档接上语义检索
【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding
你手里有一堆产品手册、内部 wiki、聊天记录,想找“哪个片段跟这个问题最相关”。关键词搜索总漏召回,自己搭向量库又太折腾——BGE 文本嵌入就是干这个的。
三行代码跑通 BGE 文本嵌入
# 克隆仓库并安装 git clone https://gitcode.com/GitHub_Trending/fl/FlagEmbedding cd FlagEmbedding && pip install -e .from FlagEmbedding import FlagAutoModel # 加载中文嵌入模型,检索任务建议带上官方指令 model = FlagAutoModel.from_finetuned( "BAAI/bge-base-zh-v1.5", query_instruction_for_retrieval="为这个句子生成表示以用于检索相关文章:" ) emb = model.encode(["报销流程是什么?", "报销需先填单再走审批"]) print((emb[0] * emb[1]).sum()) # 内积即相似度跑完你应该看到一个 0 到 1 之间的数。这两句语义相关,分数通常在 0.5 以上,不相关的低于 0.3。第一圈“文本进、向量出、相关分出来”就闭合了。有两个容易忽略的点:一是 query 指令,v1.5 中文模型编码查询时建议带上官方前缀,少了它召回质量会掉;二是设备参数,没有显卡就传 cpu,先用 small 或 base 规格跑通再说。
它到底强在哪:拿两个真实场景检验
德语合同混在中文 wiki 里也能召回
多语言材料塞进中英模型,你得先翻译再建索引,跨语言查询也基本打不中,每种语言单独维护一套索引更累。BGE-M3 在 100 多种语言上训练,一个模型同时给密集、稀疏(BM25 式的关键词匹配)和多向量交互三种检索结果。德语合同、中文产品 wiki、英文论文被编进同一个向量空间,跨语言查询直接能命中。MIRACL 多语言检索榜单上,M3 排第一。
3 万字技术文档整篇切完再检索
传统嵌入模型在 512 token 处截断,长文档被拦腰砍断,关键条款直接丢了。M3 支持最长 8192 token 输入,是常规模型的 16 倍容量,一篇论文或一份长合同能整段编进去,截断损失小很多。如果你的语料里长文档占比高,这个参数比换模型更实在。
选哪个版本,怎么接进你的工程
只做中文检索的话,说实话 base-zh 起步就够,不用纠结 M3。
| 版本 | 擅长场景 | 显存/速度门槛 |
|---|---|---|
| bge-base-zh-v1.5 | 中文文档检索,通用 | CPU 能跑,上手最快 |
| bge-large-zh-v1.5 | 要更高精度,同为单语场景 | 低档 GPU 即可 |
| bge-m3 | 多语言 + 8k 长文档 + 混合检索 | 8G 显卡比较舒服 |
| bge-reranker-v2-m3 | 对第一轮召回再精排一次(Reranker) | 与 M3 相当 |
Reranker 的选择上,v2-m3 是多语言、推理快,部署友好,是我个人更推荐的默认项;只要中英、追求极致精度,再考虑 base/large 老版。M3 那行值得多看一眼:它同时输出密集和稀疏两种表示,你不用单独再维护一套 BM25。
工程已用 LangChain 的话,把 embedding 换成 BGE 就行,下游 RAG 流程不用重写:
# LangChain 接入,检索管道不用重写 from langchain.embeddings import HuggingFaceEmbeddings embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-base-zh-v1.5")这一步卡住的话,先确认模型权重能不能下载,九成错误是网络问题,也可以把本地模型路径直接填进去。
从 Demo 到生产还差什么
跑通 demo 只是开始,要上线还差三件事:
- 叠一层 Reranker(拿第一轮召回的结果再精排一次):向量 top-20 只是候选集,用 bge-reranker-v2-m3 精排后命中率明显上一个台阶,reranker 打分脚本可以直接参考。
- 自己挖难负样本:检索质量很大程度上由训练数据决定,hn_mine.py从候选池里自动挑“像但不对”的负例,挖完喂给微调流程,脚本在 examples/finetune/embedder/。
- 打开混合检索:稠密向量管语义,稀疏 BM25 管专有名词和错误码,M3 两种表示一起出,加权合并后专名场景的漏召回能明显补上。
下一步做什么
- 拿自己一份 PDF 跑一遍 chunk + embed
- top-5 换 top-20 叠 reranker 对比命中率
- 在 examples/ 找最接近业务的 demo 改参数
先跑通检索,精度慢慢调。
【免费下载链接】FlagEmbeddingRetrieval and Retrieval-augmented LLMs项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考