[Modellkarte] [ViDoRe-Bestenliste] [Demo] [Blog-Beitrag]
Der Visual Document Retrieval Benchmark (ViDoRe) wird eingeführt, um die Leistung von Dokumentenabrufsystemen für visuell ansprechende Dokumente über verschiedene Aufgaben, Domänen, Sprachen und Einstellungen hinweg zu bewerten. Es wurde verwendet, um das ColPali-Modell zu evaluieren, einen VLM-basierten Retriever, der Dokumente basierend auf ihrem visuellen Inhalt und Textabfragen mithilfe eines Late-Interaction-Mechanismus effizient abruft.
Tipp
Wenn Sie ColPali für Ihren spezifischen Anwendungsfall optimieren möchten, sollten Sie das colpali
Repository überprüfen. Es enthält die gesamte Codebasis, die zum Trainieren des in unserem Artikel vorgestellten Modells verwendet wird.
Wir haben Python 3.11.6 und PyTorch 2.2.2 zum Trainieren und Testen unserer Modelle verwendet, aber die Codebasis wird voraussichtlich mit Python >=3.9 und neueren PyTorch-Versionen kompatibel sein.
Die Eval-Codebasis hängt von einigen Python-Paketen ab, die mit dem folgenden Befehl heruntergeladen werden können:
pip install vidore-benchmark
Tipp
Standardmäßig enthält das Paket vidore-benchmark
bereits die Abhängigkeiten für die ColVision-Modelle (z. B. ColPali, ColQwen2...).
Um ein schlankes Repository beizubehalten, wurden nur die wesentlichen Pakete installiert. Insbesondere müssen Sie die Abhängigkeiten für die spezifischen Nicht-Transformers-Modelle angeben, die Sie ausführen möchten (siehe Liste in pyproject.toml
). Wenn Sie beispielsweise den BGE-M3-Retriever evaluieren möchten:
pip install " vidore-benchmark[bge-m3] "
Oder wenn Sie alle handelsüblichen Retriever bewerten möchten:
pip install " vidore-benchmark[all-retrievers] "
Die Liste der verfügbaren Retriever finden Sie hier. Lesen Sie diesen Abschnitt, um zu erfahren, wie Sie Ihren eigenen Retriever erstellen, verwenden und bewerten.
Sie können jeden handelsüblichen Retriever im ViDoRe-Benchmark bewerten. Sie können beispielsweise das ColPali-Modell anhand des ViDoRe-Benchmarks bewerten, um die Ergebnisse unserer Arbeit zu reproduzieren.
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--collection-name " vidore/vidore-benchmark-667173f98e70a1c0fa4db00d "
--split test
Hinweis: Sie sollten eine Warnung zu einigen nicht initialisierten Gewichtungen erhalten. Dies ist ein bekanntes Problem in ColPali und führt dazu, dass die Messwerte geringfügig von den im Dokument genannten abweichen. Wir arbeiten daran, dieses Problem zu beheben.
Alternativ können Sie Ihr Modell anhand eines einzelnen Datensatzes bewerten. Wenn Ihr Retriver visuelle Einbettungen verwendet, können Sie einen beliebigen Datensatzpfad aus der ViDoRe Benchmark-Sammlung verwenden, z. B.:
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--dataset-name vidore/docvqa_test_subsampled
--split test
Wenn Sie einen Retriever evaluieren möchten, der auf reinem Textabruf (keine visuellen Einbettungen) basiert, sollten Sie stattdessen die Datensätze aus der ViDoRe Chunk OCR (Basislinie) verwenden:
vidore-benchmark evaluate-retriever
--model-class bge-m3
--model-name BAAI/bge-m3
--dataset-name vidore/docvqa_test_subsampled_tesseract
--split test
Beide Skripte generieren eine bestimmte JSON-Datei in outputs/{model_name_all_metrics.json}
. Befolgen Sie die Anweisungen auf der ViDoRe-Bestenliste, um Ihr Modell mit den anderen zu vergleichen.
Sie können Token-Pooling verwenden, um die Länge der Dokumenteinbettungen zu reduzieren. In der Produktion wird dadurch der Speicherbedarf des Retrievers deutlich reduziert, wodurch die Kosten gesenkt und die Geschwindigkeit erhöht werden. Sie können das Flag --use-token-pooling
verwenden, um diese Funktion zu aktivieren:
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/
Um weitere Informationen zu den verfügbaren Optionen zu erhalten, führen Sie Folgendes aus:
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 )
Wenn Sie Ihr eigenes Modell anhand des ViDoRe-Benchmarks bewerten müssen, können Sie Ihre eigene Instanz von VisionRetriever
erstellen, um sie mit den Bewertungsskripten in diesem Paket zu verwenden. Die detaillierte Anleitung finden Sie hier.
Um die Bewertungsmetriken mehrerer Retriever einfach zu verarbeiten, zu visualisieren und zu vergleichen, können Sie die EvalManager
Klasse verwenden. Angenommen, Sie verfügen über eine Liste zuvor generierter JSON-Metrikdateien, z. B .:
data/metrics/
├── bisiglip.json
└── colpali.json
Die Daten werden in eval_manager.data
als mehrspaltiger DataFrame mit den folgenden Spalten gespeichert. Verwenden Sie die Methoden get_df_for_metric
, get_df_for_dataset
und get_df_for_model
, um die Teilmenge der Daten abzurufen, an denen Sie interessiert sind. Zum Beispiel:
from vidore_benchmark . evaluation import EvalManager
eval_manager = EvalManager . from_dir ( "data/metrics/" )
df = eval_manager . get_df_for_metric ( "ndcg_at_5" )
ColPali: Effizienter Dokumentenabruf mit Vision-Language-Modellen
Autoren: Manuel Faysse *, Hugues Sibille *, Tony Wu *, Bilel Omrani, Gautier Viaud, Céline Hudelot, Pierre Colombo (* bezeichnet den gleichen Beitrag)
@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},
}
Wenn Sie die Ergebnisse des ColPali-Artikels reproduzieren möchten, lesen Sie bitte die Datei REPRODUCIBILITY.md
für weitere Informationen.