输入“/”快速插入内容

延迟交互模型,为什么是下一代RAG的标配?

2024年8月12日修改
机器之心|阅读原文
张颖峰:英飞流联合创始人,多年搜索、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 中直接采用延迟交互模型替代向量搜索 + 精排这样的两阶段排序架构?