Embora um grande progresso tenha sido feito pelos métodos recentes de compreensão de tabelas baseados em LLM, eles se baseiam fortemente na premissa de que determinadas tabelas devem ser convertidas em uma determinada sequência de texto (como Markdown ou HTML) para servir como entrada do modelo. No entanto, é difícil acessar representações de tabelas textuais de alta qualidade em alguns cenários do mundo real, como documentos digitalizados e capturas de tela de páginas da Web, e as imagens de tabelas são muito mais acessíveis. Portanto, compreender tabelas diretamente usando informações visuais intuitivas é um desafio crucial e urgente para o desenvolvimento de aplicações mais práticas.
Enfrentando o desafio acima, propomos o problema de compreensão de tabelas multimodais, onde o modelo é obrigado a gerar respostas corretas para diferentes solicitações relacionadas à tabela (por exemplo, perguntas) de ponta a ponta com base na imagem da tabela. Da mesma forma, construímos MMTab , o primeiro conjunto de dados de código aberto em grande escala para problemas de compreensão de tabelas multimodais, que pode apoiar tanto o treinamento quanto a avaliação de MLLMs generalistas para a compreensão de tabelas multimodais. Com base no conjunto de dados MMTab curado, desenvolvemos um MLLM tabular versátil denominado Table-LLaVA com um paradigma de treinamento aprimorado em dois estágios de LLaVA v1.5. O Table-LLaVA supera fortes linhas de base MLLM em 17 benchmarks mantidos e 6 benchmarks mantidos, e é ainda competitivo com o poderoso GPT-4V em 14 benchmarks em um subconjunto de amostras de teste. A figura à direita mostra uma comparação intuitiva da Tabela LLaVA 7B e MLLMs existentes em vários benchmarks de compreensão de tabelas multimodais.
Construímos o MMTab com base em 14 conjuntos de dados de tabelas disponíveis publicamente de 8 domínios. Projetamos scripts cuidadosamente para converter tabelas textuais originais nesses conjuntos de dados em imagens de tabela, destacando uma ampla cobertura de estruturas e estilos de tabela, e transformamos todas as amostras específicas de tarefas em amostras multimodais de ajuste de instrução com um formato unificado de <table image, input request, output response>
. O conjunto de dados resultante contém três partes e pode ser baixado do conjunto de dados Hugging Face. Durante a construção do conjunto de dados, foram adotados aumentos de dados em vários níveis (por exemplo, nível de tabela, nível de tarefa) para melhorar ainda mais a diversidade de dados.
Divisão do conjunto de dados | #Imagens de mesa | #amostras |
---|---|---|
MMTab-pré | 97K | 150 mil amostras de reconhecimento de tabela para pré-treinamento |
Instrução MMTab | 82 mil | 232 mil amostras de 14 tarefas baseadas em tabela para ajuste de instruções |
Avaliação MMTab | 23K | 45 mil amostras de 17 benchmarks mantidos e 4K amostras de 7 benchmarks mantidos para avaliação |
Exemplos de conjuntos de dados são mostrados na figura a seguir e mais exemplos são mostrados no Apêndice A do artigo original.
A tabela LLaVA segue a arquitetura LLaVA v1.5, com CLIP-ViT-L-336px como codificador visual (resolução de imagem 336*336), Vicuna-v1.5-7B ou Vicuna-v1.5-13B como LLM base e um MLP de duas camadas como conector da linguagem de visão. Os pontos de verificação do modelo salvos podem ser baixados do seguinte repositório Hugging Face:
Versão | Tamanho | Agendar | Base LLM | Codificador de visão | Camada de projeção | Pontos de verificação |
---|---|---|---|---|---|---|
Tabela LLaVA | 7B | full_finetune-1_época | Vicuna-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-7b |
Tabela LLaVA | 13B | full_finetune-1_época | Vicuna-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-13b |
pretrained_mm_projector da Tabela LLaVA 7B | 5 milhões | full_finetune-1_época | Vicuna-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
pretrained_mm_projector da Tabela LLaVA 13B | 5 milhões | full_finetune-1_época | Vicuna-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
Nota: Os checkpoints Table-LLaVA acima são salvos do repositório LLaVA original, que não é diretamente compatível com os Transformers, ou seja, não pode ser carregado diretamente da forma como LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. Este problema é mencionado nesta edição do github. Tentarei o script de conversão fornecido para tornar os pontos de verificação do Table-LLaVa compatíveis com os Transformers e fazer upload de novos pontos de verificação para um novo hub. Mas, por enquanto, talvez os pontos de verificação só possam ser carregados com o repositório LLaVA desta forma, em vez de serem carregados diretamente do HuggingFace. Desculpe por esse inconveniente!
Usamos a base de código do LLaVA v1.5 para treinamento e inferência de modelo. Assim, o Table LLaVA pode ser utilizado como o modelo LLaVA v1.5 normal e o ambiente pode ser instalado de forma semelhante. Observe que nossa base de código foi baixada em dezembro de 2023 e talvez não seja a mais recente. Consulte o github oficial do LLaVA v1.5 para obter sua atualização mais recente.
git clone https://github.com/SpursGoZmy/Table-LLaVA.git
cd Table-LLaVA
conda create -n table_llava python=3.10 -y
conda activate table_llava
pip install --upgrade pip # enable PEP 660 support
pip install -e .
O treinamento Table LLaVA consiste em dois estágios: (1) Estágio de pré-treinamento: o conector de linguagem de visão (um MLP de duas camadas) é treinado para conectar o codificador de visão pré-treinado congelado (ViT) ao LLM congelado (Vicuna v1.5) ; (2) Estágio de ajuste de instrução: o conector visão-linguagem e o LLM básico são treinados para seguir instruções multimodais.
Os dados de treinamento de cada etapa são mostrados abaixo:
Estágio de treinamento | Descrição dos dados | Tamanho dos dados | Abraçando conjunto de dados de rosto |
---|---|---|---|
Pré-treino | Dados de pré-treinamento LLaVA-1.5 originais de 558K | 558 mil | blip_laion_cc_sbu_558k.json |
Dados de reconhecimento de tabela de 150 mil (MMTab-pre) | 150 mil | MMTab-pre_pretrain_data_llava_format_150K.json | |
Ajuste fino de instruções | Dados de ajuste fino LLaVA-1.5 originais de 665K | 665 mil | llava_v1_5_mix665k.json |
Dados de ajuste de instruções multimodais de 232K de 14 tarefas tabulares (MMTab-instruct) | 232 mil | MMTab-instruct_sft_data_llava_format_232K.json |
Os dados mesclados de pré-treinamento e ajuste fino de instrução no formato de dados LLaVA podem ser encontrados no conjunto de dados MMTab, ou seja, enhanced_llava_pretrain_data_708K.json
e enhanced_llava_sft_data_898K.json
, que pode ser usado diretamente para treinar a Tabela LLaVA.
A Tabela LLaVA foi treinada em 8 GPUs A800 com 80 GB de memória. Usamos um conjunto semelhante de hiperparâmetros como LLaVA v1.5, exceto que aumentamos o comprimento máximo da sequência de 2.048 para 2.560 para acomodar sequências de texto mais longas. Os hiperparâmetros usados no pré-treinamento e no ajuste fino são fornecidos abaixo.
Estágio | Pesos Treinados | Tamanho global do lote | Taxa de aprendizagem | Épocas | Comprimento máximo | Decadência de peso | taxa de aquecimento | Estágio de velocidade profunda |
---|---|---|---|---|---|---|---|---|
Pré-treino | conector de linguagem de visão | 256 | 1e-3 | 1 | 2560 | 0 | 0,03 | ZeRO-2 |
Ajuste fino de instruções | base LLM e conector de linguagem de visão | 128 | 2e-5 | 1 | 2048 | 0 | 0,03 | ZeRO-3 |
images.zip
aqui. Coloque-o em ./LLaVA-Pretrain/images
e descompacte-o.MMTab-instruct_table_images_82K.zip
e MMTab-pre_table_images_part_2_16K.zip
do conjunto de dados MMTab. Coloque-os em ./LLaVA-Pretrain/images
e descompacte-os. Renomeie o diretório IID_train_image
para table_pretrain_part_1
.enhanced_llava_pretrain_data_708K.json
do conjunto de dados MMTab para ./LLaVA-Pretrain
. LLaVA-Pretrain
├── images
│ ├── table_pretrain_part_1
| ├── table_pretrain_part_2
| ├── 00453
| ├── 00019
| ├── ...
| └── 00095
└── enhanced_llava_pretrain_data_708K.json
pretrain_table_llava.sh
. Se você não puder fazer download automaticamente do modelo base Vicuna v1.5 e ViT por meio do HuggingFace, poderá fazer download desses modelos manualmente e definir os parâmetros de linha de comando correspondentes ( model_name_or_path
e vision_tower
) para os caminhos do modelo local. Assim que o pré-treinamento for concluído, o projetor de linguagem visual treinado será salvo no output_dir
especificado../LLaVA-Finetune/images
cujos nomes são coco
, gqa
, ocr_vqa
, textvqa
e vg
, respectivamente. Siga as instruções aqui para baixar imagens desses 5 conjuntos de dados para ajuste fino do LLaVA v1.5. Coloque os arquivos zip nas pastas correspondentes e descompacte-os.MMTab-instruct_table_images_82K.zip
do conjunto de dados MMTab. Coloque-o em ./LLaVA-Finetune/images/table_instructV
e descompacte-o. Renomeie o diretório IID_train_image
resultante para images
.enhanced_llava_sft_data_898K.json
do conjunto de dados MMTab para ./LLaVA-Finetune
. LLaVA-Finetune
├── images
│ ├── coco
| | └── train2017
| ├── gqa
| | └── images
| ├── ocr_vqa
| | └── images
| ├── textvqa
| | └── train_images
| ├── vg
| | ├── VG_100K
| | └── VG_100K_2
| ├── table_instructV
| | └── images
└── enhanced_llava_sft_data_898K.json
continue_sft_table_llava.sh
. Defina o parâmetro pretrain_mm_mlp_adapter
para o caminho do seu projetor de linguagem de visão pré-treinado, como ./pretrained_mm_projector/llava-v1.5-7b-with-table-pretrain/mm_projector.bin
. O modelo llava da tabela treinado será salvo no output_dir
especificado. Os dados de inferência devem ser armazenados no formato jsonl do LLaVA. Cada linha no arquivo de entrada corresponde a uma amostra de entrada, que é uma string JSON (gerada por json.dumps()
) de um ditado Python. O formato de amostra deve ser semelhante a:
{ "question_id" : "TSD_test_item_17" , # item_id
"image" : "TABMWP_24663.jpg" , # corresponding image file
"text" : "This image displays a table. Could you provide me ..." , # input text
"category" : "TABMWP_for_TSD" # {dataset_name}_for_{task_type}, which can be used to separate data of different benchmarks.
}
Para inferência no MMTab-eval, baixe as amostras de teste 49K MMTab-eval no formato jsonl (MMTab-eval_test_data_49K_llava_jsonl_format.jsonl) e seus arquivos de imagem (MMTab-eval_table_images_23K.zip). Em seguida, crie uma pasta chamada ‘LLaVA-Inference’ e organize os dados da seguinte forma:
LLaVA-Inference
├── MMTab-eval_test_data_49K_llava_jsonl_format.jsonl
└── all_test_image
Inferência em multi-GPU: start_multicard_inference.sh
. Você também pode inferir seus próprios dados. Lembre-se de ajustar parâmetros como ' question-file
' (caminho do arquivo de entrada), ' image-folder
' (caminho da pasta de imagens) em table_llava_inference.sh
. Os resultados da inferência ( merge.jsonl
) serão armazenados no caminho do parâmetro ' answers-file
', por exemplo, ./eval_results/answers/MMTab_eval/table-llava-v1.5-7b/merge.jsonl
.
Com o script de inferência oficial, o formato do resultado da inferência em merge.jsonl
deve ser semelhante a:
{ 'question_id' : 'TABMWP_8' , # item_id
'prompt' : 'Problem: n Hannah baked cookies each day ...' , # input_prompt
'text' : 'Find the numbers in the table. n n Saturday: ...' , # model_output
'answer_id' : 'jELcxSPcXHBj3xvHfm5r8T' , # answer_id
'model_id' : 'table-llava-7b' , # model_id
'category' : 'TABMWP_for_TQA'
} # item category
Os scripts de avaliação são armazenados na pasta MMTab-eval_evaluation
. Primeiro, cd MMTab-eval_evaluation
e pip install -r eval_requirements.txt
para instalar os pacotes necessários como 'Sacrebleu' para avaliação. Para tarefa de reconhecimento de tabela, usamos o script de cálculo TEDS do PubTabNet para avaliação. Em seguida, baixe os dados de teste MMTab-eval (MMTab-eval_test_data_49K.json) e as tabelas de teste (MMTab-eval_test_tables_23K.json) e coloque-os na pasta MMTab-eval_evaluation
junto com o resultado de inferência do LLaVA ( merge.jsonl
). Use o notebook MMTab_evaluation.ipynb para avaliação automática.
Para a avaliação no conjunto de testes ToTTo, você precisa organizar a saída do modelo em um arquivo txt e carregá-lo no placar oficial do ToTTo.
LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. Este problema é mencionado nesta edição @misc { zheng2024multimodal ,
title = { Multimodal Table Understanding } ,
author = { Mingyu Zheng and Xinwei Feng and Qingyi Si and Qiaoqiao She and Zheng Lin and Wenbin Jiang and Weiping Wang } ,
year = { 2024 } ,
eprint = { 2406.08100 } ,
archivePrefix = { arXiv } ,
}
}