Obwohl die jüngsten LLM-basierten Tabellenverständnismethoden große Fortschritte gemacht haben, basieren sie stark auf der Prämisse, dass bestimmte Tabellen in eine bestimmte Textsequenz (z. B. Markdown oder HTML) konvertiert werden müssen, um als Modelleingabe zu dienen. Allerdings ist es in einigen realen Szenarien wie gescannten Dokumenten und Webseiten-Screenshots schwierig, auf qualitativ hochwertige Texttabellendarstellungen zuzugreifen, und Tabellenbilder sind viel leichter zugänglich. Daher ist das direkte Verständnis von Tabellen mithilfe intuitiver visueller Informationen eine entscheidende und dringende Herausforderung für die Entwicklung praktischerer Anwendungen.
Angesichts der oben genannten Herausforderung schlagen wir das Problem des multimodalen Tabellenverständnisses vor, bei dem das Modell auf der Grundlage des Tabellenbilds durchgängig korrekte Antworten auf verschiedene tabellenbezogene Anfragen (z. B. Fragen) generieren muss. Dementsprechend erstellen wir MMTab , den ersten groß angelegten Open-Source-Datensatz für multimodale Tabellenverständnisprobleme, der sowohl das Training als auch die Bewertung generalistischer MLLMs in Richtung multimodales Tabellenverständnis unterstützen kann. Basierend auf dem kuratierten MMTab-Datensatz entwickeln wir ein vielseitiges tabellarisches MLLM namens Table-LLaVA mit einem erweiterten zweistufigen Trainingsparadigma von LLaVA v1.5. Table-LLaVA übertrifft starke MLLM-Baselines bei 17 gehaltenen und 6 gehaltenen Benchmarks und ist sogar mit dem leistungsstarken GPT-4V bei 14 Benchmarks unter einer Teilmenge von Testproben konkurrenzfähig. Die rechte Abbildung zeigt einen intuitiven Vergleich von Table LLaVA 7B und bestehenden MLLMs anhand verschiedener multimodaler Benchmarks zum Tabellenverständnis.
Wir haben MMTab auf der Grundlage von 14 öffentlich verfügbaren Tabellendatensätzen von 8 Domänen erstellt. Wir entwerfen sorgfältig Skripte, um ursprüngliche Texttabellen in diesen Datensätzen in Tabellenbilder umzuwandeln, die eine breite Abdeckung von Tabellenstrukturen und -stilen hervorheben, und wandeln alle aufgabenspezifischen Beispiele in multimodale Beispiele zur Befehlsoptimierung mit einem einheitlichen Format von <table image, input request, output response>
. Der resultierende Datensatz besteht aus drei Teilen und kann vom Hugging Face Dataset heruntergeladen werden. Während der Datensatzkonstruktion wurden Datenerweiterungen auf mehreren Ebenen (z. B. Tabellenebene, Aufgabenebene) übernommen, um die Datenvielfalt weiter zu verbessern.
Datensatzaufteilung | #Tabellenbilder | #Proben |
---|---|---|
MMTab-pre | 97K | 150.000 Tabellenerkennungsbeispiele für das Vortraining |
MMTab-Anweisung | 82K | 232.000 Beispiele von 14 tabellenbasierten Aufgaben zur Unterrichtsoptimierung |
MMTab-eval | 23K | 45.000 Proben von 17 zurückgehaltenen Benchmarks und 4.000 Proben von 7 zurückgehaltenen Benchmarks zur Bewertung |
Beispiele für Datensätze sind in der folgenden Abbildung dargestellt. Weitere Beispiele finden Sie im Anhang A des Originalpapiers.
Tabelle LLaVA folgt der LLaVA v1.5-Architektur mit CLIP-ViT-L-336px als visuellem Encoder (336 x 336 Bildauflösung), Vicuna-v1.5-7B oder Vicuna-v1.5-13B als Basis-LLM und ein zweischichtiges MLP als Vision-Sprach-Verbindungsstück. Die gespeicherten Modellprüfpunkte können aus dem folgenden Hugging Face Repository heruntergeladen werden:
Version | Größe | Zeitplan | Basis-LLM | Vision-Encoder | Projektionsebene | Kontrollpunkte |
---|---|---|---|---|---|---|
Tisch LLaVA | 7B | full_finetune-1_epoch | Vicuna-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-7b |
Tisch LLaVA | 13B | full_finetune-1_epoch | Vicuna-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-13b |
pretrained_mm_projector der Tabelle LLaVA 7B | 5M | full_finetune-1_epoch | Vicuna-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
pretrained_mm_projector der Tabelle LLaVA 13B | 5M | full_finetune-1_epoch | Vicuna-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
Hinweis: Die oben genannten Table-LLaVA-Prüfpunkte werden aus dem ursprünglichen LLaVA-Repository gespeichert, das nicht direkt mit den Transformers kompatibel ist, d. h., es kann nicht direkt wie LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. Dieses Problem wird in dieser Github-Ausgabe erwähnt. Ich werde das bereitgestellte Konvertierungsskript ausprobieren, um Table-LLaVa-Prüfpunkte mit Transformers kompatibel zu machen und neue Prüfpunkte auf einen neuen Hub hochzuladen. Aber im Moment können die Checkpoints vielleicht nur mit dem LLaVA-Repository auf diese Weise geladen werden, anstatt direkt von HuggingFace. Entschuldigung für diese Unannehmlichkeiten!
Wir verwenden die Codebasis von LLaVA v1.5 für Modelltraining und Inferenz. Somit kann Table LLaVA als normales LLaVA v1.5-Modell verwendet und die Umgebung auf ähnliche Weise installiert werden. Beachten Sie, dass unsere Codebasis im Dezember 2023 heruntergeladen wird und möglicherweise nicht die neueste ist. Das neueste Update finden Sie im offiziellen LLaVA v1.5 Github.
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 .
Das LLaVA-Training in Tabelle besteht aus zwei Phasen: (1) Vortrainingsphase: Der Vision-Language-Connector (ein zweischichtiges MLP) wird trainiert, um den eingefrorenen vortrainierten Vision-Encoder (ViT) mit dem eingefrorenen LLM (Vicuna v1.5) zu verbinden. ; (2) Instruktionsabstimmungsphase: Der Vision-Language-Connector und das Basis-LLM werden darauf trainiert, multimodalen Anweisungen zu folgen.
Die Trainingsdaten jeder Stufe sind unten aufgeführt:
Trainingsphase | Datenbeschreibung | Datengröße | Umarmender Gesichtsdatensatz |
---|---|---|---|
Vorschulung | 558.000 Original-LLaVA-1.5-Vortrainingsdaten | 558K | blip_laion_cc_sbu_558k.json |
150.000 Tabellenerkennungsdaten (MMTab-pre) | 150.000 | MMTab-pre_pretrain_data_llava_format_150K.json | |
Anleitung Feinabstimmung | 665K originale LLaVA-1.5-Feinabstimmungsdaten | 665K | llava_v1_5_mix665k.json |
232K multimodale Befehlsoptimierungsdaten von 14 tabellarischen Aufgaben (MMTab-instruct) | 232K | MMTab-instruct_sft_data_llava_format_232K.json |
Die zusammengeführten Vortrainings- enhanced_llava_pretrain_data_708K.json
Befehlsfeinabstimmungsdaten im enhanced_llava_sft_data_898K.json
-Datenformat finden Sie im MMTab-Datensatz, d.
Table LLaVA wurde auf 8 A800-GPUs mit 80 GB Speicher trainiert. Wir verwenden einen ähnlichen Satz von Hyperparametern wie LLaVA v1.5, außer dass wir die maximale Sequenzlänge von 2048 auf 2560 erhöht haben, um längere Textsequenzen zu berücksichtigen. Die beim Vortraining und Feintuning verwendeten Hyperparameter sind unten aufgeführt.
Bühne | Trainierte Gewichte | Globale Batchgröße | Lernrate | Epochen | Maximale Länge | Gewichtsverlust | Aufwärmverhältnis | Deepspeed-Bühne |
---|---|---|---|---|---|---|---|---|
Vorschulung | Verbindung zwischen Vision und Sprache | 256 | 1e-3 | 1 | 2560 | 0 | 0,03 | ZeRO-2 |
Anleitung Feinabstimmung | Basis-LLM und Vision-Language-Connector | 128 | 2e-5 | 1 | 2048 | 0 | 0,03 | ZeRO-3 |
images.zip
. Legen Sie es unter ./LLaVA-Pretrain/images
ab und entpacken Sie es.MMTab-instruct_table_images_82K.zip
und MMTab-pre_table_images_part_2_16K.zip
aus dem MMTab-Datensatz herunter. Legen Sie sie unter ./LLaVA-Pretrain/images
ab und entpacken Sie sie. Benennen Sie das IID_train_image
Verzeichnis in table_pretrain_part_1
um.enhanced_llava_pretrain_data_708K.json
vom MMTab-Datensatz in ./LLaVA-Pretrain
herunter. LLaVA-Pretrain
├── images
│ ├── table_pretrain_part_1
| ├── table_pretrain_part_2
| ├── 00453
| ├── 00019
| ├── ...
| └── 00095
└── enhanced_llava_pretrain_data_708K.json
pretrain_table_llava.sh
. Wenn Sie das Basismodell von Vicuna v1.5 und ViT nicht automatisch über HuggingFace herunterladen können, können Sie diese Modelle manuell herunterladen und entsprechende Befehlszeilenparameter ( model_name_or_path
und vision_tower
) auf die lokalen Modellpfade festlegen. Sobald das Vortraining abgeschlossen ist, wird der trainierte Vision-Language-Projektor im angegebenen output_dir
gespeichert../LLaVA-Finetune/images
5 neue Ordner mit den Namen coco
, gqa
, ocr_vqa
, textvqa
und vg
. Befolgen Sie die Anweisungen hier, um Bilder aus diesen 5 Datensätzen für die Feinabstimmung von LLaVA v1.5 herunterzuladen. Legen Sie die ZIP-Dateien in die entsprechenden Ordner und entpacken Sie sie.MMTab-instruct_table_images_82K.zip
aus dem MMTab-Datensatz herunter. Legen Sie es unter ./LLaVA-Finetune/images/table_instructV
ab und entpacken Sie es. Benennen Sie das resultierende IID_train_image
Verzeichnis in images
um.enhanced_llava_sft_data_898K.json
vom MMTab-Datensatz in ./LLaVA-Finetune
herunter. 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
. Legen Sie den Parameter pretrain_mm_mlp_adapter
auf den Pfad Ihres vorab trainierten Vision-Language-Projektors fest, z. B. ./pretrained_mm_projector/llava-v1.5-7b-with-table-pretrain/mm_projector.bin
. Das trainierte Tabellen-Lava-Modell wird im angegebenen output_dir
gespeichert. Die Inferenzdaten sollten im JSONL-Format der LLaVA gespeichert werden. Jede Zeile in der Eingabedatei entspricht einem Eingabebeispiel, bei dem es sich um einen JSON-String (generiert von json.dumps()
) eines Python-Dikts handelt. Das Beispielformat sollte wie folgt aussehen:
{ "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.
}
Um Rückschlüsse auf die MMTab-eval zu ziehen, laden Sie die 49K MMTab-eval-Testbeispiele im JSONL-Format (MMTab-eval_test_data_49K_llava_jsonl_format.jsonl) und die dazugehörigen Bilddateien (MMTab-eval_table_images_23K.zip) herunter. Erstellen Sie dann einen Ordner mit dem Namen „LLaVA-Inference“ und organisieren Sie die Daten wie folgt:
LLaVA-Inference
├── MMTab-eval_test_data_49K_llava_jsonl_format.jsonl
└── all_test_image
Rückschluss auf Multi-GPU: start_multicard_inference.sh
. Sie können auch auf Ihre eigenen Daten schließen. Denken Sie daran, Parameter wie „ question-file
“ (Pfad der Eingabedatei) und „ image-folder
“ (Pfad des Bildordners) in der table_llava_inference.sh
anzupassen. Die Inferenzergebnisse ( merge.jsonl
) werden im Pfad des Parameters „ answers-file
“ gespeichert, z. B. ./eval_results/answers/MMTab_eval/table-llava-v1.5-7b/merge.jsonl
.
Mit dem offiziellen Inferenzskript sollte das Inferenzergebnisformat in merge.jsonl
wie folgt aussehen:
{ '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
Die Auswertungsskripte werden im Ordner MMTab-eval_evaluation
gespeichert. Zuerst cd MMTab-eval_evaluation
und pip install -r eval_requirements.txt
um notwendige Pakete wie „Sacrebleu“ für die Evaluierung zu installieren. Für die Tabellenerkennungsaufgabe verwenden wir zur Auswertung das TEDS-Berechnungsskript von PubTabNet. Laden Sie dann die MMTab-eval-Testdaten (MMTab-eval_test_data_49K.json) und Testtabellen (MMTab-eval_test_tables_23K.json) herunter und legen Sie sie zusammen mit dem Inferenzergebnis der LLaVA ( merge.jsonl
) im Ordner MMTab-eval_evaluation
ab. Verwenden Sie das Notebook MMTab_evaluation.ipynb für die automatische Auswertung.
Für die Auswertung des ToTTo-Testsatzes müssen Sie die Modellausgabe in einer TXT-Datei organisieren und in die offizielle ToTTo-Bestenliste hochladen.
LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
geladen werden können. Dieses Problem wird in dieser Ausgabe erwähnt @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 } ,
}
}