최근 LLM 기반 테이블 이해 방법이 큰 진전을 이루었지만 모델 입력으로 사용하려면 주어진 테이블을 특정 텍스트 시퀀스(예: Markdown 또는 HTML)로 변환해야 한다는 전제에 크게 의존합니다. 그러나 스캔한 문서 및 웹페이지 스크린샷과 같은 일부 실제 시나리오에서는 고품질 텍스트 테이블 표현에 액세스하기 어렵고 테이블 이미지에 훨씬 더 쉽게 액세스할 수 있습니다. 따라서 직관적인 시각적 정보를 이용하여 테이블을 어떻게 직접적으로 이해하는가는 보다 실용적인 응용프로그램을 개발하기 위한 중요하고 시급한 과제입니다.
위의 과제에 직면하여 우리는 모델이 테이블 이미지를 기반으로 종단 간 방식으로 다양한 테이블 관련 요청(예: 질문)에 대한 올바른 응답을 생성해야 하는 다중 모드 테이블 이해 문제를 제안합니다. 이에 따라 우리는 다중 모드 테이블 이해 문제에 대한 최초의 오픈 소스 대규모 데이터 세트 인 MMTab을 구성합니다. 이는 다중 모드 테이블 이해를 위한 일반 MLLM의 훈련과 평가를 모두 지원할 수 있습니다. 선별된 MMTab 데이터 세트를 기반으로 LLaVA v1.5의 향상된 2단계 교육 패러다임을 사용하여 Table-LLaVA 라는 다목적 테이블 형식 MLLM을 개발합니다. Table-LLaVA는 17개 홀드인 벤치마크와 6개 홀드아웃 벤치마크에서 강력한 MLLM 기준을 능가했으며 테스트 샘플 하위 집합의 14개 벤치마크에서 강력한 GPT-4V와도 경쟁적이었습니다. 오른쪽 그림은 다양한 다중 모드 테이블 이해 벤치마크에서 테이블 LLaVA 7B와 기존 MLLM을 직관적으로 비교한 것을 보여줍니다.
우리는 공개적으로 사용 가능한 8개 도메인의 14개 테이블 데이터 세트를 기반으로 MMTab을 구성했습니다. 우리는 이러한 데이터 세트의 원본 텍스트 테이블을 광범위한 테이블 구조 및 스타일을 강조하는 테이블 이미지로 변환하고 모든 작업별 샘플을 <table image, input request, output response>
. 결과 데이터 세트에는 세 부분이 포함되어 있으며 Hugging Face 데이터 세트에서 다운로드할 수 있습니다. 데이터 세트를 구성하는 동안 데이터 다양성을 더욱 향상시키기 위해 여러 수준(예: 테이블 수준, 작업 수준)의 데이터 확대가 채택되었습니다.
데이터세트 분할 | #테이블 이미지 | #샘플 |
---|---|---|
MMTab-pre | 97K | 사전 훈련을 위한 150,000개의 테이블 인식 샘플 |
MMTab 지시 | 82K | 명령 조정을 위한 14개 테이블 기반 작업의 232K 샘플 |
MMTab 평가 | 23K | 평가를 위해 17개 보유 벤치마크의 45K 샘플 및 7개 보유 벤치마크의 4K 샘플 |
데이터 세트의 예는 다음 그림에 나와 있으며 원본 논문의 부록 A에는 더 많은 예가 나와 있습니다.
테이블 LLaVA는 LLaVA v1.5 아키텍처를 따르며, 시각적 인코더(336*336 이미지 해상도)로 CLIP-ViT-L-336px, 기본 LLM으로 Vicuna-v1.5-7B 또는 Vicuna-v1.5-13B를 사용합니다. 비전 언어 커넥터로서의 2계층 MLP. 저장된 모델 체크포인트는 다음 Hugging Face Repository에서 다운로드할 수 있습니다.
버전 | 크기 | 일정 | 기본 LLM | 비전 인코더 | 프로젝션 레이어 | 체크포인트 |
---|---|---|---|---|---|---|
테이블 LLaVA | 7B | full_finetune-1_epoch | 비쿠나-v1.5-7B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-7b |
테이블 LLaVA | 13B | full_finetune-1_epoch | 비쿠나-v1.5-13B | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-13b |
테이블 LLaVA 7B의 pretrained_mm_projector | 5M | full_finetune-1_epoch | 비쿠나-v1.5-7B | CLIP-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 | CLIP-ViT-L-336px | MLP-2x | SpursgoZmy/table-llava-v1.5-pretrained_mm_projector |
참고: 위의 Table-LLaVA 체크포인트는 원래 LLaVA 저장소에서 저장되며 이는 Transformer와 직접 호환되지 않습니다. 즉 LlavaForConditionalGeneration.from_pretrained('SpursgoZmy/table-llava-v1.5-7b')
. 이 문제는 이 github 문제에 언급되어 있습니다. 제공된 변환 스크립트를 사용해 Table-LLaVa 체크포인트가 Transformers와 호환되도록 만들고 새 체크포인트를 새 허브에 업로드하겠습니다. 하지만 지금은 체크포인트를 HuggingFace에서 직접 로드하는 대신 이와 같은 LLaVA 저장소를 통해서만 로드할 수 있습니다. 불편을 끼쳐드려 죄송합니다!
우리는 모델 훈련과 추론을 위해 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) 사전 훈련 단계: 비전 언어 커넥터(2계층 MLP)는 고정된 사전 훈련된 비전 인코더(ViT)를 고정된 LLM(Vicuna v1.5)에 연결하도록 훈련됩니다. ; (2) 명령어 조정 단계: 비전 언어 커넥터와 기본 LLM은 다중 모드 명령어를 따르도록 학습됩니다.
각 단계의 학습 데이터는 다음과 같습니다.
훈련 단계 | 데이터 설명 | 데이터 크기 | 포옹하는 얼굴 데이터세트 |
---|---|---|---|
사전 훈련 | 558K 원본 LLaVA-1.5 사전 학습 데이터 | 558K | blip_laion_cc_sbu_558k.json |
150K 테이블 인식 데이터(MMTab-pre) | 150K | 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
에서 찾을 수 있으며, 이는 테이블 LLaVA를 훈련하는 데 직접 사용할 수 있습니다.
테이블 LLaVA는 80GB 메모리를 갖춘 8개의 A800 GPU에서 훈련되었습니다. 더 긴 텍스트 시퀀스를 수용하기 위해 최대 시퀀스 길이를 2048에서 2560으로 늘렸다는 점을 제외하면 LLaVA v1.5와 유사한 하이퍼 매개변수 세트를 사용합니다. 사전 학습 및 미세 조정에 사용되는 하이퍼파라미터는 다음과 같습니다.
단계 | 훈련된 가중치 | 글로벌 배치 크기 | 학습률 | 시대 | 최대 길이 | 체중 감소 | 워밍업 비율 | 딥스피드 스테이지 |
---|---|---|---|---|---|---|---|---|
사전 훈련 | 비전 언어 커넥터 | 256 | 1e-3 | 1 | 2560 | 0 | 0.03 | 제로-2 |
지시 미세 조정 | 기본 LLM 및 비전 언어 커넥터 | 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
아래에 이름이 각각 coco
, gqa
, ocr_vqa
, textvqa
및 vg
인 5개의 새 폴더를 만듭니다. LLaVA v1.5 미세 조정을 위한 5개 데이터 세트에서 이미지를 다운로드하려면 여기의 지침을 따르세요. 해당 폴더에 zip 파일을 넣고 압축을 풀어주세요.MMTab-instruct_table_images_82K.zip
다운로드합니다. ./LLaVA-Finetune/images/table_instructV
아래에 넣고 압축을 풉니다. 결과 IID_train_image
디렉토리의 이름을 images
로 바꿉니다.enhanced_llava_sft_data_898K.json
./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 dict의 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 형식(MMTab-eval_test_data_49K_llava_jsonl_format.jsonl)의 49K MMTab-eval 테스트 샘플과 해당 이미지 파일(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 } ,
}
}