儘管最近基於LLM的表格理解方法取得了很大進展,但它們嚴重依賴給定表格必須轉換為某種文字序列(例如Markdown或HTML)作為模型輸入的前提。然而,在某些現實場景(例如掃描文件和網頁螢幕截圖)中很難存取高品質的文字表格表示,而表格圖像更容易存取。因此,如何利用直覺的視覺資訊直接理解表格是開發更多實際應用的關鍵且迫切的挑戰。
面對上述挑戰,我們提出了多模式表格理解問題,其中模型需要基於表格圖像以端到端的方式對不同的表格相關請求(例如問題)產生正確的回應。相應地,我們建立了MMTab ,這是第一個用於多模態表理解問題的開源大規模資料集,它可以支援多模態表理解的通用 MLLM 的訓練和評估。基於精心策劃的 MMTab 資料集,我們開發了一個名為Table-LLaVA的多功能表格 MLLM,具有 LLaVA v1.5 的增強兩階段訓練範例。 Table-LLaVA 在 17 個保持基準和 6 個保持基準上擊敗了強大的 MLLM 基線,甚至在測試樣本子集下的 14 個基准上與強大的 GPT-4V 競爭。右圖顯示了 Table LLaVA 7B 和現有 MLLM 在各種多模式表理解基準上的直覺比較。
我們基於 8 個領域的 14 個公開可用的表格資料集建構了 MMTab。我們精心設計腳本,將這些資料集中的原始文字表格轉換為表格圖像,突出顯示表格結構和样式的廣泛覆蓋,並將所有特定於任務的樣本轉換為具有統一格式的多模態指令調整樣本<table image, input request, output response>
.產生的資料集包含三個部分,可從 Hugging Face 資料集下載。在資料集建置過程中,採用了多個層級(例如表格層級、任務層級)的資料增強,以進一步提高資料多樣性。
資料集分割 | #表格圖片 | #樣本 |
---|---|---|
MMTab-pre | 97K | 150K表識別樣本進行預訓練 |
MMTab-指令 | 82K | 14 個基於表格的任務的 232K 樣本用於指令調優 |
MMT表評估 | 23K | 17 個保留基準的 45K 樣本和 7 個保留基準的 4K 樣本進行評估 |
資料集範例如下圖所示,更多範例請參考原論文附錄A。
表LLaVA遵循LLaVA v1.5架構,以CLIP-ViT-L-336px作為視覺編碼器(336*336影像解析度),以Vicuna-v1.5-7B或Vicuna-v1.5-13B作為基礎LLM,兩層MLP 作為視覺語言連接器。儲存的模型檢查點可以從以下 Hugging Face 儲存庫下載:
版本 | 尺寸 | 行程 | 基礎法學碩士 | 視覺編碼器 | 投影層 | 檢查站 |
---|---|---|---|---|---|---|
表 LLaVA | 7B | full_finetune-1_epoch | 駱駝毛-v1.5-7B | 剪輯-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-7b |
表 LLaVA | 13B | full_finetune-1_epoch | 駱駝毛-v1.5-13B | 剪輯-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-13b |
表 LLaVA 7B 的 pretrained_mm_projector | 5M | full_finetune-1_epoch | 駱駝毛-v1.5-7B | 剪輯-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
表 LLaVA 13B 的 pretrained_mm_projector | 5M | full_finetune-1_epoch | 駱駝毛-v1.5-13B | 剪輯-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
注意:上述Table-LLaVA檢查點是從原始LLaVA儲存庫中保存的,該儲存庫與Transformers不直接相容,即不能像LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
。這個問題在github問題中提到。我將嘗試提供的轉換腳本,使 Table-LLaVa 檢查點與 Transformers 相容,並將新檢查點上傳到新集線器。但目前,檢查點可能只能像這樣使用 LLaVA 儲存庫加載,而不是直接從 HuggingFace 加載。對於由此帶來的不便,我們深感抱歉!
我們使用 LLaVA v1.5 的程式碼庫進行模型訓練和推理。因此,Table LLaVA 可以用作正常的 LLaVA v1.5 模型,並且可以以類似的方式安裝環境。請注意,我們的程式碼庫是在 2023 年 12 月下載的,可能不是最新的。最新更新請參考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 .
表LLaVA訓練由兩個階段組成:(1)預訓練階段:視覺語言連接器(兩層MLP)被訓練以將凍結的預訓練視覺編碼器(ViT)連接到凍結的LLM(Vicuna v1.5) ; (2) 指令調整階段:視覺語言連接器和基礎 LLM 接受訓練以遵循多模式指令。
各階段的訓練資料如下所示:
訓練階段 | 數據說明 | 數據大小 | 擁抱人臉資料集 |
---|---|---|---|
預訓練 | 558K 原始LLaVA-1.5預訓練數據 | 558K | blip_laion_cc_sbu_558k.json |
150K表格識別資料(MMTab-pre) | 15萬 | MMTab-pre_pretrain_data_llava_format_150K.json | |
指令微調 | 665K原始LLaVA-1.5微調數據 | 665K | llava_v1_5_mix665k.json |
14個表格任務的232K多模態指令調優資料(MMTab-instruct) | 232K | MMTab-instruct_sft_data_llava_format_232K.json |
LLaVA資料格式的合併預訓練和指令微調資料可以在MMTab資料集中找到,即enhanced_llava_pretrain_data_708K.json
和enhanced_llava_sft_data_898K.json
,可以直接用於訓練Table LLaVA。
表 LLaVA 在 8 個具有 80GB 記憶體的 A800 GPU 上進行訓練。我們使用與 LLaVA v1.5 類似的一組超參數,只不過我們將最大序列長度從 2048 增加到 2560 以適應更長的文字序列。下面提供了預訓練和微調中使用的超參數。
階段 | 訓練重量 | 全域批量大小 | 學習率 | 紀元 | 最大長度 | 重量衰減 | 預熱比率 | 深速階段 |
---|---|---|---|---|---|---|---|---|
預訓練 | 視覺語言連接器 | 256 | 1e-3 | 1 | 2560 | 0 | 0.03 | 澤羅-2 |
指令微調 | 基礎法學碩士和視覺語言連接器 | 128 | 2e-5 | 1 | 2048 | 0 | 0.03 | 澤羅-3 |
images.zip
。將其放在./LLaVA-Pretrain/images
下並解壓縮。MMTab-instruct_table_images_82K.zip
和MMTab-pre_table_images_part_2_16K.zip
。將它們放在./LLaVA-Pretrain/images
下並解壓縮。將IID_train_image
目錄重新命名為table_pretrain_part_1
。enhanced_llava_pretrain_data_708K.json
到./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
。如果您無法透過 HuggingFace 自動下載 Vicuna v1.5 和 ViT 基礎模型,您可以手動下載這些模型,並將對應的命令列參數( model_name_or_path
和vision_tower
)設定到本機模型路徑。預訓練完成後,訓練好的視覺語言投影機將保存在指定的output_dir
中。./LLaVA-Finetune/images
下建立 5 個新資料夾,名稱分別為coco
、 gqa
、 ocr_vqa
、 textvqa
和vg
。請按照此處的說明從這 5 個資料集下載圖像以進行 LLaVA v1.5 微調。將zip檔案放入對應的資料夾中並解壓縮。MMTab-instruct_table_images_82K.zip
。將其放在./LLaVA-Finetune/images/table_instructV
下並解壓縮。將產生的IID_train_image
目錄重新命名為images
。enhanced_llava_sft_data_898K.json
從MMTab資料集下載到./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
。將pretrain_mm_mlp_adapter
參數設定為預訓練視覺語言投影機的路徑,例如./pretrained_mm_projector/llava-v1.5-7b-with-table-pretrain/mm_projector.bin
。訓練好的表llava模型將會保存在指定的output_dir
中。 推理資料應以 LLaVA 的 jsonl 格式儲存。輸入檔中的每一行對應一個輸入樣本,它是 Python 字典的 JSON 字串(由json.dumps()
產生)。範例格式應如下圖所示:
{ "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.
}
若要對 MMTab-eval 進行推理,請下載 jsonl 格式的 49K MMTab-eval 測試樣本 (MMTab-eval_test_data_49K_llava_jsonl_format.jsonl) 及其映像檔 (MMTab-eval_table_images_23K.zip)。然後建立一個名為「LLaVA-Inference」的資料夾並以下列方式組織資料:
LLaVA-Inference
├── MMTab-eval_test_data_49K_llava_jsonl_format.jsonl
└── all_test_image
多 GPU 推理: start_multicard_inference.sh
。您也可以根據自己的數據進行推斷。請記得調整table_llava_inference.sh
中的「 question-file
」(輸入檔案路徑)、「 image-folder
」(影像資料夾路徑)等參數。推理結果( merge.jsonl
)將儲存在 ' answers-file
' 參數的路徑中,例如./eval_results/answers/MMTab_eval/table-llava-v1.5-7b/merge.jsonl
。
使用官方推理腳本, merge.jsonl
中的推理結果格式應如下所示:
{ '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
評估腳本儲存在MMTab-eval_evaluation
資料夾中。首先, cd MMTab-eval_evaluation
和pip install -r eval_requirements.txt
安裝必要的軟體包,例如「Sacrebleu」以進行評估。對於表格辨識任務,我們使用 PubTabNet 的 TEDS 計算腳本進行評估。然後,下載 MMTab-eval 測試資料 (MMTab-eval_test_data_49K.json) 和測試表 (MMTab-eval_test_tables_23K.json),並將它們與 LLaVA 的推理結果 ( merge.jsonl
) 一起放入MMTab-eval_evaluation
資料夾中。使用 MMTab_evaluation.ipynb 筆記本進行自動評估。
對於ToTTo測試集上的評估,需要將模型輸出整理成txt檔案並上傳到官方ToTTo排行榜。
LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
等方式直接載入。這個問題在本期有提到 @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 } ,
}
}