社区供稿 | RAG 领域的新宠:为什么 AI 圈都在谈论 Jina ColBERT?

02/26 19:10
阅读数 24

RAG (检索增强生成)领域,选对向量模型至关重要,它基本就决定了 RAG 系统的“天花板”,也因此,向量模型的选择总是业界的热门讨论话题。

最近,Jina AI 在 Hugging Face 上推出的 Jina-ColBERT 模型引起了 AI 圈子里不小的轰动,尤其是在 Twitter/X 上,大家都在讨论它能处理高达 8192 Token 的强大能力,为搜索带来了更多的可能性。

与 ColBERTv2 相比,Jina-ColBERT 在各项测试中都展现了顶尖的性能,特别在处理长文档数据集时,其表现更是显著优于 ColBERTv2。

与市场上大多数向量模型相比,Jina-ColBERT 有个显著的不同点——它采用的是多向量搜索技术。单向量模型会把整个文档或段落编码成一个单一向量,然后基于余弦相似度进行匹配。而 多向量模型,如 Jina-ColBERT,则是将文本中的每个词编码成独立向量,通过迟交互计算相似度。

模型地址: https://huggingface.co/jinaai/jina-colbert-v1-en

很多人都听过 BERT 模型,但 ColBERT 是什么呢?

先说说背景。ColBERT 基于 BERT 模型开发,师出名门斯坦福。那为啥最近又翻红了呢?原来,ColBERT 升级到 v2 版本,不仅补齐了 v1 版本在存储和扩展性上的短板,还显著提升了性能。

再来说说 ColBERT 的家谱。之前大家没怎么注意到它,主要是因为从传统搜索(文本匹配)过渡到向量检索的过程中,大家都忙着折腾单向量模型,把这位和 BERT 同门的 ColBERT 给忽略了。

单向量模型是将查询和文档简化为单一向量的表示,多向量模型 ColBERT 则 为每个 token 生成一个向量,并通过 MaxSim(Maximum Similarity, 最大相似度)计算得分,即它对于每个查询词,从文档中找到与之最相似的词的向量,并将这些最大相似度值相加作为最终的相关性分数。

ColBERT 通过采用 token 级别的细粒度交互,即首先将查询和文档在词粒度上逐项编码,再在查询阶段进行交互。也就是说,文档侧的计算可以完全离线进行,这一点与单向量模型的做法一致,但在处理方法上更为精细。这就使得它的可解释性更好,在 token-level 匹配之后,我们能够解释查询中哪个词与文档中的哪个词最匹配。

这种多向量的召回方式带来两大好处:一是逐 token 编码提供了更细粒度的表征,在 in-domain (同领域)具有很高的 MRR@10(头部排序能力)和 Recall@1k(腰尾部召回能力)。并且提供了更好的可解释性。二是提供 out-of-domain (跨领域) 更强的泛化能力,特别是在处理长尾查询或文档时,由于词粒度的精细表征,使得模型对于未见过的领域有更好的性能表现。

Colbert 迟交互机制

与传统的 query-doc 全交互型 BERT 及目前流行的 Embeddings 模型相比,ColBERT 提出的 Late Interaction (迟交互)机制 有着显著的优势。

具体来说,单向量模型是吃进一个句子,吐出一个向量,然后再基于这些向量做相似度比较。而同样是分别编码查询和文档,ColBERT 拿模型生成的 Token Embedding 来做相似度计算,在后续阶段计算查询和文档 Token Embedding 之间的交互。这种方法既考虑了匹配效率,也充分利用了上下文信息,使得 ColBERT 既能作为一个强大的召回模型,也可以用作召回之后的重排工具。

Interaction schemes

Jina-ColBERT 的升级亮点

Jina-ColBERT 是 Jina AI 对原有 ColBERT 模型的一番升级打磨。核心改进是采用了 jina-bert-v2-base-en 作为基础模型,从而支持一口气处理长达 8192 token 的文本。 

这一改进意味着,无论是对付那些短小精悍的文本,还是那些长篇大论、需要深度理解的搜索任务,Jina-ColBERT 都能轻松应对。甚至在很多情况下,尤其长文本场景下,都能比 ColBERT v2 模型做得更好。

我们在 BEIR 数据集上,对比测试了 Jina-ColBERT,和原版 ColBERTv2,以及单向量模型 Jina-Embeddings-v2-base-en 模型的能力。

Dataset ColBERTv2 jina-colbert-v1-en jina-embeddings-v2-base-en
Arguana 46.5 49.4 44.0
Climate-Fever 18.1 19.6 23.5
DBPedia 45.2 41.3 35.1
FEVER 78.8 79.5 72.3
FiQA 35.4 36.8 41.6
HotpotQA 67.5 65.9 61.4
NFCorpus 33.7 33.8 32.5
NQ 56.1 54.9 60.4
Quora 85.5 82.3 88.2
SCIDOCS 15.4 16.9 19.9
SciFact 68.9 70.1 66.7
TREC-COVID 72.6 75.0 65.9
Webis-touch2020 26.0 27.0 26.2
Average 51.7 52.6 51.6

从这个表里,我们能看到 Jina-ColBERT 的亮眼表现,各项测试里,它都能和 ColBERTv2 一较高下。

值得一提的是,Jina-ColBERT 只用了 MSMARCO 数据集来训练,而 Jina-Embeddings-v2-base-en 使用了更广泛的训练数据,后者在某些特定任务上表现得更好。

我们还特别在专为长文本设计的新 LoCo Benchmark 上进行了测评,可以看到 Jina-ColBERT 在处理那些超出 ColBERTv2 常规上下文长度的场景时,表现更是出色。

Dataset ColBERTv2 jina-colbert-v1-en jina-embeddings-v2-base-en
LoCo 74.3 83.7 85.4

总的来说,Jina-ColBERT 在各项基准测试中都表现出和 ColBERTv2 相媲美的性能,当在文本的上下文更长时,它的表现就更胜一筹了。

如果你想在 RAG(检索增强生成)领域挑选出合适的向量模型,这里有几条建议,帮你判断哪个最合适。

  1. 如果你偏好简单的单向量存储与检索,并且能够接受一定程度的精确度牺牲,那么 Jina-Embeddings-v1 是个不错的选择。

  2. 对于那些追求细颗粒度检索、关注模型在 out-of-domain(未知领域)的表现、以及需要模型可解释性的用户来说,Jina-ColBERT 会是更优选。

  3. 你也可以设计一个分阶段的检索流程:首先用 Jina-Embeddings-v2 快速定位候选文档,接着用 Jina-ColBERT 进行更细颗粒度的重新排序。

  4. 请注意,目前 Jina-ColBERT 仅支持英文内容的处理。

轻松上手:Jina-ColBERT 入门指南

上手 Jina-ColBERT 很简单,因为它是基于 ColBERT 模型优化的,你可以轻松地在现有支持 ColBERT 的平台上使用,比如 Vespa、RAGatouille、fastRAG 和 LangChain 等,只需将原模型名称换成 jina-colbert-v1-en。此外,我们还提供了一个专门的 Colab Notebook, 供大家快速上手。

Notebook: https://colab.research.google.com/drive/1-5WGEYPSBNBg-Z0bGFysyvckFuM8imrg

想要快速看到效果的话,推荐使用 RAGatouille,它做了很好的封装,可以更轻松用 ColBERT 构建 RAG Pipeline。

更多内容请访问 https://huggingface.co/jinaai/jina-colbert-v1-en

展望未来:Jina-ColBERT 的新动向

我们正积极评估 Jina-ColBERT 作为 Reranker 的效果,并计划添加更多使用示例。同时,我们也将努力在更多数据集上进行微调,以进一步提升 Jina-ColBERT 的性能,并优化其存储性能。

本文由 Hugging Face 中文社区内容共建项目提供,稿件由社区成员投稿,经授权发布于 Hugging Face 公众号。文章内容不代表官方立场,文中介绍的产品和服务等均不构成投资建议。了解更多请关注公众号: 

如果你有与开源 AI、Hugging Face 相关的技术和实践分享内容,以及最新的开源 AI 项目发布,希望通过我们分享给更多 AI 从业者和开发者们,请通过下面的链接投稿与我们取得联系:
https://hf.link/tougao

本文分享自微信公众号 - Hugging Face(gh_504339124f0f)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部