# MatCha

## Aperçu

MatCha a été proposé dans l'article [MatCha: Enhancing Visual Language Pretraining with Math Reasoning and Chart Derendering](https://huggingface.co/papers/2212.09662), de Fangyu Liu, Francesco Piccinno, Syrine Krichene, Chenxi Pang, Kenton Lee, Mandar Joshi, Yasemin Altun, Nigel Collier, Julian Martin Eisenschlos.

L'abstract de l'article énonce ce qui suit :

*Les données de langage visuel, telles que les graphiques, les diagrammes et les infographies, sont omniprésents dans le monde humain. Cependant, les modèles de vision-langage de pointe ne performe pas bien sur ces données. Nous proposons MatCha (pré-entraînement pour le raisonnement mathématique et le re-rendu de graphiques) afin d'améliorer les capacités des modèles de langage visuel à modéliser conjointement les graphiques et les données de langage. Plus précisément, nous proposons plusieurs tâches de pré-entraînement couvrant la déconstruction des graphiques et le raisonnement numérique, qui sont des capacités clés en modélisation de langage visuel. Nous effectuons le pré-entraînement MatCha en partant de Pix2Struct, un modèle de langage visuel image-vers-texte récemment proposé. Sur des benchmarks standard tels que PlotQA et ChartQA, le modèle MatCha surpasse les méthodes de pointe d'environ 20 %. Nous examinons également dans quelle mesure le pré-entraînement MatCha se transfère à des domaines tels que les captures d'écran, les schémas de manuels et les figures de documents, et observons une amélioration globale, confirmant l'utilité du pré-entraînement MatCha pour des tâches de langage visuel plus larges.*

## Description du modèle

MatCha est un modèle entraîné à l'aide de l'architecture `Pix2Struct`. Vous trouverez plus d'informations sur `Pix2Struct` dans la [documentation Pix2Struct](./pix2struct). MatCha est un sous-ensemble de Question Answering visuel de l'architecture `Pix2Struct`. Il affiche la question d'entrée sur l'image et prédit la réponse.

## Utilisation

Actuellement, 6 points de contrôle sont disponibles pour MatCha :

- `google/matcha` : le modèle MatCha de base, utilisé pour l’ajustement fin de MatCha sur des tâches spécifiques
- `google/matcha-chartqa` : modèle MatCha ajusté sur le jeu de données ChartQA. Il peut être utilisé pour répondre à des questions sur des graphiques.
- `google/matcha-plotqa-v1` : modèle MatCha ajusté sur le jeu de données PlotQA. Il peut être utilisé pour répondre à des questions sur des graphiques.
- `google/matcha-plotqa-v2` : modèle MatCha ajusté sur le jeu de données PlotQA. Il peut être utilisé pour répondre à des questions sur des graphiques.
- `google/matcha-chart2text-statista` : modèle MatCha affiné sur le jeu de données Statista.
- `google/matcha-chart2text-pew` : modèle MatCha affiné sur le jeu de données Pew.

Les modèles affinés sur `chart2text-pew` et `chart2text-statista` sont plus adaptés à la synthèse, tandis que les modèles affinés sur `plotqa` et `chartqa` sont plus adaptés au question-réponse.

Vous pouvez utiliser ces modèles comme suit (exemple sur un jeu de données 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))
```

## Ajustement fin

Pour affiner MatCha, reportez-vous au [notebook d’affinage](https://github.com/huggingface/notebooks/blob/main/examples/image_captioning_pix2struct.ipynb) de pix2struct. Pour les modèles `Pix2Struct`, nous avons constaté que l’affinage du modèle avec Adafactor et un planificateur de taux d’apprentissage cosinus conduit à une convergence plus rapide :

```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 est un modèle entraîné à l'aide de l'architecture `Pix2Struct`. Vous trouverez plus d'informations sur `Pix2Struct` dans la [documentation Pix2Struct](./pix2struct).

