当前位置: 首页 > news >正文

BGE向量算法

一、是什么

什么是BGE向量算法?先说说网上的概念吧。本文不讲解太深的算法知识,主要讲解如何用!

BGE(BAAI General Embedding)是北京智源研究院开源的“通用语义向量模型”。一句话:把中文或英文句子变成一个 512 维或 1024 维的数字向量(embedding),让语义相近的句子在向量空间里也挨得近。目前也可以当做最强语义向量模型。

在做问答系统的工作中,我们需要我们的内容素材存成向量也就是经常说的embedding过程。但是在工作中为啥选择了这个向量算法呢?很简单,因为免费且开源,大家牢记,工作中用的东西都大差不差,效果好坏可以后期调整但是一定要开源和免费,否则你的项目立项都困难,因为还需要考虑成本问题。目前很多做RAG的团队都用这个。我们用了,效果确实还不错,没啥毛病目前。

它能把任何一句话,无论中文还是英文,统统翻译成一串只有机器才看得懂的「数字密码」(专业叫“向量”)。语义越接近的两句话,得到的密码就越像,机器就能凭这个找到最相关的句子。

下面用 3 个画面帮你秒懂:

  1. 先“借眼睛”
    把 BGE 看成戴了副神奇眼镜的翻译官。
    • 它先读遍海量网页、书籍、对话,像人类一样学会了“苹果≈水果”、“函数≈代码片段”这些语义关系。
    • 但和人类不同,它把学到的所有知识压缩成固定 512 或 1024 个数字——这就是它的“母语”。

  2. 再“画地图”

    • 每句话经过这副眼镜,都会在世界地图上留下一个“点”。
    • 含义相近的句子点挨得近,风马牛不相及的句子点离得远。
    例子:
    “如何给猫洗澡?”和“猫咪清洁步骤”几乎重叠;
    “Python 循环写法”则跟它们隔了十万八千里。

  3. 最后“指方向”

       •  当你提问时,翻译官先把你这句话也变成地图上的一个点。
       •  然后拿尺子量一量,离谁最近就把谁拽出来——这就是“检索”。
       • 把拽出来的原文连同你的问题一起丢给大模型,大模型就能答得更准确。

一句话总结
BGE 的魔法只有两步:

  1. 把文字变成数字点;

  2. 在“语义地图”里量距离找邻居。
    RAG 的检索、推荐、问答,全靠这两步跑得快又准。

RAG的效果好不好,最核心依赖两点:文本embedding语义提取的好不好,rerank的排序效果好不好

大概说说使用和调研后感觉吧。优缺点就涉及到一些官话了。

一、优点(为什么要用)

  1. 中文效果顶尖
    在官方 C-MTEB 榜单上,BGE-large-zh 的检索精度 ≈ 同类开源模型的 1.4 倍。

  2. 免费 + 开源 + 商用友好
    Hugging Face 一键下载,Apache-2.0 许可证,改都不用改就能上线。

  3. 尺寸可选
    small / base / large 三档,显存从 1 GB 到 6 GB 都能跑;轻量场景用 small,精度要求高就上 large。

  4. 训练配方好
    RetroMAE 预训练 + 难负样本微调,让它在“领域外”数据上也不易掉链子。

  5. 工具链成熟
    官方脚本、ONNX 导出、Faiss/Milvus/Vespa 都直接支持,基本“开箱即用”。

二、缺点(要知道的坑)

  1. 长文本吃亏
    最大 512 token(large 版 1024),超长文档必须切块,否则信息截断。

  2. 英文或代码场景不是最强但也算第一梯队
    英文 MTEB 上略逊于 E5-v2、SFR 等新模型;代码检索现在有 BGE-Code-v1 专用版,普通 BGE 并不擅长。因为我们的内容主要是中文的,所以选择一个中文友好的就行了。

  3. 向量维度偏高
    large 版 1024 维,百万级文档内存 ≈ 4 GB,对轻量级部署不算友好。

  4. 需要 GPU 才能“跑爽”
    CPU 也能推理,但每秒几十条,离线建大索引会等到怀疑人生。

  5. 解释性一般
    属于 dense embedding,不像 BM25 能直接看出“哪个词”命中,调错时只能凭实验。

二、什么时候用 / 什么时候不用


用:
• 中文知识库、企业 FAQ、客服对话记录等典型 RAG 场景;
• 团队缺算法人力,想“下下来就能用”;
• 需要商用闭源,怕许可证踩坑。

不用或换:
• 超长文档(>2k token)为主,可考虑 M3-E5、Nomic 等支持更长上下文的模型;
• 纯英文或代码检索,直接上 E5-v2、SFR-Embedding、BGE-Code-v1 更合适;
• 极端资源受限,连个GPU都没有,可试更小量化模型(e.g. MiniLM-Chinese)。

一句话总结
做中文 RAG,先把 BGE 当成“默认选项”基本不会错;真遇到场景特殊,再按上面的缺点换更合适的模型。

可以参考:bge-large-zh · 模型库

三、算法原理

这个东西本人认为应用工程师没必要深入了解,当然了解没坏处。看个人的时间和精力吧。关键是一堆数据公式,你编程的时候有现成工具包都不需要自己实现。

BGE 的“算法”其实分两层——
1、怎样把一句话变成 1024 个数字(向量生成算法);
2、怎样在训练时让“语义相近的句子向量更靠近”(对比学习算法)。

下面用“做菜”类比,我尽力把核心公式也翻译成大白话。

  1. 向量怎么来的?——Transformer 抽特征,在机器翻译中,Transformer可以将一种语言翻译成另一种语言,通过不断的encode和decode。
    • 原料:句子先被切成“词”或“子词”(token)。
    • 炒锅:多层 Transformer(12 层或 24 层),每层都在问“这个词和前后词啥关系?”
    • 出锅:把最后一层所有词的向量取平均(叫 mean pooling),得到 1024 个数字——这就是 BGE 输出的“语义指纹”。
    (公式层面就是标准的 Transformer + pooling)

  2.  怎样让指纹“靠得近”?——RetroMAE + 对比学习
    BGE 训练分两阶段:

    阶段 A:RetroMAE 预训练——先学会“填空”

  • 随机把句子遮住 60% 的词(mask)。

  • 用一个小网络把残缺的句子压成一个向量 z。

  • 再用 z 去还原原句。

    目的:逼模型把整句含义挤进 z,练成“压缩高手”。

阶段 B:对比微调——让“问题”挨“答案”
• 数据格式:(查询 q,正例 p⁺,负例 p₁⁻, p₂⁻ …)
例如:
q = “怎么给猫洗澡?”
p⁺ = “猫咪洗澡步骤”
p⁻ = “Python 循环写法”


• 目标函数:InfoNCE(温度缩放版)
L = – log [ e^(sim(q,p⁺)/τ) / Σ e^(sim(q,·)/τ) ]


白话:让 sim(q,p⁺) 越大越好,sim(q,负例) 越小越好。
• 技巧:
– 先用 BM25 挖一批“硬负例”,再让模型“啃硬骨头”;
– 训练时 32K 批次,大批量才能拉开距离。

3. 推理时怎么算相似度?
把 q 和 p 都过一遍 BGE → 得到两个 1024 维向量 → 直接点积或余弦距离即可。
用 Faiss / Milvus 把几百万向量做成索引,毫秒级就能找最邻居。

下一章介绍FAISS向量数据库

http://www.dtcms.com/a/329432.html

相关文章:

  • C++冒泡、选择、快速、桶排序超超超详细解析
  • 20. 有效的括号 - 力扣(LeetCode)
  • P1886 滑动窗口 /【模板】单调队列【题解】
  • 《Foundations and Recent Trends in Multimodal Mobile Agents: A Survey》论文精读笔记
  • [量化交易](1获取加密货币的交易数据)
  • 面试实战 问题三十 HTTP协议中TCP三次握手与四次挥手详解
  • 解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复
  • 循序渐进学 Spring (上):从 IoC/DI 核心原理到 XML 配置实战
  • DataOceanAI Dolphin(ffmpeg音频转化教程) 多语言(中国方言)语音识别系统部署与应用指南
  • Vue 3 源码解读与核心 API 分析
  • EN 62368消费电子、信息技术设备和办公设备安全要求标准
  • mybtias集成spring原理?--spring,mybatis源码解析
  • 后端Web实战-MySQL数据库
  • Si an(1)
  • Linux高级编程-framebuffer
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • 数据分析全景:从数据到决策的完整链路与核心要义
  • 《Python学习之基础语法2:掌握程序流程控制的艺术》
  • 【分布式 ID】一文详解美团 Leaf
  • TCP Socket 编程实战:实现简易英译汉服务
  • 函数扇入数(Fan-in)
  • NAT技术、代理服务器+网络通信各层协议
  • transforms的使用 小土堆pytorch记录
  • 深度学习流体力学:基于PyTorch的物理信息神经网络(PINN)完整实现
  • PyTorch Tensor完全指南:深度学习数据操作的核心艺术
  • C++编程学习(第21天)
  • LeetCode 分类刷题:1004. 最大连续1的个数 III
  • 【Linux】常用命令(三)
  • 智慧养老丨实用科普+避坑指南:科技如何让晚年生活更安全舒适?
  • 编译 C++ 程序时提示:fatal error: ‘json/json.h‘ file not found