最近の LLM ベースのテーブル理解方法は大きな進歩を遂げていますが、モデル入力として機能するには、指定されたテーブルを特定のテキスト シーケンス (Markdown や HTML など) に変換する必要があるという前提に大きく依存しています。ただし、スキャンされた文書や Web ページのスクリーンショットなどの一部の現実世界のシナリオでは、高品質のテキスト表表現にアクセスすることは困難ですが、表画像の方がはるかにアクセスしやすいです。したがって、直感的な視覚情報を使用してテーブルを直接理解する方法は、より実用的なアプリケーションを開発する上で重要かつ緊急の課題です。
上記の課題に直面して、我々はマルチモーダルなテーブル理解問題を提案します。この問題では、モデルは、テーブル画像に基づいてエンドツーエンド方式でテーブル関連のさまざまなリクエスト (質問など) に対する正しい応答を生成する必要があります。これに対応して、マルチモーダル テーブル理解問題に対する初のオープンソースの大規模データセットである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>
。結果として得られるデータセットには 3 つの部分が含まれており、Hugging Face Dataset からダウンロードできます。データセットの構築中に、データの多様性をさらに向上させるために、複数のレベル (テーブル レベル、タスク レベルなど) でのデータ拡張が採用されました。
データセットの分割 | #テーブル画像 | #サンプル |
---|---|---|
MMTab-pre | 97K | 事前トレーニング用の 150K のテーブル認識サンプル |
MMTab 命令 | 82K | 命令チューニング用の 14 のテーブルベースのタスクの 232,000 個のサンプル |
MMTab 評価 | 23K | 17 の保持ベンチマークの 45,000 サンプルと、評価用の 7 つの保持ベンチマークの 4,000 サンプル |
データセットの例を次の図に示し、さらに多くの例を元の論文の付録 A に示します。
テーブル LLaVA は LLaVA v1.5 アーキテクチャに従っており、ビジュアル エンコーダとして CLIP-ViT-L-336px (画像解像度 336*336)、ベース LLM として Vicuna-v1.5-7B または Vicuna-v1.5-13B を使用し、ビジョン言語コネクタとしての 2 層 MLP。保存されたモデル チェックポイントは、次の Hugging Face リポジトリからダウンロードできます。
バージョン | サイズ | スケジュール | 基本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 リポジトリから保存されます。これは、Transformers と直接互換性がありません。つまり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 .
Table LLaVA トレーニングは 2 つのステージで構成されます。 (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 をトレーニングするために直接使用できます。
Table 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 | ZeRO-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 で推論するには、49K の MMTab-eval テスト サンプルを jsonl 形式 (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 } ,
}
}