# DePlot

## نظرة عامة

قُدِّم DePlot في ورقة [DePlot: One-shot visual language reasoning by plot-to-table translation](https://huggingface.co/papers/2212.10505) من تأليف Fangyu Liu وJulian Martin Eisenschlos وFrancesco Piccinno وSyrine Krichene وChenxi Pang وKenton Lee وMandar Joshi وWenhu Chen وNigel Collier وYasemin Altun.

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

*تُعدّ اللغة البصرية مثل الرسوم البيانية والمخططات شائعة الاستخدام في العالم البشري. ويتطلّب فهم المخططات والرسوم البيانية مهارات استدلال قوية. وتتطلّب النماذج ذات الأداء الأفضل حتى الآن (SOTA) على الأقلّ عشرات الآلاف من أمثلة التدريب، ولا تزال قدراتها الاستدلالية محدودة إلى حدٍّ كبير، لا سيّما في الاستعلامات المعقّدة التي يكتبها البشر. تقدّم هذه الورقة الحلّ الأول من نوعه للاستدلال على اللغة البصرية. نُفكّك تحدي الاستدلال على اللغة البصرية إلى خطوتين: (1) ترجمة المخطط إلى نص، و(2) الاستدلال على النصّ المُترجَم. وتكمن الفكرة المحورية في هذه الطريقة في وحدة تحويل الوسائط، التي تُسمّى DePlot، والتي تُترجم صورة المخطط أو الرسم البياني إلى جدول مُخطَّط. يمكن بعد ذلك استخدام مخرجات DePlot مباشرةً لتحفيز نموذج لغة كبير (LLM) مُدرَّب مسبقًا، بالاستفادة من قدرات الاستدلال بعدد قليل من الأمثلة (few-shot) لدى نماذج LLM. ولتحقيق DePlot، قُمنا بتوحيد مهمة تحويل المخطط إلى جدول من خلال إنشاء صيغ مهام ومقاييس موحّدة، وقُمنا بتدريب DePlot من البداية إلى النهاية على هذه المهمة. يمكن بعد ذلك استخدام DePlot جاهزةً للاستخدام مع نماذج LLM بطريقة قابلة للتوصيل والفصل (plug-and-play). وبالمقارنة مع نموذج SOTA مُعدَّل على أكثر من >28k نقطة بيانات، حقّق DePlot+LLM باستخدام تحفيز من نوع one-shot تحسّنًا بنسبة 24.0% على SOTA المُعدَّل في الاستعلامات التي يكتبها البشر من مهمة استعلام الرسوم البيانية (chart QA).*

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

## مثال على الاستخدام

حاليًا، يتوفر نقطة تفتيش واحدة لـ DePlot:

- `google/deplot`: نموذج DePlot المُحسَّن على مجموعة بيانات ChartQA

```python
import requests
from PIL import Image

from transformers import AutoProcessor, Pix2StructForConditionalGeneration

model = Pix2StructForConditionalGeneration.from_pretrained("google/deplot", device_map="auto")
processor = AutoProcessor.from_pretrained("google/deplot")
url = "https://raw.githubusercontent.com/vis-nlp/ChartQA/main/ChartQA%20Dataset/val/png/5090.png"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(images=image, text="Generate underlying data table of the figure below:", return_tensors="pt").to(model.device)
predictions = model.generate(**inputs, max_new_tokens=512)
print(processor.decode(predictions[0], skip_special_tokens=True))
```

## الضبط الدقيق

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

DePlot هو نموذج تم تدريبه باستخدام بنية `Pix2Struct`. للاطلاع على مرجع الواجهة البرمجية، راجع [توثيق `Pix2Struct`](./pix2struct).

