Transformers documentation
MatCha
이 모델은 2022-12-19에 HF papers에 게시되었으며, 2023-06-20에 Hugging Face Transformers에 기여되었습니다.
MatCha
개요
MatCha는 Fangyu Liu, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Yasemin Altun, Nigel Collier, Julian Martin Eisenschlos의 논문 MatCha: Enhancing Visual Language Pretraining with Math Reasoning and Chart Derendering에서 제안되었습니다.
해당 논문의 초록은 다음과 같이 서술합니다:
플롯, 차트, 인포그래픽과 같은 시각 언어 데이터는 인간 세계에서 매우 보편적입니다. 그러나 최첨단 비전-언어 모델은 이러한 데이터에서 성능이 좋지 않습니다. 차트/플롯과 언어 데이터를 함께 모델링하는 시각 언어 모델의 기능을 향상시키기 위해 MatCha(Math reasoning and Chart derendering pretraining)를 제안합니다. 구체적으로, 시각 언어 모델링의 핵심 기능인 플롯 분해와 수치 추론을 포괄하는 여러 사전 학습 작업을 제안합니다. MatCha 사전 학습은 최근 제안된 이미지-텍스트 시각 언어 모델인 Pix2Struct를 기반으로 수행합니다. PlotQA, ChartQA와 같은 표준 벤치마크에서 MatCha 모델은 최첨단 방법보다 최대 약 20%까지 우수한 성능을 보입니다. 또한 MatCha 사전 학습이 스크린샷, 교과서 다이어그램, 문서 도형과 같은 도메인으로 얼마나 잘 전이되는지 검토하고 전반적인 성능 향상을 관찰하여, MatCha 사전 학습이 더 넓은 범위의 시각 언어 작업에서 유용함을 확인합니다.
모델 설명
MatCha는 Pix2Struct 아키텍처를 사용하여 학습된 모델입니다. Pix2Struct에 대한 자세한 내용은 Pix2Struct 문서에서 확인하실 수 있습니다.
MatCha는 Pix2Struct 아키텍처의 Visual Question Answering 하위 집합입니다. 입력 질문을 이미지에 렌더링하고 답변을 예측합니다.
사용
현재 MatCha에는 6개의 체크포인트가 있습니다:
google/matcha: MatCha를 하위 작업에 대해 fine-tune하는 데 사용되는 기본 MatCha 모델google/matcha-chartqa: ChartQA 데이터셋으로 fine-tuning된 MatCha 모델입니다. 차트에 대한 질문에 답하는 데 사용할 수 있습니다.google/matcha-plotqa-v1: PlotQA 데이터셋으로 fine-tuning된 MatCha 모델입니다. 플롯에 대한 질문에 답하는 데 사용할 수 있습니다.google/matcha-plotqa-v2: PlotQA 데이터셋으로 fine-tuning된 MatCha 모델입니다. 플롯에 대한 질문에 답하는 데 사용할 수 있습니다.google/matcha-chart2text-statista: Statista 데이터셋으로 fine-tuning된 MatCha 모델.google/matcha-chart2text-pew: Pew 데이터셋으로 fine-tuning된 MatCha 모델.
chart2text-pew 및 chart2text-statista에서 fine-tuning된 모델은 요약에 더 적합하고, plotqa 및 chartqa에서 fine-tuning된 모델은 질의응답에 더 적합합니다.
다음과 같이 이 모델들을 사용할 수 있습니다(ChartQA 데이터셋에 대한 예시):
import requests
from PIL import Image
from transformers import AutoProcessor, Pix2StructForConditionalGeneration
model = Pix2StructForConditionalGeneration.from_pretrained("google/matcha-chartqa").to(0, device_map="auto")
processor = AutoProcessor.from_pretrained("google/matcha-chartqa")
url = "https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/20294671002019.png"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(images=image, text="Is the sum of all 4 places greater than Laos?", return_tensors="pt").to(0)
predictions = model.generate(**inputs, max_new_tokens=512)
print(processor.decode(predictions[0], skip_special_tokens=True))파인튜닝
MatCha를 fine-tune하려면 pix2struct fine-tuning notebook을 참조하세요. Pix2Struct 모델의 경우, Adafactor와 cosine learning rate scheduler를 사용하여 모델을 fine-tune하면 수렴이 더 빠르게 이루어진다는 것을 확인했습니다:
from transformers.optimization import Adafactor, get_cosine_schedule_with_warmup
optimizer = Adafactor(self.parameters(), scale_parameter=False, relative_step=False, lr=0.01, weight_decay=1e-05)
scheduler = get_cosine_schedule_with_warmup(optimizer, num_warmup_steps=1000, num_training_steps=40000)Update on GitHubMatCha는
Pix2Struct아키텍처를 사용하여 학습된 모델입니다.Pix2Struct에 대한 자세한 내용은 Pix2Struct 문서에서 확인하실 수 있습니다.