🚀 UniChart:用於圖表理解和推理的通用視覺語言預訓練模型
UniChart是一個用於圖表理解和推理的預訓練模型,它能編碼圖表的相關文本、數據和視覺元素,並通過特定的文本解碼器生成自然語言輸出。該模型在多種下游任務中表現出色,為基於圖表的數據分析提供了強大支持。
🚀 快速開始
論文摘要指出:圖表在數據分析、洞察可視化以及回答關於數據的複雜推理問題方面非常受歡迎。為了便於使用自然語言進行基於圖表的數據分析,最近引入了一些下游任務,如圖表問答和圖表總結。然而,大多數解決這些任務的方法在語言或視覺 - 語言任務上進行預訓練時,並未嘗試明確建模圖表的結構(例如,數據如何進行視覺編碼以及圖表元素之間如何相互關聯)。為了解決這個問題,研究人員首先構建了一個涵蓋廣泛主題和視覺風格的大型圖表語料庫。然後提出了UniChart,一個用於圖表理解和推理的預訓練模型。UniChart對圖表的相關文本、數據和視覺元素進行編碼,然後使用基於圖表的文本解碼器以自然語言生成預期輸出。研究人員提出了幾個特定於圖表的預訓練任務,包括:(i)用於從圖表中提取視覺元素(如條形圖、折線圖)和數據的低級任務,以及(ii)用於獲得圖表理解和推理技能的高級任務。研究發現,在大型語料庫上對模型進行特定於圖表的低級和高級任務的預訓練,然後在三個下游任務上進行微調,可在這三個下游任務上取得最先進的性能。
✨ 主要特性
- 構建大型語料庫:涵蓋廣泛主題和視覺風格的圖表語料庫,為模型訓練提供豐富數據。
- 特定預訓練任務:提出低級和高級特定於圖表的預訓練任務,提升模型對圖表的理解和推理能力。
- 多下游任務支持:在圖表問答、圖表總結等多個下游任務中表現出色。
📦 安裝指南
文檔未提及具體安裝步驟,可參考推理部分使用已有的模型進行推理。
💻 使用示例
基礎用法
from transformers import DonutProcessor, VisionEncoderDecoderModel
from PIL import Image
import torch, os, re
torch.hub.download_url_to_file('https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/multi_col_1229.png', 'chart_example_1.png')
model_name = "ahmed-masry/unichart-chartqa-960"
image_path = "/content/chart_example_1.png"
input_prompt = "<chartqa> What is the lowest value in blue bar? <s_answer>"
model = VisionEncoderDecoderModel.from_pretrained(model_name)
processor = DonutProcessor.from_pretrained(model_name)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
image = Image.open(image_path).convert("RGB")
decoder_input_ids = processor.tokenizer(input_prompt, add_special_tokens=False, return_tensors="pt").input_ids
pixel_values = processor(image, return_tensors="pt").pixel_values
outputs = model.generate(
pixel_values.to(device),
decoder_input_ids=decoder_input_ids.to(device),
max_length=model.decoder.config.max_position_embeddings,
early_stopping=True,
pad_token_id=processor.tokenizer.pad_token_id,
eos_token_id=processor.tokenizer.eos_token_id,
use_cache=True,
num_beams=4,
bad_words_ids=[[processor.tokenizer.unk_token_id]],
return_dict_in_generate=True,
)
sequence = processor.batch_decode(outputs.sequences)[0]
sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")
sequence = sequence.split("<s_answer>")[1].strip()
print(sequence)
高級用法
在推理時,可根據不同的下游任務修改input_prompt
,具體如下:
任務 |
輸入提示 |
圖表問答 |
<chartqa> question <s_answer> |
開放圖表問答 |
<opencqa> question <s_answer> |
圖表總結 |
<summarize_chart> <s_answer> |
數據表提取 |
<extract_data_table> <s_answer> |
📚 詳細文檔
在線演示
如果您想快速嘗試我們的模型,可以訪問我們託管在Hugging Face Spaces平臺上的公共在線演示,界面友好!
圖表總結的輸入提示是**<summarize_chart>,數據表生成的輸入提示是<extract_data_table>**。
推理
您可以使用Hugging Face庫輕鬆地使用我們的模型進行推理!您只需執行以下操作:
- 將
model_name
更改為您首選的檢查點。
- 將
image_path
更改為您系統上圖表示例圖像的路徑。
- 根據您首選的任務編寫
input_prompt
,如下表所示。
任務 |
輸入提示 |
圖表問答 |
<chartqa> question <s_answer> |
開放圖表問答 |
<opencqa> question <s_answer> |
圖表總結 |
<summarize_chart> <s_answer> |
數據表提取 |
<extract_data_table> <s_answer> |
📄 許可證
本項目採用GPL - 3.0許可證。
📞 聯繫我們
如果您對這項工作有任何疑問,請通過以下電子郵件地址聯繫**Ahmed Masry**:amasry17@ku.edu.tr 或 ahmed.elmasry24653@gmail.com。
📚 引用
如果您在研究中使用了我們的模型或數據集,請引用我們的論文。
@misc{masry2023unichart,
title={UniChart: A Universal Vision-language Pretrained Model for Chart Comprehension and Reasoning},
author={Ahmed Masry and Parsa Kavehzadeh and Xuan Long Do and Enamul Hoque and Shafiq Joty},
year={2023},
eprint={2305.14761},
archivePrefix={arXiv},
primaryClass={cs.CL}
}