企业宣传,产品推广,广告招商,广告投放联系seowdb

提早交互模型 为什么是下一代RAG的标配

张颖峰:英飞流联结开创人,多年搜查、AI、Infra基础设备开发教训,目前正努力于下一代 RAG **产品树立。

在 RAG 系统开发中,良好的 Reranker 模型处于必无法少的环节,也总是被拿来放到各类评测当中,这是由于以向量搜查为代表的查问,会面临命中率低的疑问,因此须要初级的 Reranker 模型来弥补,这样就导致了以向量搜查为粗筛,以 Reranker 模型作精排的两阶段排序架构。

目前排序模型的架构重要有两类:

1. 双编码器。以 BERT 模型为例,它针对查问和文档区分编码,最后再经过一个 Pooling 层,使得输入仅包括一个向量。在查问时的 Ranking 阶段,只有要计算两个向量相似度即可,如下图所示。双编码器既可以用于 Ranking 也可以用于 Reranking 阶段,向量搜查实践上就是这种排序模型。由于双编码器针对查问和文档区分编码,因此无法捕捉查问和文档的 Token 之间的复杂交相互关,在语义上会有很多损耗,但由于只有要向量搜查即可成功排序打分计算,因此口头效率十分高。

2. 交叉编码器(Cross Encoder)。Cross-Encoder 经常使用单编码器模型来同时编码查问和文档,它能够捕捉查问和文档之间的复杂交相互关,因此能够提供更精准的搜查排序结果。Cross-Encoder 并不输入查问和文档的 Token 所对应的向量,而是再参与一个分类器间接输入查问和文档的相似度得分。它的缺陷在于,由于须要在查问时对每个文档和查问独特编码,这使得排序的速度十分慢,因此 Cross-Encoder 只能用于最终结果的重排序。例如针对初筛结果的 Top 10 做重排序,依然须要耗时秒级才可以成功。

往年以来,另一类以 ColBERT【参考文献1】为代表的上班,在 RAG 开发社区惹起了宽泛关注,如下图所示,它具有一些清楚区分于以上两类排序模型的特点:

其一是相比于 Cross Encoder,ColBERT 仍驳回双编码器战略,将查问和文档区分驳回独立的编码器编码,因此查问的 Token 和文档的 Token 在编码时互不影响,这种分别使得文档编码可以离线处置,查问时仅针对 Query 编码,因此处置的速度大大高于 Cross Encoder;

其二是相比于双编码器,ColBERT 输入的是多向量而非单向量,这是从 Transformer 的最后输入层间接取得的,而双编码器则经过一个 Pooling 层把多个向量转成一个向量输入,因此失落了局部语义。

在排序计算时,ColBERT 引入了提早交互计算相似度函数,并将其命名为最大相似性(MaxSim),计算方法如下:关于每个查问 Token 的向量都要与一切文档 Token 对应的向量启动相似度计算,并跟踪每个查问 Token 的最大得分。查问和文档的总分就是这些最大余弦分数的总和。例如关于一个有 32 个 Token 向量的查问(最大查问长度为 32)和一个有 128 个 Token 的文档,须要口头 32*128 次相似性操作,如下图所示。

因此相比之下, Cross Encoder 可以称作 早期交互模型 (Early Interaction Model) ,而以 ColBERT 为代表的上班可称为 提早交互模型(Late Interaction Model)。

下图从性能和排序品质上,区分对以上排序模型启动对比。由于提早交互模型满足了对排序环节中查问和文档之间复杂交互的捕捉,同时也防止了对文档 Token 编码的开支,因此既能保障良好的排序成果,也能成功较快的排序性能 —— 相反数据规模下, ColBERT 的效率可达 Cross Encoder 的 100 倍以上。因此提早交互模型是一种十分有前景的排序模型,一个自然的想法是: 能否在 RAG 中间接驳回提早交互模型代替向量搜查 + 精排这样的两阶段排序架构?

为此,咱们须要思考 ColBERT 工程化的一些疑问:

1. ColBERT 的 MaxSim 提早交相互似度函数,计算效率大大高于 Cross Encoder,但相比个别向量搜查,计算开支依然很大:由于查问和文档之间的相似度,是多向量计算,因此 MaxSim 的开支是个别向量相似度计算的 M * N 倍 (M 为查问的 Token 数, N 为 文档的 Token 数)。针对这些,ColBERT 作者在 2021 年推出了 ColBERT v2【参考文献 2】,经过 Cross Encoder 和模型蒸馏,改良了生成的 Embedding 品质,并且驳回紧缩技术,对生成的文档向量启动量化,从而改善 MaxSim 的计算性能。基于 ColBERT v2 包装的名目 RAGatouille【参考文献 3】成为高品质 RAG 排序的处置打算。但是,ColBERT v2 只是一个算法库,端到端的让它在企业级 RAG 系统经常使用,依然是一件艰巨的事件。

2. 由于 ColBERT 是预训练模型,而训练数据来自于搜查引擎的查问和前往结果,这些文本数据并不大,例如查问 Token 数 32 , 文档 Token 数 128 是典型的长度限度。因此将 ColBERT 用于实在数据时, 超越限度的长度会被截断,这关于长文档检索并不友好。

基于以上疑问, 开源 AI 原生数据库 Infinity 在最新版本中提供了 Tensor 数据类型,并原生地提供端到端的 ColBERT 打算。当 Tensor 作为一种数据类型,ColBERT 编码输入的多个向量,就可以间接用一个 Tensor 来寄存,因此 Tensor 之间的相似度就可以间接得出 MaxSim 打分。针对 MaxSim 计算量大的疑问,Infinity 给出了 2 个打算来优化:其一种是 binary 量化,它可以让原始 Tensor 的空间只有原始尺寸的 1/32 , 但并不扭转 MaxSim 计算的相对排序结果。这种打算重要用于 Reranker,由于须要依据前一阶段粗筛的结果取出对应的 Tensor 。另一种是 Tensor Index,ColBERTv2 实践上就是 ColBERT 作者推出的 Tensor Index 成功,Infinity 驳回的则是 EMVB【参考文献 4】,它可以看作是 ColBERT v2 的改良,重要经适量化和预过滤技术,并在关键操作上引入 SIMD 指令来减速成功。Tensor Index 只能用来服务 Ranker 而非 Reranker。此外,针对超越 Token 限度的长文本,Infinity 引入了 Tensor Array 类型:

一篇超越 ColBERT 限度的文档,会被切分红多个段落,区分编码生成 Tensor 后,都跟原始文档保留在一行。计算 MaxSim 的时刻,查问跟这些段落区分计算,而后取最大值作为整个文档的打分。如下图所示:

因此,驳回 Infinity,可以端到端地引入提早交互模型高品质地服务 RAG。那么,应该是驳回 ColBERT 作为 Ranker ,还是 Reranker 呢?下边咱们驳回 Infinity 来在实在数据集上启动评测。由于 Infinity 的最新版本成功了有史以来最全的混合搜查打算,召回手腕包括向量搜查、全文搜查、稀疏向量搜查,上文所述的 Tensor ,以及这些手腕的恣意组合,并且提供了多种 Reranker 手腕,如 RRF,以及 ColBERT Reranker 等,因此咱们在评测中包括了各种混合搜查和 Reranker 的组合。

咱们驳回 MLDR 数据集启动评测。MLDR 是 MTEB【参考文献 5】用来评测 Embedding 模型品质的 benchmark 集,其中 MLDR 是其中一个数据集,全称为 Multi Long Document Retrieval,一共包括 20 万长文本数据。评测驳回 BGE-M3【参考文献 6】作为 Embedding 模型,驳回 Jina-ColBERT【参考文献 7】来生成 Tensor,评测脚本也放到了 Infinity 仓库【参考文献 8】。

将 20 万 MLDR 数据区分用 BGE-M3 生成浓密向量和稀疏向量,并拔出到 Infinity 数据库中,数据库包括 4 列,区分保留原始文本,向量,稀疏向量,以及 Tensor,并区分构建相应全文索引、向量索引、稀疏向量索引。评测包括一切的召回组合,包括单路召回、双路召回,以及三路召回,如下所示:

评测目的驳回 nDCG@10。其余参数:驳回 RRF Reranker 时粗筛前往的 Top N = 1000 ,查问累计共有 800 条,平均每条查问长度在 10 个 token 左右。

从图中看到,一切的召回打算,在驳回了 ColBERT Reranker 之后,都有清楚的成果优化。ColBERT 作为一种提早交互模型,它可以提供跟在 MTEB 的 Reranker 排行榜上位居前列等量齐观的排序品质,但是性能却是它们的 100 倍,所以可以在更大的范围内启动重排序。图中给出的结果是针对 Top 100 启动 Reranker,而驳回 Top 1000 启动 ColBERT 重排序,数值没有清楚变动,性能还有清楚降低,因此不介绍驳回。传统上驳回基于 Cross Encoder 的外部 Reranker ,Top 10 就会有秒级的提早,而 Infinity 外部成功了高性能的 ColBERT Reranker,即使针对 Top 100 甚至 Top 1000 做重排序,也不会影响用户体验,而召回的范围却大大参与,因此可以清楚改良最终的排序成果。此外,这种 ColBERT Reranker 计算只有在纯 CPU 架构上即可运转,这也大大降低了部署的老本。

评测二:对比基于 ColBERT 作为 Ranker 而不是 Reranker。 因此,这时须要针对 Tensor 这列数据构建 Tensor Index。同时,为了评价 Tensor Index 引入的精度损耗,还启动了暴力搜查。

可以看到,相比 Reranker ,即使是驳回没有精度损失的暴力搜查,也没有清楚的优化,而驳回基于 Tensor Index 的排序品质甚至低于驳回 Reranker。但是,作为 Ranker 的查问期间却要慢得多:MLDR 数据集包括 20 万文档数据,大概 2GB 左右,驳回 Jina-ColBERT 转成 Tensor 数据后,高达 320 G,这是由于 Tensor 数据类型是把一篇文档的每个 Token 对应的向量都要保留上去, ColBERT 模型的维度是 128 维,因此自动数据量会收缩 2 个数量级,即使构建了 Tensor Index,在查问这么少数据的时刻,也须要平均 7s 能力前往一个查问,但获取的结果却并没有更好。

因此,很显然,ColBERT 作为 Reranker 的收益比作为 Ranker 要高得多。最佳的 RAG 检索打算,是在 3 路混合搜查(全文搜查 + 向量 + 稀疏向量)的基础上加 ColBERT Reranker。有同伴或者会问了,为了驳回 ColBERT Reranker,就须要参与独自的 Tensor 列,并且该列会相比原始数据集收缩 2 个数量级,这样做能否值得?首先:Infinity 针对 Tensor 提供了 Binary 量化手腕,作为 Reranker,它并不影响排序结果很多,但却可以让最终的数据仅有原始 Tensor 大小的 1/32。其次,即使如此,也会有人以为这样的开支过高。但是站在经常使用者的视角,用更多的存储,来换取更高的排序品质和更便宜的老本(排序环节无需 GPU),这样做依然是十分值得的。最后,置信很快就可以推出成果上略有降低,但存储开支大大降低的 Late Interaction 模型,作为一款> 以上是基于 Infinity 在 MLDR 数据集上的多路召回评测,在其余数据集的评测结果,或者会有所不同,但全体上论断不会变 —— 3 路混合搜查 + 基于 Tensor 的重排序,是搜查结果品质最高的召回手腕。

由此可以看到,ColBERT 及其提早交互模型,在 RAG 场景具有很大的运行价值,以上是在文本对话内容生成的相关上班,近期,提早交互模型在多模态场景,也获取了 SOTA 的结果。这就是 ColPali【参考文献 9】,它扭转了 RAG 的上班流程,如下图所示:

RAG 在面临复杂格局文档时,当下的 SOTA ,是驳回文档识别模型,对文档的规划做识别,并针对识别出的局部结构,例如图表,图片等,再区分调用相应的模型,将它们转化为对应的文字,再用各种格局保留到 RAG 配套的数据库中。而 ColPali 则省掉了这些步骤,它间接驳回多模态模型生成 Embedding 内容。提问的时刻,可以间接针对文档中的图表启动回答:

ColPali 模型的训练跟 ColBERT 相似,也是驳回查问 - 文档页面对的方式,从而捕捉查问和文档多模态数据之间的语义关联,只是驳回 PaliGemma【参考文献 10】用来生成多模态 Embedding 。相比没有驳回 Late Interaction 机制但雷同驳回 PaliGemma 生成 Embedding 的打算 BiPali,在 nDCG@5 的评测目的对比是 81.3 vs 58.8,这种差距是就是 “极好” 和 “压根不能上班” 的区别。

因此,虽然 ColBERT 产生至今已有 4 年期间,可是 Late Interaction 模型在 RAG 的运行才刚刚开局,它必将扩展 RAG 的经常使用场景,在包括多模态在内的复杂 RAG 场景提供高品质的语义召回。而 Infinity 曾经为它的端到端运行做好了预备,欢迎关注和 Star Infinity,, 努力于成为最好的 AI 原生数据库!

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender