RAG 领域的新宠:为什么 AI 圈都在谈论 Jina ColBERT?
发布时间:2024年06月06日
在 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-v2 是个不错的选择。
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 的性能,并优化其存储性能。
出自:https://mp.weixin.qq.com/s/xt5-tzTLT5G5YpBAvRivZA
通过AI驱动的故事和个性化练习吸引学生并提高阅读流畅度。