# MatCha

## نظرة عامة

قُدِّم MatCha في ورقة [MatCha: Enhancing Visual Language Pretraining with Math Reasoning and Chart Derendering](https://huggingface.co/papers/2212.09662)، من تأليف Fangyu Liu وFrancesco Piccinno وSyrine Krichene وChenxi Pang وKenton Lee وMandar Joshi وYasemin Altun وNigel Collier وJulian Martin Eisenschlos.

ينص ملخص الورقة البحثية على ما يلي:

*تنتشر بيانات اللغة البصرية مثل المخططات البيانية والرسوم البيانية والرسوم التوضيحية في العالم البشري. ومع ذلك، لا تُظهر نماذج اللغة البصرية المتقدمة أداءً جيدًا على هذه البيانات. نقترح MatCha (التدريب المسبق للاستدلال الرياضي وإعادة إنشاء الرسوم البيانية) لتعزيز قدرات نماذج اللغة البصرية في النمذجة المشتركة للرسوم البيانية/المخططات وبيانات اللغة. على وجه التحديد، نقترح عدة مهام تدريب مسبق تغطي تفكيك المخططات والاستدلال الرقمي، وهما القدرتان الرئيسيتان في نمذجة اللغة البصرية. نُجري تدريب MatCha المسبق انطلاقًا من Pix2Struct، وهو نموذج لغة بصرية من الصورة إلى النص تم اقتراحه مؤخرًا. على المعايير القياسية مثل PlotQA وChartQA، يتفوق نموذج MatCha على أحدث الطرق بنسبة تصل إلى ما يقرب من 20%. كما نفحص مدى انتقال تدريب MatCha المسبق إلى مجالات مثل لقطات الشاشة والمخططات في الكتب المدرسية والرسوم التوضيحية في المستندات، ونلاحظ تحسنًا عامًا، مما يؤكد فائدة تدريب MatCha المسبق في مهام اللغة البصرية الأوسع.*

## وصف النموذج

MatCha هو نموذج يتم تدريبه باستخدام بنية `Pix2Struct`. يمكنك العثور على مزيد من المعلومات حول `Pix2Struct` في [توثيق Pix2Struct](./pix2struct). MatCha هو مجموعة فرعية من الإجابة على الأسئلة البصرية ضمن بنية `Pix2Struct`. يقوم بعرض السؤال المدخل على الصورة والتنبؤ بالإجابة.

## الاستخدام

حالياً، تتوفر 6 نقاط تحقق لنموذج MatCha:

- `google/matcha`: نموذج MatCha الأساسي، ويُستخدم لضبط MatCha على المهام الفرعية
- `google/matcha-chartqa`: نموذج MatCha مُعدّل على مجموعة بيانات ChartQA. يمكن استخدامه للإجابة عن الأسئلة المتعلقة بالرسوم البيانية.
- `google/matcha-plotqa-v1`: نموذج MatCha مُعاد تدريبه على مجموعة بيانات PlotQA. يمكن استخدامه للإجابة عن الأسئلة المتعلقة بالمخططات البيانية.
- `google/matcha-plotqa-v2`: نموذج MatCha مُعاد تدريبه على مجموعة بيانات PlotQA. يمكن استخدامه للإجابة عن الأسئلة المتعلقة بالمخططات البيانية.
- `google/matcha-chart2text-statista`: نموذج MatCha مُعدّل على مجموعة بيانات Statista.
- `google/matcha-chart2text-pew`: نموذج MatCha مُعدّل على مجموعة بيانات Pew.

النماذج المُحسَّنة على `chart2text-pew` و`chart2text-statista` أكثر ملاءمةً للتلخيص، بينما النماذج المُحسَّنة على `plotqa` و`chartqa` أكثر ملاءمةً للإجابة على الأسئلة.

يمكنك استخدام هذه النماذج على النحو التالي (مثال على مجموعة بيانات ChartQA):

```python
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، يُرجى الرجوع إلى [دفتر ضبط pix2struct](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb). بالنسبة لنماذج `Pix2Struct`، وجدنا أن ضبط النموذج باستخدام Adafactor ومجدول معدل تعلم جيب التمام يؤدي إلى تقارب أسرع:

```python
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)
```

MatCha هو نموذج يتم تدريبه باستخدام بنية `Pix2Struct`. يمكنك العثور على مزيد من المعلومات حول `Pix2Struct` في [توثيق Pix2Struct](./pix2struct).

