一、是什么

什么是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.pswp.cn/bicheng/93316.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93316.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93316.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI数据仓库的核心优势解析

内容概要本文旨在全面解析AI数据仓库的核心优势,为读者提供清晰的框架。文章首先从基础定义出发,探讨其如何高效整合多源数据,并支持人工智能与机器学习应用。随后,将详细阐述处理TB级数据的能力,包括兼容结构化和非结…

具身智能Scaling Law缺失:机器人界的“摩尔定律“何时诞生?

8月9日,在世界机器人大会的演讲台上,宇树科技创始人王兴兴谈论到目前机器人运动控制领域存在的RL Scaling Law问题,他认为现在的机器人在学习一项新的技能时,往往都是需要从头开始研究以及教学。而在未来更加希望的是能够在原有的…

【跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命】

跨越 6G 安全、防御与智能协作:从APT检测到多模态通信再到AI代理语言革命引言单篇总结**2. Integrated Multimodal Sensing and Communication: Challenges, Technologies, and Architectures****3. Why do AI agents communicate in human language?**引言 在迈向…

微前端-解决MicroApp微前端内存泄露问题

前言 之前使用京东微前端框架MicroApp集成10个微前端的页面到AngularJs的后台管理系统中,每个微前端做成一个菜单,一共10个,每次打开都是一个新的微前端,但是发现打开的微前端越多,容易造成内存泄露,下面讲…

线性代数 · 向量运算 | 叉乘 / 几何意义 / 推导

注:本文为 “线性代数 向量运算” 相关合辑。 图片清晰度受引文原图所限。 略作重排,未整理去重。 如有内容异常,请看原文。 数学基础 —— 向量运算(叉乘) keng_s 于 2016-08-05 17:17:57 发布 1_ 向量的叉乘 向量…

方法中只包含查询操作需要添加事务吗?

方法中只包含查询操作需要添加事务吗?绝大部分情况都不需要 是否需要为包含数据库查询操作的方法添加 @Transactional 注解,取决于业务需求和查询操作的特性,不能一概而论。以下是具体分析: 一、不需要添加 @Transactional 的常见场景 如果查询操作满足以下条件,通常不需…

MTK平台Wi-Fi学习--wifi channel 通过国家码进行功率限制和wifi eFEM 基本配置和wifi Tx SEM问题

一. 国家码可以用来限制功率上限,可以针对各国家实现By channel降功率的能力 可以通过country code来设置不同channel的power limit,操作方法如下: 在rlm_txpwr_init.h文件中g_rRlmPowerLimitConfiguration[]下添加需要限制功率的channel, 例如:国家码CN,信道:CH1,po…

MedGemma: 多模态医学文本与图像处理的创新模型

MedGemma: 多模态医学文本与图像处理的创新模型 今天,我有幸参加了在上海举行的Google 2025 I/O大会,这是一场充满创新与突破的技术盛宴。作为全球最具影响力的科技大会之一,Google I/O每年都会吸引来自世界各地的开发者、企业领袖以及科技爱…

深入剖析 C++ STL 中的 std::list 容器

基本介绍在 C 标准库(STL)中,std::list 是一个基于双向链表实现的序列容器。它与 std::vector、std::deque 等连续存储容器不同,提供了在序列中高效插入和删除元素的能力,尤其是在序列中间位置操作时优势明显。1. std:…

大规模调用淘宝商品详情 API 的分布式请求调度实践

在电商数据分析、比价系统、选品工具等业务场景中,往往需要大规模调用淘宝商品详情 API 以获取商品标题、价格、销量、评价等核心数据。然而,面对淘宝开放平台的严格限流策略、海量商品 ID 的处理需求以及系统高可用要求,传统的单节点调用方式…

在 Windows 系统中解决 Git 推送时出现的 Permission denied (publickey) 错误,请按照以下详细步骤操作:

完整解决方案步骤&#xff1a; 1. 检查并生成 SSH 密钥 # 打开 Git Bash ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 全程按回车&#xff08;使用默认路径&#xff0c;不设密码&#xff09; 密钥将生成在&#xff1a;C:\Users\<用户名>\.ssh\ 目…

【入门级-算法-2、入门算法:枚举法】

枚举法&#xff08;Brute Force&#xff09;&#xff1a;是一种直接遍历所有可能情况的算法思想&#xff0c;适合解决数据范围较小的问题。它的核心是穷举所有可能性&#xff0c;并检查哪些情况符合要求。 枚举法的基本思想&#xff1a;计算机主要功能&#xff0c;或者说它的优…

Python/Node.js 调用taobao API:构建实时商品详情数据采集服务

在电商数据分析、价格监控、竞品分析等场景中&#xff0c;实时获取商品详情数据至关重要。淘宝提供了丰富的 API 接口&#xff0c;允许开发者合法合规地获取商品信息。本文将介绍如何使用 Python 和 Node.js 两种主流语言调用淘宝 API&#xff0c;构建一个实时商品详情数据采集…

【OpenCV】Mat详解

在OpenCV中&#xff0c;cv::Mat是用于存储图像、矩阵等多维数据的核心数据结构&#xff0c;替代了早期的IplImage&#xff08;需手动管理内存&#xff09;&#xff0c;其设计的核心目标是自动内存管理和高效数据操作。下面详细介绍其组成原理及使用方法。 一、cv::Mat的组成原理…

疏老师-python训练营-Day45Tensorboard使用介绍

浙大疏锦行知识点回顾&#xff1a; tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 效果展示如下&#xff0c;很适合拿去组会汇报撑页数&#xff1a; 作业&#xff1a;对resnet18在cifar10上采用微调策略下&#xff0c;…

算法详细讲解:基础算法 - 离散化/区间合并

离散化 讲解 这里的离散化特指整数有序离散化。整个值域跨度很大&#xff0c;但是值非常稀疏的情况。 问题背景 我们有一个无限长的数轴&#xff0c;初始时每个位置上的值都是0。我们需要进行两种操作&#xff1a; 修改操作&#xff1a;在某个位置 x 上增加一个值 c。查询…

SpringBoot 实现在线查看内存对象拓扑图 —— 给 JVM 装上“透视眼”

0. 你将获得什么 一个可嵌入任何 Spring Boot 应用的内存对象拓扑服务&#xff1a;访问 /memviz.html 就能在浏览器看见对象图。 支持按类/包名过滤、按对象大小高亮、点击节点看详情。 线上可用&#xff1a;默认只在你点击“生成快照”时才工作&#xff1b;日常零开销。 1.…

STM32 HAL驱动MPU6050传感器

STM32 HAL驱动MPU6050传感器 项目概述 本项目实现了基于STM32 HAL库的MPU6050传感器驱动&#xff0c;可以读取加速度计和陀螺仪数据。项目使用I2C接口与MPU6050通信&#xff0c;并通过UART接口输出数据。 项目仓库地址&#xff1a;STM32_Sensor_Drives 硬件连接 MPU6050 I2…

flex-wrap子元素是否换行

flex-wrap设置子元素是否换行&#xff0c;默认情况下&#xff0c;项目都排在一条线&#xff08;又称”轴线”&#xff09;上。flex-wrap属性定义&#xff0c;flex布局中默认是不换行的。1、div的宽度是600px&#xff0c;每个span的宽度是150px&#xff0c;总共有5个&#xff0c…

RabbitMQ面试精讲 Day 21:Spring AMQP核心组件详解

【RabbitMQ面试精讲 Day 21】Spring AMQP核心组件详解 开篇 欢迎来到"RabbitMQ面试精讲"系列第21天&#xff01;今天我们将深入探讨Spring AMQP的核心组件&#xff0c;这是Java开发者集成RabbitMQ最常用的框架。掌握Spring AMQP不仅能提升开发效率&#xff0c;更是…