Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

[NeurIPS 2024] CharXiv: Charting Gaps in Realistic Chart Understanding in Multimodal LLMs

License

NotificationsYou must be signed in to change notification settings

princeton-nlp/CharXiv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏠Home | 🤗Data | 🥇Leaderboard | 📄Paper |Current Version: v1.0

This repository contains the code to evaluate models on CharXiv from the paperCharXiv: Charting Gaps in Realistic Chart Understanding in Multimodal LLMs.

🤗 We are first-time evaluation suite builders and this codebase is released for the first-time. We are committed to improving it. If you have any questions, feel free to raise issues and/or submit pull requests for new features of bug fixes.

🔊 An 80-second video teaser of CharXiv

CharXiv_MV_H265.mp4

📰 News

[12/25/2024] 🚀 We updated theleaderboard with the latest models:o1,Qwen2-VL,Pixtral,InternVL 2.5,Llama 3.2 Vision,NVLM,Molmo,Llava OneVision,Phi 3.5, and more!
[10/24/2024] 🚀 Check outthis paper which includes a detailed study on 🪜 improving the model performance on CharXiv!
[10/10/2024] 🚀 CharXiv is accepted atNeurIPS 2024 Datasets & Benchmarks Track and NeurIPS 2024Multimodal Algorithmic Reasoning Workshop as aspotlight paper.
[07/26/2024] 🚀 Upcoming this week: we'll be releasing scores forGPT-4o-mini as well as the largest and most capable open-weight VLM in our benchmark:InternVL2 LLaMA-3 76B. Alongside scores, we find someinteresting patterns in the trend of model improvement with respect to differnet chart understanding benchmarks on X.
[07/24/2024] 🚀 We released thefull evaluation pipeline (i.e., v1.0).
[07/23/2024] 🚀 We released ourevaluation results onall 34 MLLMs that we have tested so far -- this includes all models' responses to CharXiv's challenging questions, scores graded by GPT-4o, as well as aggregated stats.
[07/14/2024] 🚀 We further evaluated the latestInternVL Chat V2.0 26B andCambrian 34B models on CharXiv with someState-of-the-Art results. More analysis arehere.

👋 Introduction

Chart understanding plays a pivotal role when applying Multimodal Large Language Models (MLLMs) to real-world tasks such as analyzing scientific papers or financial reports. However, existing datasets often focus on oversimplified and homogeneous charts with template-based questions, leading to an over-optimistic measure of progress. In this work, we propose CharXiv, a comprehensive evaluation suite involving 2,323 natural, challenging, and diverse charts from scientific papers. CharXiv includes two types of questions: (1) descriptive questions about examining basic chart elements and (2) reasoning questions that require synthesizing information across complex visual elements in the chart. To ensure quality, all charts and questions are handpicked, curated, and verified by human experts. Our results reveal a substantial, previously underestimated gap between the reasoning skills of the strongest proprietary model (i.e., GPT-4o), which achieves 47.1% accuracy, and the strongest open-source model (i.e., InternVL Chat V1.5), which achieves 29.2%. All models lag far behind human performance of 80.5%, underscoring weaknesses in the chart understanding capabilities of existing MLLMs. We hope CharXiv facilitates future research on MLLM chart understanding by providing a more realistic and faithful measure of progress.

Comparison of model performance

🛠️ Evaluate Your Models

Setup

Download the images:

git clone https://github.com/princeton-nlp/CharXiv.gitcd imageswget https://huggingface.co/datasets/princeton-nlp/CharXiv/resolve/main/images.zipunzip images.zip && rm images.zip
(Optional) A short tour for the codebase* `data` folder contains all QAs and metadata for images, descriptive questions, and reasoning questions. Answers for the test split are intentionally made to `null` to prevent testing data from leaking into the public. * `images` folder contains all images where their identifiers range from 0 to 2399. Note that there are only 2333 images in total and the numberings are **not** consecutive. * `results` folder contains all response generation and scoring results. * `src` folder contains all python code for CharXiv: * `constants.py` stores all the prompts and mappings from question ids to actual questions. * `descriptive_utils.py` contains all code to build queries for response generation and grading, as well as saving all artifacts for descriptive questions. * `reasoning_utils.py` contains all code to build queries for response generation and grading, as well as saving all artifacts for reasoning questions. * `evaluate.py` is the main function to evaluate model responses against the answer with gpt API calls. * `generate.py` is the main function to loop QAs for model to generate responses. * `get_stats.py` is the main function to print the reasoning and descriptive question statistics. * `generate_lib` contains a series of implementations that enable one to generate response on their models.* `run.sh` is the script to evaluate models

Response generation

CharXiv doesn't require any third-party python library when prompting your models to generate responses to the chart-question pairs. Therefore, to set up your model, you should implement thecustom_evaluate function ingenerate.py. Specifically, this function takesqueries as the input, which contain all the charts and questions CharXiv uses to evaluate models. It has the following structure:

{figure_id:{'question': ...<str>        'figure_path': ...<str>},    ...figure_id:{'question': ...<str>        'figure_path': ...<str>},}

To run CharXiv for your model, go tosrc/generate_lib/ directory and create a new python file e.g.,custom.py. You can put whatever auxiliary code (e.g., model split function, image processing function, etc) inside this file, but you need to implement thegenerate_response function which takes inmodel_path andqueries by default. Inside the function, you load your models and all preprocessing functions, and let your model generate responses. The below script is a simple example of usage. If you need more references, you can look at existing*.py files how these functions are implemented for different models.

forkintqdm(queries):query=queries[k]['question']# This will be a single question with instructionsimage=queries[k]["figure_path"]# This will be the path to the figure associated with the above queryquery,image=preprocess(query,image)#TODOresponse=model.chat(query,image)#TODOqueries[k]['response']=response

Once you finish implementing thegenerate_response function, go tosrc/generate_lib/utils.py and modify theget_generate_fn to include the function you implemented. Say if your model's checkpoint folder is calledcustom_1 and you implement thegenerate_response function in thecustom.py file, then all you need to do it to add the follwing code:

...elifmodel_namein ['custom_1']:from .customimportgenerate_response...

Then, to generate model responses:

python src/generate.py \    --model_name$model_name \    --split$split \    --mode$mode \    --model_path$model_path

⚠️The first three arguments are required and you should not delete them. It is your responsibility to ensure the correctness and integrity of the evaluation pipeline if you change them. In particular,

  • --model_name is used as a string identifier to name the resulting file and you can use whatever string except "-", which we reserve to parse file names to get meta information.

  • You should either chooseval ortest for the--split argument. To perform end-to-end in-house evaluations, you should useval we do not release answers fortest.

  • Finally, you should either choosedescriptive orreasoning for the--mode argument.

✅The last argument i.e.,--model_path is a custom argument and feel free to delete it, modify it or add more args as you see fit. Correspondingly, you should consider changing the input argument of yourgenerate_response function and the function that callsgenerate_response if you change--model_path.

🗄️ Once the process ends, you will find a file inresults folder named:gen-<model_name>-<mode>_<split>.json. This file stores your model's responses.

Note: if you are evaluating a model that ishosted on cloud and can only be accessed via an API, the--model_path argument will correspond to the name of the model e.g.,gpt-4o-2024-05-13. Also, in creating the custom file in thesrc/generate_lib directory, you need to implement an additional function i.e.,get_client_model that takes in themodel_path argument and theapi_key argument. In addition, you need to add anotherelif statement inget_client_fn insidesrc/generate_lib/utils.py with instructions similar to the above. Specific instructions to implementget_client_model function differ by API providers, and examples are provided ingpt.py,gemini.py,reka.py,claude.py, andqwen.py.Note: you may see a header like:

### HEADER START ###importosvlm_codebase=os.environ['VLM_CODEBASE_DIR']importsyssys.path.append(vlm_codebase+'/<codebase>')### HEADER END ###

in existing implementations ingenerate_lib. This becomes convenient when the model needs to be run with some author-provided code, and you want to load/call the model with their code. In this way, you have a local directory which contains their code (i.e., if you are developing a model or cloning a codebase from github), and you append the directory to the system PATH.

Evaluation

⚠️ Make sure the openai python API library is installed in your evaluation environment. If not,pip install openai first.

python src/evaluate.py \    --model_name$model_name \    --split$split \    --mode$mode \    --api_key$openai_key

The first three arguments are same as the above (response generation), except that you need to provide an openai API key to evaluate your model's responses.

This python script will automatically match thegen-<model_name>-<mode>_<split>.json file in theresults folder and the<mode>_<split>.json file in thedata folder.

🗄️ Once the process ends, you will find a file in results folder named:scores-<model_name>-<mode>_<split>.json. This file stores your model's evaluation results graded by LLMs.

Finally, run this:

python src/get_stats.py \    --model_name$model_name \    --split$split

This python script will automatically match thescores-<model_name>-<mode>_<split>.json file in theresults folder to calculate the stats for aggregated scores. Calling this function will automatically generatestats-<model_name>-<mode>_<split>.json in theresults folder.

📅 Results from Existing Models

We release full results on the validation set (i.e., generated responses, grading done by LLMs and the aggregated stats) for all models we tested in ourHuggingFace Repo. If you are interested in doing some fine-grained analysis on these results or calculate some customized metrics, feel free to use them.

🏆 Leaderboard

Please refer to our official website by clicking the model name for detailed model information (e.g., huggingface model version or API version).

ReasoningDescriptive
TC = Text-in-ChartINEX = Information Extraction
TG = Text-in-GeneralENUM = Enumeration
NC = Number-in-ChartPATT = Pattern Recognition
NG = Number-in-GeneralCNTG = Counting
COMP = Compositionality
MetadataReasoningDescriptive
ModelWeightSize [V/L] (B)OverallTCTGNCNGOverallINEXENUMPATTCNTGCOMP
🎖️HumanN/AUnknown80.5077.2777.7884.9183.4192.1091.4091.2095.6393.3892.86
🥇Claude 3.5 SonnetProprietaryUnknown60.2061.1478.7963.7946.7284.3082.6288.8690.6190.0848.66
🥈GPT-4oProprietaryUnknown47.1050.0061.6247.8434.5084.4582.4489.1890.1785.5059.82
🥉Gemini 1.5 ProProprietaryUnknown43.3045.6856.5745.6930.5771.9781.7964.7379.4876.3415.18
InternVL Chat V2.0 ProProprietaryUnknown39.8040.0060.6144.4025.7676.8377.1184.6777.0778.8827.23
InternVL Chat V2.0 76BOpen5.9 / 7038.9040.0059.6042.6724.0275.1777.1178.6976.2079.1332.14
GPT-4VProprietaryUnknown37.1038.1857.5837.9325.3379.9278.2985.7988.2180.9241.07
GPT-4o MiniProprietaryUnknown34.1035.2347.4732.3327.9574.9274.9182.8169.2179.1335.71
Gemini 1.5 FlashProprietaryUnknown33.9036.3654.5530.6023.58------
InternVL Chat V2.0 26BOpen5.9 / 2033.4033.1851.5241.8117.4762.4071.3561.0255.9067.946.25
Claude 3 SonnetProprietaryUnknown32.2031.5950.5131.4726.2073.6575.7481.9276.6472.268.48
Claude 3 HaikuProprietaryUnknown31.8029.7745.4534.4827.0765.0869.8769.9864.8561.838.04
Phi-3 VisionOpen0.3 / 431.6031.3646.4635.7821.4060.4867.6261.1854.5965.396.25
MiniCPM-V2.6 (Upsize+CoT)Open0.4 / 831.0030.0041.4137.9321.4057.0567.8549.5653.4962.8514.29
Claude 3 OpusProprietaryUnknown30.2026.3650.5133.6225.3371.5575.6273.6973.5870.4826.79
InternVL Chat V1.5Open5.9 / 2029.2030.0045.4532.3317.4758.5069.6352.9553.0664.635.80
GLM 4V 9BOpen4.4 / 929.1030.6842.4233.1916.1657.6267.9761.6643.4545.048.48
Reka CoreProprietaryUnknown28.9027.5041.4128.4526.6455.6058.9050.5265.7271.2510.71
Ovis 1.5 Gemma2 9BOpen0.4 / 928.4026.1444.4433.1920.9662.6064.2971.7556.3366.165.80
Ovis 1.5 Llama3 8BOpen0.4 / 828.2027.2749.4931.0317.9060.1561.3968.9356.3361.837.14
Cambrian 34BOpen1.9 / 3427.3024.5544.4427.5924.8959.7359.3170.9453.2864.635.36
MiniCPM-V2.6 (Upsize)Open0.4 / 827.1021.5945.4535.3421.4061.6269.2855.9360.4872.0119.64
Reka FlashProprietaryUnknown26.6026.5939.3930.6017.0356.4561.3948.5969.8772.527.14
Mini Gemini HD Yi 34BOpen0.5 / 3425.0026.5943.4327.1611.7952.6853.8655.0465.5053.942.23
InternLM XComposer2 4KHDOpen0.3 / 725.0023.8643.4329.3114.8554.6561.0954.0851.5359.806.70
MiniCPM-V2.5Open0.4 / 824.9025.2343.4325.4315.7259.2762.2861.9056.7768.9610.27
Qwen VL MaxProprietaryUnknown24.7026.1441.4124.5714.8541.4850.4228.4153.7151.154.46
VILA 1.5 40BOpen5.9 / 3424.0021.5941.4125.0020.0938.6742.8829.6251.3150.899.82
Reka EdgeProprietaryUnknown23.5020.2332.3230.6018.7833.6536.6528.4934.7252.164.91
Gemini 1.0 ProProprietaryUnknown22.8020.9148.4818.1020.0954.3767.9739.2360.4862.608.93
LLaVA 1.6 Yi 34BOpen0.3 / 3422.5020.4537.3723.7118.7851.0546.3863.4456.1151.915.80
Mini Gemini HD Llama3 8BOpen0.5 / 819.0019.7736.3621.127.8644.4249.4139.2351.0955.981.79
CogAgentOpen4.4 / 718.8016.8232.3220.6914.8536.3045.1426.8043.2337.156.70
InternLM XComposer2Open0.3 / 718.7016.1438.3821.9811.7938.7534.1043.5846.7252.935.80
MiniCPM-V2Open0.4 / 2.418.5017.9533.3319.4012.2335.7739.7436.5626.4244.535.36
IDEFICS 2Open0.4 / 718.2015.4535.3517.2417.0332.7736.1227.2840.8343.263.12
IDEFICS 2 ChattyOpen0.4 / 717.8015.4534.3419.8313.1041.5534.8854.5645.6344.276.70
MoAIOpen0.3 / 717.509.3236.3621.1221.4028.7031.2021.2339.9640.467.59
DeepSeek VLOpen0.5 / 717.1016.3632.3219.839.1745.8049.1145.2042.7960.314.91
DocOwl 1.5 ChatDomain-specific0.3 / 717.0014.3234.3415.0916.5937.4036.8349.2336.6822.903.12
SPHINX V2Open1.9 / 1316.1013.8628.2817.6713.5430.2535.5924.3741.0529.521.79
Qwen VL PlusProprietaryUnknown16.0015.4545.4512.078.3028.9333.3317.9232.1056.232.23
UReaderDomain-specific0.3 / 714.3011.3618.1815.5217.0318.9810.2027.6033.4120.365.36
ChartLlamaDomain-specific0.3 / 1314.208.1834.349.9121.4019.2317.1412.1943.8928.756.70
LLaVA 1.6 Mistral 7BOpen0.3 / 713.9011.3632.3216.817.8635.4034.7033.9848.9142.498.48
ChartGemmaDomain-specific0.4 / 212.5011.5924.2416.814.8021.3027.5818.9714.1919.594.46
ChartAssistantDomain-specific1.9 / 1311.709.0927.2710.3411.3516.9316.4316.8716.5727.742.68
ChartInstruct-FlanT5Domain-specific0.3 / 311.707.9532.329.4812.2315.4711.6817.5915.9429.526.70
Random (GPT-4o)N/AUnknown10.804.3239.395.6016.1619.8521.6516.7123.8025.705.36
DocOwl 1.5 OmniDomain-specific0.3 / 79.105.4514.149.4813.5425.7034.4617.9231.8817.564.46
ChartInstruct-Llama2Domain-specific0.3 / 78.804.0923.237.7612.6621.4023.3115.5033.1927.484.91
TinyChartDomain-specific0.4 / 38.305.0013.136.4714.4116.1513.8214.6124.6728.503.12
UniChart-ChartQADomain-specific1.9 / 85.703.416.063.4512.2319.329.9138.2612.2319.080.45
TextMonkeyDomain-specific8-Feb3.902.504.043.027.4212.4512.1617.928.736.362.68

📜 License

Our original data contributions (all data except the charts) are distributed under theCC BY-SA 4.0 license. Our code is licensed underApache 2.0 license. The copyright of the charts belong to the original authors, where you can find the source inimage_metadata_val.json andimage_metadata_test.json under the data folder.

🥺 Cite

If you use our work and are inspired by our work, please consider cite us (available soon):

@article{wang2024charxiv,title={CharXiv: Charting Gaps in Realistic Chart Understanding in Multimodal LLMs},author={Wang, Zirui and Xia, Mengzhou and He, Luxi and Chen, Howard and Liu, Yitao and Zhu, Richard and Liang, Kaiqu and Wu, Xindi and Liu, Haotian and Malladi, Sadhika and Chevalier, Alexis and Arora, Sanjeev and Chen, Danqi},journal={arXiv preprint arXiv:2406.18521},year={2024}}

🙌 Contributors and Acknowledgement

📊CharXiv is built by a team consisting of:
Zirui Wang,Mengzhou Xia,Luxi He,Howard Chen,Yitao Liu,Richard Zhu,Kaiqu Liang,Xindi Wu,Haotian Liu,Sadhika Malladi,Alexis Chevalier,Sanjeev Arora,Danqi Chen

Princeton Language and Intelligence, Princeton University
University of Wisconsin, Madison
The University of Hong Kong

🤗 We adapted part of theMathVista's codebase in building our evaluation framework, and we greatly appreciate their contributions to the MLLM community.
🤗 The lyrics in the teaser video are created byGPT-4o from our abstract, and the music is created bySuno. Video is manually edited usingCapCut.

We’ve received multiple requests for scripts that batch convert vector images to raster images from arXiv source files that we used to construct CharXiv. While the code is not part of this codebase, we are happy to provide them. Please send an email toZirui Wang for inquiries.


[8]ページ先頭

©2009-2025 Movatter.jp