[Carte modèle] [Classement ViDoRe] [Démo] [Article de blog]
Le Visual Document Retrieval Benchmark (ViDoRe) est introduit pour évaluer les performances des systèmes de récupération de documents sur des documents visuellement riches pour diverses tâches, domaines, langues et paramètres. Il a été utilisé pour évaluer le modèle ColPali, un outil de récupération alimenté par VLM qui récupère efficacement des documents en fonction de leur contenu visuel et de requêtes textuelles à l'aide d'un mécanisme d'interaction tardive.
Conseil
Si vous souhaitez affiner ColPali pour votre cas d'utilisation spécifique, vous devez consulter le référentiel colpali
. Il contient toute la base de code utilisée pour entraîner le modèle présenté dans notre article.
Nous avons utilisé Python 3.11.6 et PyTorch 2.2.2 pour entraîner et tester nos modèles, mais la base de code devrait être compatible avec Python >=3.9 et les versions récentes de PyTorch.
La base de code eval dépend de quelques packages Python, qui peuvent être téléchargés à l'aide de la commande suivante :
pip install vidore-benchmark
Conseil
Par défaut, le package vidore-benchmark
inclut déjà les dépendances pour les modèles ColVision (par exemple ColPali, ColQwen2...).
Pour conserver un référentiel léger, seuls les packages essentiels ont été installés. En particulier, vous devez spécifier les dépendances pour les modèles spécifiques non-Transformers que vous souhaitez exécuter (voir la liste dans pyproject.toml
). Par exemple, si vous souhaitez évaluer le récupérateur BGE-M3 :
pip install " vidore-benchmark[bge-m3] "
Ou si vous souhaitez évaluer tous les récupérateurs disponibles dans le commerce :
pip install " vidore-benchmark[all-retrievers] "
La liste des récupérateurs disponibles peut être trouvée ici. Lisez cette section pour apprendre à créer, utiliser et évaluer votre propre retriever.
Vous pouvez évaluer n’importe quel récupérateur du commerce sur le benchmark ViDoRe. Par exemple, vous pouvez évaluer le modèle ColPali sur le benchmark ViDoRe pour reproduire les résultats de notre article.
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--collection-name " vidore/vidore-benchmark-667173f98e70a1c0fa4db00d "
--split test
Remarque : Vous devriez recevoir un avertissement concernant certains poids non initialisés. Il s'agit d'un problème connu dans ColPali et les métriques seront légèrement différentes de celles rapportées dans le document. Nous travaillons à résoudre ce problème.
Vous pouvez également évaluer votre modèle sur un seul ensemble de données. Si votre rétriver utilise des intégrations visuelles, vous pouvez utiliser n'importe quel chemin d'ensemble de données de la collection ViDoRe Benchmark, par exemple :
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--dataset-name vidore/docvqa_test_subsampled
--split test
Si vous souhaitez évaluer un outil de récupération qui s'appuie sur la récupération de texte pur (pas d'intégration visuelle), vous devez plutôt utiliser les ensembles de données de ViDoRe Chunk OCR (ligne de base) :
vidore-benchmark evaluate-retriever
--model-class bge-m3
--model-name BAAI/bge-m3
--dataset-name vidore/docvqa_test_subsampled_tesseract
--split test
Les deux scripts généreront un fichier JSON particulier dans outputs/{model_name_all_metrics.json}
. Suivez les instructions du classement ViDoRe pour comparer votre modèle avec les autres.
Vous pouvez utiliser le regroupement de jetons pour réduire la longueur des intégrations de documents. En production, cela réduira considérablement l’empreinte mémoire du retriever, réduisant ainsi les coûts et augmentant la vitesse. Vous pouvez utiliser l'indicateur --use-token-pooling
pour activer cette fonctionnalité :
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/
Pour obtenir plus d'informations sur les options disponibles, exécutez :
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 )
Si vous devez évaluer votre propre modèle sur le benchmark ViDoRe, vous pouvez créer votre propre instance de VisionRetriever
pour l'utiliser avec les scripts d'évaluation de ce package. Vous pouvez trouver les instructions détaillées ici.
Pour traiter, visualiser et comparer facilement les métriques d'évaluation de plusieurs récupérateurs, vous pouvez utiliser la classe EvalManager
. Supposons que vous disposiez d'une liste de fichiers de métriques JSON précédemment générés, par exemple :
data/metrics/
├── bisiglip.json
└── colpali.json
Les données sont stockées dans eval_manager.data
sous forme de DataFrame multi-colonnes avec les colonnes suivantes. Utilisez les méthodes get_df_for_metric
, get_df_for_dataset
et get_df_for_model
pour obtenir le sous-ensemble des données qui vous intéressent. Par exemple :
from vidore_benchmark . evaluation import EvalManager
eval_manager = EvalManager . from_dir ( "data/metrics/" )
df = eval_manager . get_df_for_metric ( "ndcg_at_5" )
ColPali : récupération efficace de documents avec des modèles de langage de vision
Auteurs : Manuel Faysse *, Hugues Sibille *, Tony Wu *, Bilel Omrani, Gautier Viaud, Céline Hudelot, Pierre Colombo (* désigne une contribution égale)
@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},
}
Si vous souhaitez reproduire les résultats de l'article ColPali, veuillez lire le fichier REPRODUCIBILITY.md
pour plus d'informations.