基于 Infinity 的多路召回评测

Infinity 的最新版本实现了有史以来最全的混合搜索方案,包含向量搜索、全文搜索、稀疏向量搜索,以及张量搜索,并且提供了 3 种融合重排序手段:RRF,Weighted Sum,以及 ColBERT Reranker。那么这些搜索和方案,在实际中使用的效果如何呢?本文来一探究竟。

我们采用了 MLDR 数据集进行评测。MLDR 是 MTEB 【参考文献 1】用来评测 embedding 模型质量的 benchmark 集,其中 MLDR 是其中一个数据集,全称为 Multi Long Document Retrieval,一共包含 20 万长文本数据。评测采用 BGE-M3【参考文献 2】作为 Embedding 模型,因为它不仅能生成稠密向量,还能输出稀疏向量。评测脚本也放到了 Infinity 仓库【参考文献 3】。

评测一:将 20万 MLDR 数据分别用 BGE-M3 生成稠密向量和稀疏向量,并插入到 Infinity 数据库中,数据库包含3列,分别保存原始文本,向量,以及稀疏向量,并分别构建相应全文索引、向量索引、以及稀疏向量索引。先进行简单混合搜索,采用 RRF 重排序方案, 评测指标采用 nDCG@10。其他参数:Top N = 1000 ,查询有 800 条,平均每个查询大约在 10 个 token 左右。

可以看到,3路召回效果最好,2路次之,单路最差,这跟 IBM Research 在其 Blended RAG 【参考文献 4】中的结果一致。在单路评测中,排名最高的是 BM25 全文搜索,这跟 BGE-M3 在其论文【参考文献 2】中给出的结果并不一致,如下图所示,根据 BGE-M3 的结果, BM25 跟稠密向量类似,都属于查询质量较低的。我们查看了评测代码,发现 BGE-M3 并没有采用一个实现了标准 BM25 算法的数据库,而是自行实现了简易的 BM25,这是导致评测结果相差较大的主要原因。实际上,符合 RAG 需求的 BM25 不仅仅是需要 TF/IDF 这样的统计信息打分,还需要实现完整的 Top K Union 语义,也就是说任何一个 Token 命中,都应该被计算得分。

评测二:跟评测一基本一致,只是在融合排序这里采用了 Weighted Sum 来对比 RRF。 Weighted Sum 是由用户指定各路召回的权重。如下图所示,经过一些调整,在 2 路召回上,稠密向量和稀疏向量分别采用 20% 和 80% 权重叠加的排序,可以显著超过采用 RRF 排序的结果。但在 3 路召回上,不论如何调优,两者差距微乎其微。因此, Weighted Sum 赋予了用户更多的选择,但它的排序结果相比 RRF 没有本质变化。

评测三:在 Infinity 数据库中增加一列,保存 Tensor 信息,采用 Jina-ColBERT 【参考文献 7】来生成张量写入到数据库中。用 ColBERT Reranker 对比单路搜索,以及采用 RRF 的混合搜索。

从图中看到,所有的召回方案,在增加了 ColBERT Reranker 之后,都有明显的效果提升。图中给出的结果是针对 Top 100 进行Reranker,而采用 Top 1000 进行 ColBERT 重排序,数值没有明显变化,性能还有明显下降,因此不推荐采用。很明显,基于 Tensor 的 ColBERT Reranker 可以提供显著的排序质量加成。ColBERT 是一种 Late Interaction 模型,它可以提供跟在 MTEB 的 Reranker 排行榜上位居前列相提并论的排序质量,但是性能却是它们的 100 倍,所以可以在更大的范围内进行重排序。 传统上采用数据库外部的 Reranker ,Top 20 就会有数秒的延迟——这还是采用 GPU 推理计算的结果,而 Infinity 内部实现了高性能的 ColBERT Reranker,即使针对 Top 100 甚至 Top 1000 做重排序,也不会影响用户体验,而召回的范围却大大增加,因此可以显著改进最终的排序效果。此外,采用ColBERT Reranker 的 Infinity 只需在纯 CPU 架构上即可运行,这也大大降低了部署的成本。

评测四:用 Tensor 作为 Ranker 而不是 Reranker。在 Infinity 内部,Tensor 不仅可以用来做 Reranker,还可以单独作为一种召回手段。为此,Infinity 内部实现了 EMVB 索引,它可以看作是 ColBERTv2 【参考文献 5】的一种性能改进版。有了这种功能,用户不再需要 RAGatouille 【参考文献 6】这样的工具,可以端到端的采用 Infinity 实现 ColBERT 排序功能。

评测四对比的是 ColBERT 作为 Ranker 和 Reranker,作为前者,同时评估了采用 EMVB 索引和暴力搜索,可以看到,相比 Reranker ,即使是暴力搜索,也没有显著的提升,而用 EMVB 索引的排序质量甚至低于采用 Reranker。然而,作为 Ranker 的查询时间却要慢得多:MLDR 数据集包含 20万文档数据,大约 2GB 左右,采用 Jina-ColBERT 转成 Tensor 数据后,高达 320 G,这是因为 Tensor 数据类型是把一篇文档的每个 Token 对应的向量都要保存下来, ColBERT 模型的维度是128维,因此默认数据量会膨胀 2个数量级,即使构建了 EMVB 索引,在查询这么多数据的时候,也需要平均 7s 才能返回一个查询,但得到的结果却并没有更好。

因此,很显然,最佳的混合搜索方案,在当前是采用 ColBERT Reranker,其中在 3路混合搜索(BM25 + 向量 + 稀疏向量)的基础上加 ColBERT Reranker 的得分最高。有伙伴可能会问了,为了采用 ColBERT Reranker,就需要增加单独的 Tensor 列,并且该列会相比原始数据集膨胀 2 个数量级,这样做是否值得? 首先:Infinity 针对 Tensor 提供了 Binary 量化手段,作为 Reranker,它并不影响排序结果,但却可以让最终的数据仅有原始 Tensor 大小的 1/32。其次,即便如此,也会有人认为这样的开销过高。然而站在使用者的视角,用更多的存储,来换取更高的排序质量和更廉价的成本(排序过程无需 GPU),这样做依然是非常值得的。最后,相信很快就可以推出效果上略有下降,但存储开销大大降低的 Late Interaction 模型,作为一款 Data Infra 基础设施, Infinity 对这些变化保持透明,把这些 Trade Off 交给用户是明智的选择。

以上是基于 Infinity 在 MLDR 数据集上的多路召回评测,在其他数据集的评测结果,可能会有所不同,但整体上结论不会变—— 3路混合搜索 + 基于Tensor 的重排序,是当前搜索结果质量最高的召回手段。欢迎关注和 Star Infinity,https://github.com/infiniflow/infinity, 致力于成为最好的 AI 原生数据库!

参考文献

  1. https://huggingface.co/mteb

  2. https://huggingface.co/BAAI/bge-m3

  3. https://github.com/infiniflow/infinity/tree/main/python/benchmark/mldr_benchmark

  4. Blended RAG: Improving RAG (Retriever-Augmented Generation) Accuracy with Semantic Search and Hybrid Query-Based Retrievers, https://arxiv.org/abs/2404.07220 , 2024

  5. Colbertv2: Effective and efficient retrieval via lightweight late interaction, arXiv:2112.01488, 2021.

  6. RAGatouille https://github.com/bclavie/RAGatouille

  7. https://huggingface.co/jinaai/jina-colbert-v1-en

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值