Aunque los métodos recientes de comprensión de tablas basados en LLM han logrado grandes avances, se basan en gran medida en la premisa de que las tablas dadas deben convertirse en una determinada secuencia de texto (como Markdown o HTML) para que sirvan como entrada del modelo. Sin embargo, es difícil acceder a representaciones de tablas textuales de alta calidad en algunos escenarios del mundo real, como documentos escaneados y capturas de pantalla de páginas web, y las imágenes de tablas son mucho más accesibles. Por lo tanto, cómo comprender directamente las tablas utilizando información visual intuitiva es un desafío crucial y urgente para desarrollar aplicaciones más prácticas.
Frente al desafío anterior, proponemos el problema de comprensión de tablas multimodal, donde se requiere que el modelo genere respuestas correctas a diferentes solicitudes relacionadas con tablas (por ejemplo, preguntas) de un extremo a otro en función de la imagen de la tabla. En consecuencia, construimos MMTab , el primer conjunto de datos a gran escala de código abierto para problemas de comprensión de tablas multimodales, que puede respaldar tanto la capacitación como la evaluación de MLLM generalistas hacia la comprensión de tablas multimodales. Basándonos en el conjunto de datos seleccionado de MMTab, desarrollamos un MLLM tabular versátil llamado Table-LLaVA con un paradigma de entrenamiento mejorado de dos etapas de LLaVA v1.5. Table-LLaVA supera las sólidas líneas de base de MLLM en 17 puntos de referencia mantenidos y 6 puntos de referencia mantenidos, e incluso es competitivo con el potente GPT-4V en 14 puntos de referencia bajo un subconjunto de muestras de prueba. La figura de la derecha muestra una comparación intuitiva de la Tabla LLaVA 7B y los MLLM existentes en varios puntos de referencia de comprensión de tablas multimodales.
Construimos MMTab basado en 14 conjuntos de datos de tablas disponibles públicamente de 8 dominios. Diseñamos cuidadosamente scripts para convertir tablas textuales originales en estos conjuntos de datos en imágenes de tablas que resaltan una amplia cobertura de estructuras y estilos de tablas, y transformamos todas las muestras de tareas específicas en muestras de ajuste de instrucciones multimodales con un formato unificado de <table image, input request, output response>
. El conjunto de datos resultante contiene tres partes y se puede descargar desde Hugging Face Dataset. Durante la construcción del conjunto de datos, se adoptaron aumentos de datos en múltiples niveles (p. ej., nivel de tabla, nivel de tarea) para mejorar aún más la diversidad de datos.
División del conjunto de datos | #Imágenes de mesa | #Muestras |
---|---|---|
MMTab-pre | 97K | 150.000 muestras de reconocimiento de tablas para preentrenamiento |
instrucción MMTab | 82K | 232.000 muestras de 14 tareas basadas en tablas para ajustar instrucciones |
Evaluación MMTab | 23K | 45.000 muestras de 17 puntos de referencia retenidos y 4.000 muestras de 7 puntos de referencia retenidos para evaluación |
En la siguiente figura se muestran ejemplos de conjuntos de datos y en el Apéndice A del artículo original se muestran más ejemplos.
La tabla LLaVA sigue la arquitectura LLaVA v1.5, con CLIP-ViT-L-336px como codificador visual (resolución de imagen 336*336), Vicuna-v1.5-7B o Vicuna-v1.5-13B como LLM base y un MLP de dos capas como conector visión-lenguaje. Los puntos de control del modelo guardados se pueden descargar desde el siguiente repositorio de Hugging Face:
Versión | Tamaño | Cronograma | LLM básico | Codificador de visión | Capa de proyección | Puntos de control |
---|---|---|---|---|---|---|
Mesa LLaVA | 7B | full_finetune-1_epoch | Vicuña-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-7b |
Mesa LLaVA | 13B | full_finetune-1_epoch | Vicuña-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-13b |
pretrained_mm_projector de la Mesa LLaVA 7B | 5M | full_finetune-1_epoch | Vicuña-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
pretrained_mm_projector de la Mesa LLaVA 13B | 5M | full_finetune-1_epoch | Vicuña-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
Nota: Los puntos de control de Table-LLaVA anteriores se guardan desde el repositorio de LLaVA original, que no es directamente compatible con Transformers, es decir, no se puede cargar directamente de la manera como LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. Este problema se menciona en esta edición de github. Probaré el script de conversión proporcionado para hacer que los puntos de control de Table-LLaVa sean compatibles con Transformers y cargar nuevos puntos de control en un nuevo centro. Pero por ahora, tal vez los puntos de control solo se puedan cargar con el repositorio LLaVA como este en lugar de cargarlos directamente desde HuggingFace. ¡Perdón por este inconveniente!
Utilizamos el código base de LLaVA v1.5 para el entrenamiento y la inferencia de modelos. Por lo tanto, Table LLaVA se puede utilizar como el modelo LLaVA v1.5 normal y el entorno se puede instalar de manera similar. Tenga en cuenta que nuestro código base se descarga en diciembre de 2023 y tal vez no sea el más reciente. Consulte el github oficial de LLaVA v1.5 para obtener su última actualización.
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 .
El entrenamiento de Table LLaVA consta de dos etapas: (1) Etapa previa al entrenamiento: el conector de visión-lenguaje (un MLP de dos capas) se entrena para conectar el codificador de visión previamente entrenado (ViT) congelado al LLM congelado (Vicuña v1.5). ; (2) Etapa de ajuste de instrucciones: el conector visión-lenguaje y el LLM base están capacitados para seguir instrucciones multimodales.
Los datos de entrenamiento de cada etapa se muestran a continuación:
Etapa de entrenamiento | Descripción de datos | Tamaño de datos | Conjunto de datos de cara abrazada |
---|---|---|---|
Pre-entrenamiento | 558K datos de preentrenamiento LLaVA-1.5 originales | 558K | blip_laion_cc_sbu_558k.json |
Datos de reconocimiento de tabla de 150.000 (MMTab-pre) | 150K | MMTab-pre_pretrain_data_llava_format_150K.json | |
Ajuste de instrucciones | 665K datos de ajuste fino originales del LLaVA-1.5 | 665K | llama_v1_5_mix665k.json |
232.000 datos de ajuste de instrucciones multimodales de 14 tareas tabulares (instrucciones MMTab) | 232K | MMTab-instruct_sft_data_llava_format_232K.json |
Los datos combinados de preentrenamiento y ajuste de instrucciones en el formato de datos LLaVA se pueden encontrar en el conjunto de datos MMTab, es decir, enhanced_llava_pretrain_data_708K.json
y enhanced_llava_sft_data_898K.json
, que se pueden usar directamente para entrenar la tabla LLaVA.
La tabla LLaVA se entrenó en 8 GPU A800 con 80 GB de memoria. Usamos un conjunto de hiperparámetros similar al de LLaVA v1.5, excepto que aumentamos la longitud máxima de la secuencia de 2048 a 2560 para acomodar secuencias de texto más largas. Los hiperparámetros utilizados en el preentrenamiento y el ajuste se proporcionan a continuación.
Escenario | Pesos entrenados | Tamaño de lote global | Tasa de aprendizaje | Épocas | Longitud máxima | Caída de peso | relación de calentamiento | Etapa de velocidad profunda |
---|---|---|---|---|---|---|---|---|
Pre-entrenamiento | conector visión-lenguaje | 256 | 1e-3 | 1 | 2560 | 0 | 0,03 | Cero-2 |
Ajuste de instrucciones | LLM base y conector visión-lenguaje | 128 | 2e-5 | 1 | 2048 | 0 | 0,03 | Cero-3 |
images.zip
desde aquí. Ponlo debajo de ./LLaVA-Pretrain/images
y descomprímelo.MMTab-instruct_table_images_82K.zip
y MMTab-pre_table_images_part_2_16K.zip
del conjunto de datos de MMTab. Colóquelos en ./LLaVA-Pretrain/images
y descomprímalos. Cambie el nombre del directorio IID_train_image
a table_pretrain_part_1
.enhanced_llava_pretrain_data_708K.json
del conjunto de datos MMTab a ./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
. Si no puede descargar automáticamente el modelo base Vicuña v1.5 y ViT a través de HuggingFace, puede descargar estos modelos manualmente y configurar los parámetros de línea de comandos correspondientes ( model_name_or_path
y vision_tower
) en las rutas del modelo local. Una vez finalizada la capacitación previa, el proyector de lenguaje visual entrenado se guardará en el output_dir
especificado../LLaVA-Finetune/images
cuyos nombres sean coco
, gqa
, ocr_vqa
, textvqa
y vg
, respectivamente. Siga las instrucciones desde aquí para descargar imágenes de estos 5 conjuntos de datos para ajustar LLaVA v1.5. Coloque los archivos zip en las carpetas correspondientes y descomprímalos.MMTab-instruct_table_images_82K.zip
del conjunto de datos de MMTab. Colóquelo en ./LLaVA-Finetune/images/table_instructV
y descomprímalo. Cambie el nombre del directorio IID_train_image
resultante a images
.enhanced_llava_sft_data_898K.json
del conjunto de datos MMTab a ./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
. Establezca el parámetro pretrain_mm_mlp_adapter
en la ruta de su proyector de lenguaje visual previamente entrenado, como ./pretrained_mm_projector/llava-v1.5-7b-with-table-pretrain/mm_projector.bin
. El modelo de llama de tabla entrenada se guardará en el output_dir
especificado. Los datos de inferencia deben almacenarse en el formato jsonl de LLaVA. Cada línea del archivo de entrada corresponde a una muestra de entrada, que es una cadena JSON (generada por json.dumps()
) de un dictado de Python. El formato de muestra debería verse así:
{ "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 realizar inferencias sobre MMTab-eval, descargue las muestras de prueba de 49K MMTab-eval en formato jsonl (MMTab-eval_test_data_49K_llava_jsonl_format.jsonl) y sus archivos de imagen (MMTab-eval_table_images_23K.zip). Luego crea una carpeta llamada 'LLaVA-Inference' y organiza los datos de la siguiente manera:
LLaVA-Inference
├── MMTab-eval_test_data_49K_llava_jsonl_format.jsonl
└── all_test_image
Inferencia sobre múltiples GPU: start_multicard_inference.sh
. También puedes hacer inferencias sobre tus propios datos. Recuerde ajustar parámetros como ' question-file
' (ruta del archivo de entrada), ' image-folder
' (ruta de la carpeta de imágenes) en table_llava_inference.sh
. Los resultados de la inferencia ( merge.jsonl
) se almacenarán en la ruta del parámetro ' answers-file
', por ejemplo, ./eval_results/answers/MMTab_eval/table-llava-v1.5-7b/merge.jsonl
.
Con el script de inferencia oficial, el formato del resultado de la inferencia en merge.jsonl
debería verse así:
{ '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
Los scripts de evaluación se almacenan en la carpeta MMTab-eval_evaluation
. Primero, cd MMTab-eval_evaluation
y pip install -r eval_requirements.txt
para instalar los paquetes necesarios como 'Sacrebleu' para la evaluación. Para la tarea de reconocimiento de tablas, utilizamos el script de cálculo TEDS de PubTabNet para la evaluación. Luego, descargue los datos de prueba de MMTab-eval (MMTab-eval_test_data_49K.json) y las tablas de prueba (MMTab-eval_test_tables_23K.json) y colóquelos en la carpeta MMTab-eval_evaluation
junto con el resultado de la inferencia de LLaVA ( merge.jsonl
). Utilice el cuaderno MMTab_evaluación.ipynb para la evaluación automática.
Para la evaluación en el conjunto de pruebas de ToTTo, debe organizar el resultado del modelo en un archivo txt y cargarlo en la tabla de clasificación oficial de ToTTo.
LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. Este problema se menciona en este número. @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 } ,
}
}