项目介绍:jina-colbert-v1-en
项目背景
jina-colbert-v1-en 是一款由 Jina AI 训练的 ColBERT 风格模型,它与传统的 ColBERT 模型相比,基于 JinaBERT 实现,可以支持长达 8k 的上下文长度,并且提供快速且精准的检索功能。该模型在 MSMARCO 文本段排名数据集上训练,与 ColBERTv2 的训练过程类似,不同之处在于其以 jina-bert-v2-base-en
作为基础架构,而非常用的 bert-base-uncased
。
使用方法
安装
要使用这个模型,用户需要安装最新版本的 ColBERT 库:
pip install git+https://github.com/stanford-futuredata/ColBERT.git torch
conda install -c conda-forge faiss-gpu # 使用 conda 安装最新版本的 faiss
索引
以下是进行索引的基本代码示例:
from colbert import Indexer
from colbert.infra import Run, RunConfig, ColBERTConfig
n_gpu: int = 1
experiment: str = ""
index_name: str = ""
if __name__ == "__main__":
with Run().context(RunConfig(nranks=n_gpu, experiment=experiment)):
config = ColBERTConfig(doc_maxlen=8192)
indexer = Indexer(
checkpoint="jinaai/jina-colbert-v1-en",
config=config,
)
documents = [
"ColBERT 是一种高效且有效的文本段检索模型。",
"Jina-ColBERT 是基于 JinaBERT 的 ColBERT 风格模型,可以支持长达 8k 的上下文长度。",
# 更多文档
]
indexer.index(name=index_name, collection=documents)
搜索
进行搜索的基本代码示例:
from colbert import Searcher
from colbert.infra import Run, RunConfig, ColBERTConfig
n_gpu: int = 0
experiment: str = ""
index_name: str = ""
k: int = 10
if __name__ == "__main__":
with Run().context(RunConfig(nranks=n_gpu, experiment=experiment)):
config = ColBERTConfig(query_maxlen=128)
searcher = Searcher(index=index_name, config=config)
query = "如何使用 ColBERT 索引长文档?"
results = searcher.search(query, k=k)
评估结果
jina-colbert-v1-en 在多个基准测试中与 ColBERTv2 展示了可比较的检索性能,尤其是在文档上下文更长的数据集上优于 ColBERTv2。
域内基准测试
在 MSMARCO 文本段排名数据集上的评估结果如下:
模型 | MRR@10 | Recall@50 | Recall@1k |
---|---|---|---|
ColBERTv2 | 39.7 | 86.8 | 97.6 |
Jina-ColBERT-v1 | 39.0 | 85.6 | 96.2 |
长上下文数据集
在长上下文数据集上的评估结果显示,jina-colbert-v1-en 在 8k 的上下文长度下表现优异:
模型 | 使用的上下文长度 | 模型最大上下文长度 | 平均 NDCG@10 |
---|---|---|---|
ColBERTv2 | 512 | 512 | 74.3 |
Jina-ColBERT-v1 (截断) | 512* | 8192 | 75.5 |
Jina-ColBERT-v1 | 8192 | 8192 | 83.7 |
* 表示为文档上下文长度截断为 512。查询的上下文长度均为 512。
未来计划
Jina AI 计划通过进一步在更多的数据集上进行微调以提升 jina-colbert-v1-en 的性能。此外,团队还提供多种嵌入模型供用户选择,如 jina-embeddings-v2-base-en
,涵盖多种语言和语种。
联系方式
用户可以加入 Jina 的 Discord 社区 以与其他社区成员交流想法和意见。