一文深度剖析 ColBERT

news2024/11/15 19:33:53

近年来,向量搜索领域经历了爆炸性增长,尤其是在大型语言模型(LLMs)问世后。学术界开始重点关注如何通过扩展训练数据、采用先进的训练方法和新的架构等方法来增强 embedding 向量模型。

在之前的文章中,我们已经深入探讨了各种类型的 embedding 向量和专为高效信息检索而设计的模型,包括针对具体用例设计的稠密、稀疏和二进制 embedding 向量,它们各自的优势和劣势。此外,我们还介绍了各种 Embedding 向量模型,如用于稠密向量生成和检索的 BERT,以及用于稀疏向量生成和检索的 SPLADE 和BGE-M3。

本文将深度剖析 ColBERT——专为高效相似性搜索而设计的创新型 embedding 和排序(ranking)模型。

01.简要回顾 BERT

ColBERT,是对 BERT 的延伸。让我们先简要回顾一下 BERT。这将帮助我们理解 ColBERT 所做出的改进。

BERT 全称为 Bidirectional Encoder Representations from Transformers,是一种基于 Transformer 架构的语言模型,在稠密向量和检索模型方面表现出色。与传统的顺序自然语言处理方法不同,BERT 从句子的左侧到右侧或相反方向进行移动,通过同时分析整个单词序列结合单词上下文信息,从而生成稠密向量。那么,BERT 是如何生成 embedding 向量的呢?

alt

首先,BERT 将句子转换为单词片段(也称为 token)。然后,在生成的 token 序列的开头添加一个特殊的token[CLS],在末尾添加一个 token[SEP],以分隔句子并指示结束。

接下来是 embedding 和 基于transformer的encoding。BERT 通过 embedding 矩阵将token变为向量,并且通过多层编码器将其进行深层次的编码。这些层根据序列中所有其他token提供的上下文信息,对每个token的表示进行基于注意力机制的细化。

最后,使用池化操作将所有 token 向量转化成单一的稠密向量。

02.什么是 ColBERT

ColBERT全称为Contextualized Late Interaction over BERT,基于传统的BERT模型进行了深度创新。BERT将token向量合并为单一表示(即向量),而ColBERT保留了每个token的表示,提供了更细粒度的相似性计算。ColBERT的独特之处在于引入了一种新颖的后期交互机制,可以通过在检索过程的最终阶段之前分别处理查询和文档,实现高效和精确的排名和检索。我们在下文中将详细介绍这种机制。

本质上,虽然BERT或其他传统的embedding模型为每个文档生成一个单一向量,并产生一个单一的数值分数,反映其与查询句的相关性。而ColBERT提供了一个向量列表,进行查询中的每个token与文档中的每个token的相关性计算。这种方法帮助我们更详细和更细致的理解查询和文档之间的语义关系。

03.ColBERT 架构

下图展示了ColBERT的架构,包括:

  • 一个查询编码器

  • 一个文档编码器

  • 后期交互机制

alt

在处理查询Q和文档D时,ColBERT利用查询编码器将Q转换为一组固定大小的Embedding向量,表示为Eq。同时,文档编码器将D转换为另一组embedding向量Ed。Eq和Ed中的每个向量都拥有QD中周围词的上下文信息。

有了EqEd,ColBERT通过后期交互方法计算QD之间的相关性分数,我们将其定义为最大相似性(MaxSim)的总和。具体来说,该方法识别每个Eq中的向量与Ed中的向量之间的最大内积,然后通过求和将这些结果组合起来。

从概念上讲,这种后期交互机制将每个查询中的 token embeddingtq与文档向量列表进行比较,并考虑了在查询中的上下文。这个过程通过识别tq与文档中的词td之间的最高相似度分数来量化"匹配"程度。ColBERT通过聚合所有查询项之间的最大匹配程度来评估文档的相关性。

查询编码器

在处理查询Q时,查询编码器利用基于BERT的模型将Q tokenize为单词片段token,表示为q1、q2、...、ql。此外,它在BERT的序列起始token[CLS]之后立即插入一个特殊的token[Q]。如果查询包含的token数量少于预定义的阈值Nq,则使用token[mask]进行填充,直到达到长度Nq。相反,如果超过了Nq个token,则将其截断为前Nq个token。然后,将这个调整后的输入token序列传入BERT的Transformer架构中,为每个token生成上下文表示。生成的输出包括一组Embedding向量,定义如下:

Eq := Normalize( CNN( BERT("[Q], q0, q1, ...ql, [mask], [mask], …, [mask]") ) )

Eq表示通过正则化的token序列(包括特殊的token[Q]和填充token[mask]),即通过BERT的Transformer层,并应用卷积神经网络(CNN)进行进一步精炼而得到的归一化输出。

文档编码器

文档编码器的操作与查询编码器类似,将文档 D tokenize 为token,表示为d1、d2、...、dn。在这个过程之后,文档编码器在BERT的起始token[CLS]之后立即插入一个特殊的token[D],以指示文档的开始。与查询 tokenize 过程不同,文档中不添加[mask]

在将这个输入序列通过BERT和随后的线性层之后,文档编码器需要移除与标点符号所对应的embedding。这个过滤步骤是为减少每个文档的embedding 向量数量。输出一组向量,表示为Ed

Ed := Filter( Normalize( CNN( BERT("[D], d0, d1, ..., dn") ) ) )

Ed表示将tokenized 的文档通过BERT的Transformer层、应用卷积神经网络操作并过滤掉与标点符号相关的Embedding所获得的归一化和过滤后的向量列表。

后期交互机制

在信息检索中,“交互”是指通过比较查询和文档的向量表示来评估它们之间的相关性。“后期交互”表示这种比较发生在查询和文档已经被独立编码之后。这种方法与BERT之类的“早期交互”模型不同——早期交互中查询和文档的Embedding在较早的阶段相互作用,通常是在编码之前或期间。

ColBERT采用了一种后期交互机制,使得查询和文档的表示可以用于预计算。然后,在末尾使用简化的交互步骤来计算已编码的向量列表之间的相似性。与早期交互方法相比,后期交互可以加快检索时间和降低计算需求,适用于需要高效处理大量文档的场景。

那么,后期交互过程是如何实现的呢?

如前所述,编码器将查询和文档转换为token级别的embedding列表EqEd。然后,后期交互阶段使用针对每个Eq中的向量,找与其产生最大内积的Ed中的向量(即为向量之间的相似性),并将所有分数求和的最大相似性(MaxSim)计算。MaxSim的计算结果就反映了查询与文档之间的相关性分数,表示为Sq,d

alt

这种方法的独特价值在于能够对查询与文档token embedding之间进行详细、细粒度的比较,有效捕捉查询和文档中长度不同的短语或句子之间的相似性。这尤其适合需要精确匹配文本片段的应用场景,可以提高搜索或匹配过程的整体准确性。

04.ColBERTv2:基于ColBERT优化检索效果和存储效率

ColBERT 通过对查询和文档进行单独编码,并采用详细的后期交互进行准确的相似性计算。与Sentence-BERT不同,ColBERT为句子中的每个 token生成一个向量——这种方法在相似性检索中更有效,但是模型消耗的存储空间会呈指数性增长。

ColBERTv2能够解决这些问题。这个版本通过将乘积量化(PQ)与基于质心的编码策略相结合来增强ColBERT。PQ使ColBERTv2能够压缩token embedding 而不会造成显著的信息丢失,从而降低存储成本同时保持模型的检索效果。这一改进优化了存储效率,并保留了模型对细粒度相似性评估的能力,使ColBERTv2成为大规模检索系统的更可行的解决方案。

ColBERTv2 中的基于质心的编码

在 ColBERTv2 中,由编码器生成的token向量被聚类成不同的组,每个组由一个质心表示。这种方法允许质心索引描述每个向量以及捕捉其与质心的偏差的残差分量。这个残差的每个维度只需被高效地量化为一个或两个比特。因此,原始向量可以通过质心索引和量化的残差的组合来有效地表示,与实际向量只有轻微的差异。这些差异对整体检索准确性影响很小。

如何使用基于质心的向量进行相似性检索

alt

首先,ColBERTv2 利用先前描述的基于质心的方法高效地对文档进行编码,其中质心及其相关的量化残差表示每个文档。同样地,编码器将查询转换为一组token级别的向量,表示为{q1, q2, q3, ..., qn}

在检索阶段,对于每个查询向量qi,我们首先检索预先确定数量的质心,这个是数量称为nprobe。然后,我们从这些质心的低比特量化残差中重建对应的向量,并根据它们的文档ID将它们组织成组。这种组织方式简化了后续的匹配过程,图中反映了nprobe为3的搜索查找过程,红圈为每一个组的质心。

一旦我们按文档ID对向量进行分类,目标就转移到识别与每个qi最相似的向量。例如,如果查询向量q1与文档1中的向量d1紧密对齐,并且该文档的组包括{d1, d3, d5},那么就无需为{d1, d2, d3, d4, d5}计算完整的MaxSim。这是因为向量d2d4,不是最初的nprobe群的一部分,不太可能与任何查询向量qi紧密匹配。在识别出最相关的分组之后,系统检索Top-K个最相似的文档。我们加载这些文档的所有完整向量进行最终的重新排名,包括最初不在nprobe群中的向量。

05.总结

文本对 ColBERT 进行了深入的解析。与 BERT 之类的传统 embedding 模型不同,ColBERT 保留了 token 级别的 embedding,通过其创新的后期交互机制实现了更精确和细粒度的相似性计算。

我们还研究了 ColBERTv2——通过 PQ 和基于质心的编码来减轻存储消耗的优化版ColBERT。这些改进有效提高了存储效率,并保持了模型的检索效果。ColBERT 模型的持续改进和创新展现了自然语言表征技术的动态发展,表明未来检索系统会有更高的准确性和效率。


  • 好消息,Milvus 社区正全网寻找「 北辰使者」!!! •
  • 如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。 •
  • 欢迎关注微信公众号“Zilliz”,了解最新资讯。

本文由 mdnice 多平台发布

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

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

相关文章

领券拿外卖返利红包,最低0元吃外卖

小蚕荟是利用本地资源和自媒体优势构建的“本地生活服务”平台,总部位于杭州,旨在为用户提供热门的吃喝玩乐本地生活服务类产品。布局已覆盖杭州、南京、上海等一二线城市。 小蚕荟是一款专为用户吃外卖省钱的生活工具,单单可返利15元起&…

使用霍尔效应传感或磁场传感技术的应用

随着支持技术的增强,使用霍尔效应传感或磁场传感技术的应用目前已变得有效。本技术文档介绍了霍尔效应技术,并对应用进行了回顾,特别是区分霍尔传感器 IC 的主要类型以及它们可以支持的各种传感行为。此外,它还探讨了一些使能技术…

用智能插件(Fitten Code: Faster and Better AI Assistant)修改好了可以持久保存的vue3留言板

天际 第一修改是选项式&#xff1a; <!-- 模板结构 --> <template><div><textarea placeholder"请输入备注内容" v-model"newItem"></textarea><button click"addItem">添加</button><hr><…

HAL库点LED灯

文章目录 一、创建CubeMX项目操作步骤1.STM32CubeMX创建工程2.选择芯片3.Pinout & Configuration配置4.Clock Configuration配置5.Project Manager配置 二、实验&#xff08;一&#xff09;LED流水灯1.Keil修改代码2.实验现象3.keil波形仿真 &#xff08;二&#xff09;2只…

JVM学习-堆空间(一)

堆空间 每个进程&#xff08;JVM实例&#xff09;拥有唯一的方法区和堆空间&#xff0c;拥有唯一的Runtime实例(基于饿汉式方式)&#xff0c;线程共享进程的方法区和堆空间&#xff0c;每个线程拥有独立的程序计数器、本地方法栈和虚拟机栈。 一个JVM实例只存在一个堆内存&am…

MySQL主从复制(三):主从延迟

主备流程图&#xff1a; 谈到主备的复制能力&#xff0c;要关注的是上图中的两个黑色箭头。 一个箭头代表了客户端写入主库&#xff0c;另一个箭头代表的是sql_thread执行中转日志&#xff08;relay log&#xff09;。如果用箭头的粗细来代表并行度的话&#xff0c;那么真实情…

spring-boot集成slf4j(二)logback配置详解

一、configuration 根节点&#xff1a;configuration&#xff0c;作为顶级标签&#xff0c; 可以用来配置一些lockback的全局属性&#xff0c;常见的属性如下&#xff1a; &#xff08;1&#xff09;scan“true” &#xff1a;scan是否开启自动扫描&#xff0c;监控配置文件更…

【Crypto】看我回旋踢

文章目录 一、看我回旋踢二、知识点什么是ROT13&#xff1f;工作原理分析字符串格式 解题感悟 一、看我回旋踢 关键词回旋&#xff0c;盲猜ROT13 因为以 synt{ 开头&#xff0c;并以 } 结束&#xff0c;基本可以判断是ROT13 小小flag&#xff0c;拿下&#xff01; 二、知识点 …

Algoriddim djay Pro Ai for Mac:AI引领,混音新篇章

当AI遇上音乐&#xff0c;会碰撞出怎样的火花&#xff1f;Algoriddim djay Pro Ai for Mac给出了答案。这款专业的DJ混音软件&#xff0c;以AI为引擎&#xff0c;引领我们进入混音的新篇章。 djay Pro Ai for Mac的智能混音功能&#xff0c;让每一位DJ都能感受到前所未有的创作…

LAMDA面试准备(2024-05-23)

有没有学习过机器学习&#xff0c;提问了 FP-Growth 相比 Apriori 的优点 1. 更高的效率和更少的计算量&#xff08;时间&#xff09; FP-Growth 通过构建和遍历 FP-树 (Frequent Pattern Tree) 来挖掘频繁项集&#xff0c;而不需要像 Apriori 那样生成和测试大量的候选项集。具…

GQL 来了!ISO/IEC 正式发布 GQL 数据库国际标准!

历时四年筹备&#xff0c;超过20个国家的标准和技术专家参与制定&#xff0c;ISO/IEC GQL &#xff08;图查询语言&#xff09;标准于2024年4月12日正式发布&#xff01; 作为国际标准化组织&#xff08;ISO&#xff09;继 1987年 发布SQL后&#xff0c;唯一发布的数据库查询语…

数据库迁移——kettle开发01

背景&#xff1a;数据库的多种多样&#xff0c;在搭建项目之初&#xff0c;并没有详细考虑到数据库的建设&#xff0c;当增加配置不能满足业务场景需要时&#xff0c;这时候考虑到使用更高性能的数据库&#xff0c;如将MySQL更换为oracle数据库。或者在搭建新项目时&#xff0c…

【EXCEL_VBA_基础知识】08 在VBA中使用公式 ※

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 函数在哪找&#xff1f; 1.1 工作表函数&#xff08;Application.WorksheetFunction.func&#xff09; 1.2 VBA函数 2. 常用VBA变量 3. 函数应用…

如何做好云安全防护

随着云计算技术的迅猛发展和普及&#xff0c;越来越多的企业和个人选择将数据和业务应用迁移到云平台&#xff0c;以享受其带来的高效、便捷和可扩展性。然而&#xff0c;云环境的复杂性和开放性也带来了前所未有的安全挑战。如何确保云环境中的数据安全&#xff0c;成为了每一…

瑞米派Ubuntu系统移植指南-米尔RemiPi

1.概述 Linux系统平台上有许多开源的系统构建框架&#xff0c;这些框架方便了开发者进行嵌入式系统的构建和定制化开发&#xff0c;目前比较常见的有Buildroot, Yocto, OpenEmbedded等等。 同时更多的传统的桌面系统也加入到嵌入式环境体系中&#xff0c;如Ubuntu&#xff0c…

微信小程序使用input标签遇到的问题

场景1&#xff1a;多个input标签切换无法聚焦问题 解决方案1&#xff1a; 在网上搜的用官方给的always-embed属性&#xff0c;但是也明确标注了只有ios可用 解决方案2&#xff1a; 使用focus属性&#xff1a;每次点击input标签都重新设置 wxml: <input adjust-position…

一文带你了解所有常用排序算法

目录 快速排序 堆排序 桶排序 归并排序 拓扑排序 本文主要介绍那些我在刷题过程中常用到的排序算法: 快速排序,堆排序,桶排序,归并排序,拓扑排序 其余算法例如冒泡,插入这种效率特别低的算法就不介绍了,用的可能性极小 每一个算法都将采用例题加解释的方式进行介绍 快速…

文心智能体应用示例:职场反PUA专家的诞生

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

LangChain llamaindex

LangChain 参考&#xff1a; 全流程 | Windows 系统本地部署开源模型阿里通义千问 QWEN 1.5&#xff0c;结合 LangChain-Chatchat 框架和向量数据库 FAISS、Milvus - 知乎

蓝桥杯-数三角(ac代码时间复杂度分析)

问题描述 小明在二维坐标系中放置了 ( n ) 个点&#xff0c;他想在其中选出一个包含三个点的子集&#xff0c;这三个点能组成三角形。然而这样的方案太多了&#xff0c;他决定只选择那些可以组成等腰三角形的方案。请帮他计算出一共有多少种选法可以组成等腰三角形&#xff1f…