[Cartão de modelo] [Tabela de classificação do ViDoRe] [Demonstração] [Postagem no blog]
O Visual Document Retrieval Benchmark (ViDoRe) é introduzido para avaliar o desempenho de sistemas de recuperação de documentos em documentos visualmente ricos em várias tarefas, domínios, idiomas e configurações. Ele foi usado para avaliar o modelo ColPali, um recuperador baseado em VLM que recupera documentos de forma eficiente com base em seu conteúdo visual e consultas textuais usando um mecanismo de interação tardia.
Dica
Se quiser ajustar o ColPali para seu caso de uso específico, você deve verificar o repositório colpali
. Ele contém toda a base de código usada para treinar o modelo apresentado em nosso artigo.
Usamos Python 3.11.6 e PyTorch 2.2.2 para treinar e testar nossos modelos, mas espera-se que a base de código seja compatível com Python >=3.9 e versões recentes do PyTorch.
A base de código eval depende de alguns pacotes Python, que podem ser baixados usando o seguinte comando:
pip install vidore-benchmark
Dica
Por padrão, o pacote vidore-benchmark
já inclui as dependências para os modelos ColVision (por exemplo, ColPali, ColQwen2...).
Para manter um repositório leve, apenas os pacotes essenciais foram instalados. Em particular, você deve especificar as dependências para os modelos específicos não-Transformers que deseja executar (veja a lista em pyproject.toml
). Por exemplo, se você for avaliar o recuperador BGE-M3:
pip install " vidore-benchmark[bge-m3] "
Ou se você quiser avaliar todos os recuperadores disponíveis no mercado:
pip install " vidore-benchmark[all-retrievers] "
A lista de recuperadores disponíveis pode ser encontrada aqui. Leia esta seção para aprender como criar, usar e avaliar seu próprio recuperador.
Você pode avaliar qualquer recuperador disponível no mercado no benchmark ViDoRe. Por exemplo, você pode avaliar o modelo ColPali no benchmark ViDoRe para reproduzir os resultados do nosso artigo.
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--collection-name " vidore/vidore-benchmark-667173f98e70a1c0fa4db00d "
--split test
Nota: Você deverá receber um aviso sobre alguns pesos não inicializados. Este é um problema conhecido no ColPali e fará com que as métricas sejam ligeiramente diferentes daquelas relatadas no artigo. Estamos trabalhando para corrigir esse problema.
Alternativamente, você pode avaliar seu modelo em um único conjunto de dados. Se o seu retriver usar embeddings visuais, você poderá usar qualquer caminho de conjunto de dados da coleção ViDoRe Benchmark, por exemplo:
vidore-benchmark evaluate-retriever
--model-class colpali
--model-name vidore/colpali-v1.2
--dataset-name vidore/docvqa_test_subsampled
--split test
Se você quiser avaliar um recuperador que depende da recuperação de texto puro (sem incorporações visuais), você deve usar os conjuntos de dados do ViDoRe Chunk OCR (linha de base):
vidore-benchmark evaluate-retriever
--model-class bge-m3
--model-name BAAI/bge-m3
--dataset-name vidore/docvqa_test_subsampled_tesseract
--split test
Ambos os scripts irão gerar um arquivo JSON específico em outputs/{model_name_all_metrics.json}
. Siga as instruções no ViDoRe Leaderboard para comparar seu modelo com os demais.
Você pode usar o pool de tokens para reduzir o comprimento dos embeddings de documentos. Na produção, isso reduzirá significativamente o consumo de memória do recuperador, reduzindo assim os custos e aumentando a velocidade. Você pode usar o sinalizador --use-token-pooling
para ativar este recurso:
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/
Para obter mais informações sobre as opções disponíveis, execute:
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 )
Se precisar avaliar seu próprio modelo no benchmark ViDoRe, você pode criar sua própria instância do VisionRetriever
para usá-lo com os scripts de avaliação neste pacote. Você pode encontrar as instruções detalhadas aqui.
Para processar, visualizar e comparar facilmente as métricas de avaliação de vários recuperadores, você pode usar a classe EvalManager
. Suponha que você tenha uma lista de arquivos de métricas JSON gerados anteriormente, por exemplo :
data/metrics/
├── bisiglip.json
└── colpali.json
Os dados são armazenados em eval_manager.data
como um DataFrame de várias colunas com as seguintes colunas. Use os métodos get_df_for_metric
, get_df_for_dataset
e get_df_for_model
para obter o subconjunto de dados de seu interesse.
from vidore_benchmark . evaluation import EvalManager
eval_manager = EvalManager . from_dir ( "data/metrics/" )
df = eval_manager . get_df_for_metric ( "ndcg_at_5" )
ColPali: Recuperação Eficiente de Documentos com Modelos de Linguagem Vision
Autores: Manuel Faysse *, Hugues Sibille *, Tony Wu *, Bilel Omrani, Gautier Viaud, Céline Hudelot, Pierre Colombo (* denota contribuição igual)
@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},
}
Se você deseja reproduzir os resultados do artigo ColPali, leia o arquivo REPRODUCIBILITY.md
para obter mais informações.