[模型卡] [ViDoRe 排行榜] [演示] [博客文章]
引入视觉文档检索基准 (ViDoRe) 来评估文档检索系统对跨各种任务、领域、语言和设置的视觉丰富文档的性能。它用于评估 ColPali 模型,这是一种由 VLM 驱动的检索器,可以使用后期交互机制根据视觉内容和文本查询高效地检索文档。
提示
如果您想针对您的特定用例微调 ColPali,您应该检查colpali
存储库。它包含用于训练我们论文中提出的模型的整个代码库。
我们使用 Python 3.11.6 和 PyTorch 2.2.2 来训练和测试我们的模型,但代码库预计与 Python >=3.9 和最新的 PyTorch 版本兼容。
eval 代码库依赖于一些 Python 包,可以使用以下命令下载:
pip install vidore-benchmark
提示
默认情况下, vidore-benchmark
包已经包含 ColVision 模型的依赖项(例如 ColPali、ColQwen2...)。
为了保持轻量级存储库,仅安装了必要的软件包。特别是,您必须指定要运行的特定非 Transformers 模型的依赖项(请参阅pyproject.toml
中的列表)。例如,如果您要评估 BGE-M3 检索器:
pip install " vidore-benchmark[bge-m3] "
或者,如果您想评估所有现成的检索器:
pip install " vidore-benchmark[all-retrievers] "
可以在此处找到可用检索器的列表。阅读本节,了解如何创建、使用和评估您自己的检索器。
您可以在 ViDoRe 基准测试上评估任何现成的检索器。例如,您可以在 ViDoRe 基准上评估 ColPali 模型,以重现我们论文中的结果。
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--collection-name " vidore/vidore-benchmark-667173f98e70a1c0fa4db00d "
--split test
注意:您应该收到有关某些未初始化权重的警告。这是 ColPali 中的一个已知问题,会导致指标与论文中报告的指标略有不同。我们正在努力解决这个问题。
或者,您可以在单个数据集上评估您的模型。如果您的检索器使用视觉嵌入,您可以使用 ViDoRe Benchmark 集合中的任何数据集路径,例如:
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--dataset-name vidore/docvqa_test_subsampled
--split test
如果您想评估依赖于纯文本检索(无视觉嵌入)的检索器,则应使用 ViDoRe Chunk OCR(基线)中的数据集:
vidore-benchmark evaluate-retriever
--model-class bge-m3
--model-name BAAI/bge-m3
--dataset-name vidore/docvqa_test_subsampled_tesseract
--split test
这两个脚本都会在outputs/{model_name_all_metrics.json}
中生成一个特定的JSON 文件。按照 ViDoRe 排行榜上的说明将您的模型与其他模型进行比较。
您可以使用令牌池来减少文档嵌入的长度。在生产中,这将显着减少检索器的内存占用,从而降低成本并提高速度。您可以使用--use-token-pooling
标志来启用此功能:
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--dataset-name vidore/docvqa_test_subsampled
--split test
--use-token-pooling
--pool-factor 3
vidore-benchmark retrieve-on-dataset
--model-class colpali
--model-name vidore/colpali-v1.2
--query " Which hour of the day had the highest overall electricity generation in 2019? "
--k 5
--dataset-name vidore/syntheticDocQA_energy_test
--split test
vidore-benchmark retriever_on_pdfs
--model-class siglip
--model-name google/siglip-so400m-patch14-384
--query " Which hour of the day had the highest overall electricity generation in 2019? "
--k 5
--data-dirpath data/my_folder_with_pdf_documents/
要获取有关可用选项的更多信息,请运行:
vidore-benchmark --help
from datasets import load_dataset
from dotenv import load_dotenv
from vidore_benchmark . evaluation import evaluate_dataset
from vidore_benchmark . retrievers . jina_clip_retriever import JinaClipRetriever
load_dotenv ( override = True )
def main ():
"""
Example script for a Python usage of the Vidore Benchmark.
"""
my_retriever = JinaClipRetriever ( "jinaai/jina-clip-v1" )
dataset = load_dataset ( "vidore/syntheticDocQA_dummy" , split = "test" )
metrics = evaluate_dataset ( my_retriever , dataset , batch_query = 4 , batch_passage = 4 )
print ( metrics )
如果您需要在 ViDoRe 基准测试上评估您自己的模型,您可以创建您自己的VisionRetriever
实例,以将其与此包中的评估脚本一起使用。您可以在此处找到详细说明。
为了轻松处理、可视化和比较多个检索器的评估指标,您可以使用EvalManager
类。假设您有之前生成的 JSON 指标文件的列表,例如:
data/metrics/
├── bisiglip.json
└── colpali.json
数据作为具有以下列的多列 DataFrame 存储在eval_manager.data
中。使用get_df_for_metric
、 get_df_for_dataset
和get_df_for_model
方法获取您感兴趣的数据子集。例如:
from vidore_benchmark . evaluation import EvalManager
eval_manager = EvalManager . from_dir ( "data/metrics/" )
df = eval_manager . get_df_for_metric ( "ndcg_at_5" )
ColPali:利用视觉语言模型进行高效文档检索
作者: Manuel Faysse *、 Hugues Sibille *、 Tony Wu *、Bilel Omrani、Gautier Viaud、Céline Hudelot、Pierre Colombo(* 表示同等贡献)
@misc{faysse2024colpaliefficientdocumentretrieval,
title={ColPali: Efficient Document Retrieval with Vision Language Models},
author={Manuel Faysse and Hugues Sibille and Tony Wu and Bilel Omrani and Gautier Viaud and Céline Hudelot and Pierre Colombo},
year={2024},
eprint={2407.01449},
archivePrefix={arXiv},
primaryClass={cs.IR},
url={https://arxiv.org/abs/2407.01449},
}
如果您想重现 ColPali 论文的结果,请阅读REPRODUCIBILITY.md
文件以获取更多信息。