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.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;更是…