详解 BGE-M3 与 Splade 模型

news2024/11/23 17:16:34

详解 BGE-M3 与 Splade 模型

本文将探索两种先进的 Embedding 模型——BGE-M3 和 Splade,深入解析它们的设计理念和工作原理。

01.

快速回顾Embedding向量的概念

Embedding 向量或者向量表示,是指在高维向量空间中以数值描述表示对象、概念或实体(Entity)。每个 Entity 由一个向量表示,此向量通常长度固定,每个维度反映了Entity 的一个特定属性或特征。Embedding 向量类型主要分为三种:传统的稀疏向量、稠密向量以及“学习到的”(learned)稀疏向量。

传统的稀疏向量,常用于语言处理领域,其特点是高维且多数维度值为零。这些维度通常代表一个或多个语言中的不同标记,非零值则显示了该标记在特定文档中的相对重要性。例如,BM25 算法生成的稀疏向量通过增加一个术语频率饱和函数和长度规范化因子,对 TF-IDF 方法进行了改进,因此非常适合执行关键词匹配任务。

相反,稠密向量的维度较低,但信息量大,所有维度均为非零值。这种向量通常由 BERT 等模型生成,常用于基于语义相似性而非仅仅是关键词匹配来排序结果的语义搜索任务。

“学习到的”稀疏向量则是一种高级的 Embedding 向量类型,它结合了传统稀疏向量的精确性与稠密向量的丰富语义。这种混合型的向量通过融入上下文信息来增强稀疏向量检索。如 Splade 和 BGE-M3 等机器学习(ML)模型能够生成这种类型的向量。这些模型能学习到可能出现但并非直接出现在文本中的相关标记,从而形成一个有效捕捉所有相关关键词和分类的(“学习到的”)稀疏向量表示。

如需了解如何使用 Milvus 等向量数据库来进行向量搜索或混合搜索,请阅读指南。

02.

BERT:BGE-M3和Splade的模型基石

BGE-M3 和 Splade 均基于 BERT 架构发展。在我们深入了解这两个模型前,需要先理解 BERT 的基本工作原理,以及它是如何作为基石推动 Embedding 技术的发展。

BERT,全称为 Bidirectional Encoder Representations from Transformers,是自然语言处理(NLP)领域领域内的一大突破。不同于传统模型那样单向处理文本,BERT 通过同时考察整个词序列来捕捉词汇的上下文,且不局限于任何一个方向。BERT 的核心在于其预训练机制,结合了两种创新策略:

  • Masked Language Modeling(MLM):在这一任务中,模型随机隐藏输入的部分词汇,然后训练模型去预测这些被掩盖的词汇。与之前只能理解单向上下文的模型不同,BERT 考虑到了句子整体的上下文,包括掩盖词的左右两边,以填补空缺。
  • Next Sentence Prediction(NSP):BERT 在这一任务中学习判断两个句子是否逻辑上连贯,这对于理解段落结构中句子间的关系非常重要。

BERT 架构的关键特性是其自注意力(Self-attention)机制。变换器中的每一层编码器通过 Self-attention 机制来评估句中其他单词在解释某个特定词时的重要性,使得模型能够在不同的上下文中理解词义。

位置编码是另一核心元素,它让 BERT 能够理解词语的顺序,给原本没有位置感的 Self-attention 过程添加了“序列”概念。

BERT 工作原理

那么 BERT 是如何运作的呢?让我们使用 BERT 将以下这句话转换为 Embedding 向量。

用户查询:Milvus is a vector database built for scalable similarity search.

图片图片

当我们将查询输入到 BERT 时,过程如下:

  • 分词 (Tokenization):文本首先被分割成一连串的片段。对于句子级任务,在输入的开始处加入[CLS] Token,并插入[SEP] Token 以分隔句子并标示结束。
  • Embedding:每个token通过一个 Embedding Matrix 转化为向量,这与 Word2Vec 等模型类似。然后在这些 Token Embeddings 中加入位置 Embeddings,以保存词序信息;同时,Segment Embeddings也被加入,用以区别不同的句子。
  • 编码器(Encoder):向量经过多层 Encoder,每层都包含 Self-attention 机制和前馈神经网络(Feed-forward neural network)。这些层根据序列中所有其他 Token 提供的上下文进行迭代,精细化每个 Token 的向量化表示。
  • 输出:最终层输出一系列 Embeddings。通常情况下,对于句子级任务,[CLS] Token的 Embeddings 代表了整个输入的向量表示。个别 Token 的 Embeddings 用于更细粒度的任务任务,或通过操作(如最大池化或求和池化)合成一个稠密向量。

BERT 生成的稠密向量可以捕捉单词间的含义及其在句子中相互之间的关系。这种方法适用于各种语言理解任务,为 NLP 性能测试设定了新标准。

现在我们已经理解了 BERT 如何生成稠密向量,接下来让我们深入探索 BGE-M3 和 Splade 是如何生成 Learned 稀疏向量的。

03.

BGE-M3

BGE-M3 是一种先进的机器学习模型,它扩展了 BERT 的能力,注重通过多功能性(Multi-Functionality)、多语言性(Multi-Linguisticity)和多粒度性(Multi-Granularity)增强文本表示。该模型不仅仅用于生成稠密向量,还可以用于生成 Learned 稀疏向量,尤其适用于需要精准处理细微信息含义的信息检索任务。

BGE-M3 工作原理

BGE-M3 是如何生成 Learned 稀疏向量的呢?让我们使用同样的用户查询来展示 BGE-M3 的工作原理。

图片

同 BERT 一样,BGE-M3 生成 Learned 稀疏向量的第一步是分词并将输入文本编码为一系列包含上下文的 Embeddings ( H )。

图片

然而,BGE-M3 通过使用更精细的方法来创新这一过程,以捕捉每个 Token 的重要性:

  1. Token 重要性评估:BGE-M3 不只是依赖 [CLS] token 的表征(H[0]),还评估了序列中每个 Token 的情境化嵌入(H[i])。
  2. 线性变换:在编码器栈的输出上添加了一个额外的线性层。通过此层计算每个 Token 的重要性权重,BGE-M3 得到了一组权重(W_{lex})。
  3. 激活函数:通过应用修正线性单元(ReLU)激活函数到(W_{lex})与(H[i])的乘积上,计算每个 Token 的词项权重(w_{t})。使用 ReLU 确保词项权重非负,有助于增强向量的稀疏性。
  4. Learned 稀疏 embedding:最终输出是一个稀疏的 embedding,其中每个 Token 都与一个表明其在整个文本中的重要性权重值相关联。

这种表达形式丰富了模型对语言细节的理解,并为那些需要同时关注语义和词汇要素的任务(如大规模数据库中的搜索和检索)定制了 Embeddings。BGE-M3 标志着我们在更精确、更高效地筛选和解读大量文本数据方面迈出了重要一步。

04.

SOLADE

SPLADE 标志着在生成 Learned 稀疏向量方面的进步,它基于 BERT 架构增加了一种独特的方法来优化 Embedding 的稀疏性。让我们先回顾一下 BERT 训练机制的核心部分——MLM。

MLM 是一种强大的无监督学习任务,隐去了部分输入的 Tokens,要求模型仅依据其上下文推断这些隐藏的词汇。这种技术增强了模型对语言的理解能力及对语言结构的认知,因为它需要依赖周围的 Tokens 来正确填补这些空缺。

图片

在实际应用中,对于预训练阶段的每个掩码位,模型使用 BERT 的上下文化 Embedding ( H[i] )生成一个概率分布( w_i ),其中 w_{ij} 指的是特定 BERT 词库 Token 出现在掩码位的可能性。这个输出向量( w_i ),其长度与 BERT 庞大的词汇量(通常为 30,522 个单词)相匹配,为精细化模型的预测提供了关键的学习信号。

图片

注意:上方图表中的可能性数据并非真实数据仅作示意。

SPLADE 在编码阶段利用 MLM 的强大功能。初始 Tokenization 和转换为 BERT 向量后,SPLADE 对所有标记位置应用 MLM,计算每个 Token 与 BERT 词汇表中每个单词的对应概率。接着,SPLADE 对每个词汇的这些概率进行聚合,并通过应用日志饱和效应的规范化方法来促进向量的稀疏性。得到的权重反映了每个词汇与输入 Token 的关联性,从而生成了一个 Learned 稀疏向量。

SPLADE 的 Embedding 技术的一个显著优势在于其固有的术语扩展能力。它能够识别并包含原始文本中未出现的相关术语。例如,在给出的示例中,虽然 “探索”(Exploration) 和 “创建”(Created) 未在初始句子中出现,但它们仍然在稀疏向量中出现。对于我们示例查询这样的简短输入而言,SPLADE 能通过扩展其包含 118 个 Token 的上下文来增强精确术语匹配的能力,显著提高了模型在检索任务中的精确度。

这个复杂的过程展示了 SPLADE 如何基于传统 BERT,衍生其颗粒度和适用性,使 SPLADE 特别适用于追求术语广泛度和精细度的搜索和检索任务中。

05.

总结

我们通过这篇文章在错综复杂的 Embedding 向量世界中遨游,展现了如何从传统的稀疏和稠密向量向创新的 Learned 稀疏向量迈进,探索了生成创新型 Learned 稀疏向量的方法。我们深入剖析了两种 ML 模型——BGE-M3 和 Splade,介绍了这两个模型是如何生成向量的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python和wxPython创建动态HTML日历生成器

在这个数字化时代,日历仍然是我们日常生活中不可或缺的工具。今天,我们将探讨如何使用Python创建一个动态HTML日历生成器。这个项目不仅实用,还能帮助我们深入理解Python编程、GUI开发和网页生成的相关知识。 项目概述 我们的目标是创建一个应用程序,允许用户选择特定的年份和…

第二证券:电影暑期档持续升温 农机自动驾驶驶入快车道

农机自动驾驶打开驶入快车道 得益于农机补贴、土地流通、高标准农田制造等方针引导,叠加技术突围和用户降本增效的内生需求,我国正处于农业2.0向农业3.0的过渡阶段。其间农机自动驾驶系统是结束农业3.0(即自动化)的要害并迎来快速…

【中项第三版】系统集成项目管理工程师 | 第 5 章 软件工程② | 5.4 - 5.8

前言 第 5 章对应的内容选择题和案例分析都会进行考查,这一章节属于技术的内容,学习要以教材为准。 目录 5.4 软件实现 5.4.1 软件配置管理 5.4.2 软件编码 5.4.3 软件测试 5.5 部署交付 5.5.1 软件部署 5.5.2 软件交付 5.5.3 持续交付 5.5.4…

我日常是如何使用LLM工具的:你的LLM工具没用起来,可能是因为方法不对。

引言 我对 Prompt 认知经历了 2 个阶段: 第一阶段:去年 3 月-11 月,我认为 Prompt 最终会灭亡。 第二阶段:去年 12 月至今,我有两个理解: 在主流 LLM 工具(比如 ChatGPT,文心一言等大模型厂商…

dom4j 操作 xml 之按照顺序插入标签

最近学了一下 dom4j 操作 xml 文件,特此记录一下。 public class Dom4jNullTagFiller {public static void main(String[] args) throws DocumentException {SAXReader reader new SAXReader();//加载 xml 文件Document document reader.read("C:\\Users\\24…

leetcode刷题总结——字符串匹配

KMP(字符串匹配算法) 主串或目标串:比较长的,我们就是在它里面寻找子串是否存在; 子串或模式串:比较短的。 前缀:字符串A和B,A BS,S非空,则B为A的前缀。 …

C++从入门到精通(第2版) 中文电子版

前言 C(c plus plus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。C既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对…

四、GD32 MCU 常见外设介绍

系统架构 1.RCU 时钟介绍 众所周知,时钟是MCU能正常运行的基本条件,就好比心跳或脉搏,为所有的工作单元提供时间 基数。时钟控制单元提供了一系列频率的时钟功能,包括多个内部RC振荡器时钟(IRC)、一个外部 高速晶体振荡器时钟(H…

Python os模块的强大功能与应用详解

概要 在Python中,os模块提供了与操作系统进行交互的功能,允许我们执行各种操作系统任务,如文件和目录操作、环境变量访问、进程管理等。os模块是标准库的一部分,无需额外安装。本文将详细介绍os模块的功能,并提供相应的示例代码,帮助全面掌握这一强大工具。 os 模块概述…

支付宝低代码搭建电商小程序,无需编程,可视化操作

大家好,我是小悟 在数字化浪潮的推动下,为了更快速、高效地搭建电商小程序,支付宝低代码平台凭借其独特优势,为商家提供了便捷的解决方案。 支付宝低代码平台犹如一座精心打造的智慧工坊,让电商小程序的搭建变得轻而易…

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型跑开源yolov5物体检测并体验Jupyter Lab AI 应用样例(新手入门)

文章目录 一、引言⭐1.1下载镜像烧系统⭐1.2开发板初始化系统配置远程登陆💖 远程ssh💖查看ubuntu桌面💖 远程向日葵 二、部署LLMS大模型&yolov5物体检测⭐2.1 快速启动LLMS大模型💖拉取代码💖下载mode数据&#x…

【Outlook】从Outlook新版回归经典版全攻略

引言 在微软宣布计划于2024年底淘汰邮件应用(Mail app)之后,许多用户发现新版Outlook应用(Outlook (new))在他们的Windows 11/10系统上自动启动。如果您更倾向于使用经典版Outlook(Outlook (classic)&…

大气热力学(11)——热力学图的应用之二(焚风)

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记,现转化为电子版本以作存档。相较于手写笔记,电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 11.1 焚风的概念11.2 焚风形成的原理11.3 焚风的示意图 11.1 焚风…

Caido——Burpsuite强有力的竞品工具

0x00 最近发现一个burpsuite的竞品:Caido,尝试使用了一下,发现它的功能还是挺强大的,而且在用户体验上,比Burpsuite要好不少!和大家分享一下。 Caido是一款用RUST语言编写的代理工具,目前处于…

nftables(7)集合(SETS)

简介 在nftables中,集合(sets)是一个非常有用的特性,它允许你以集合的形式管理IP地址、端口号等网络元素,从而简化规则的配置和管理。 nftables提供了两种类型的集合:匿名集合和命名集合。 匿名集合&…

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…

【顺序表】算法题 --- 力扣

一、移除元素 移除元素 这个题让我们移除数组nums中值为val的元素,最后返回k(不是val的元素个数) 这样显然我们就不能再创建一个数组来解决这个问题了,只能另辟蹊径 思路:双指针 这里定义两个指针(l1&…

【Python】连接MySQL数据库:详细教程与示例代码

文章目录 1. 安装必要的库2. 建立与MySQL的连接3. 执行SQL查询4. 插入数据5. 更新数据6. 删除数据7. 错误处理8. 小结 在数据驱动的开发中,连接数据库是一个至关重要的技能。Python作为一门强大的编程语言,提供了多种方式连接并操作MySQL数据库。本文将详…

nuitka 打包python程序成windows exe可执行文件

参考: https://www.zhihu.com/question/281858271/answer/2466245521 https://www.zhihu.com/question/281858271 https://zhuanlan.zhihu.com/p/689115995 https://blog.csdn.net/Pan_peter/article/details/136411229 下载: pydantic-2.6.1 pydantic-…

通讯的概念

通讯的概念 文章目录 通讯的概念1.通讯的基本概念2. 串行通讯与并行通讯2. 全双工、半双工及单工通讯3. 同步通讯与异步通讯4. 通讯速率 1.通讯的基本概念 通讯是指在嵌入式系统中实现数据交换的技术手段,它涉及到硬件与硬件、硬件与软件之间的信息传输。基本概念包…