Hub documentation
Distilabel
Distilabel
Distilabel هو إطار عمل لبيانات اصطناعية وتغذية راجعة بالذكاء الاصطناعي موجه للمهندسين الذين يحتاجون إلى خطوط أنابيب سريعة وموثوقة وقابلة للتوسع، مبنية على أبحاث علمية موثقة.
يمكن استخدام Distilabel لتوليد بيانات اصطناعية وملاحظات ذكاء اصطناعي لمجموعة واسعة من المشاريع، بما في ذلك مشاريع معالجة اللغة الطبيعية التنبؤية التقليدية (التصنيف، الاستخراج، إلخ)، أو سيناريوهات النماذج التوليدية ونماذج اللغة الكبيرة (اتباع التعليمات، توليد الحوار، التحكيم، إلخ). يتيح النهج البرمجي في Distilabel بناء خطوط أنابيب قابلة للتوسع لتوليد البيانات وملاحظات الذكاء الاصطناعي. يهدف distilabel إلى تسريع تطوير الذكاء الاصطناعي لديك من خلال توليد مجموعات بيانات عالية الجودة ومتنوعة بسرعة، بناءً على منهجيات بحثية موثوقة لتوليد ملاحظات الذكاء الاصطناعي وتحكيمها.
بماذا يبني الناس باستخدام distilabel؟
تستخدم مجتمع Argilla أداة distilabel لإنشاء مجموعات بيانات ونماذج رائعة.
- يُعدّ 1M OpenHermesPreference مجموعة بيانات تضمّ نحو مليون تفضيل ذكاء اصطناعي تم توليدها باستخدام نموذج اللغة teknium/OpenHermes-2.5. وهو مثال رائع على كيفية استخدام distilabel لتوسيع نطاق تطوير مجموعات البيانات وزيادة حجمها.
- مجموعة بيانات distilabeled Intel Orca DPO المستخدمة لضبط نموذج OpenHermes المحسّن. تم بناء هذه المجموعة من خلال دمج التدقيق البشري في Argilla مع ملاحظات الذكاء الاصطناعي من distilabel، مما أدى إلى إصدار محسّن من مجموعة بيانات Intel Orca وتجاوز أداء النماذج المضبوطة على المجموعة الأصلية.
- يُعدّ بيانات هايكو DPO مثالاً على كيفية إنشاء أي شخص لمجموعة بيانات اصطناعية لمهمة محددة، والتي يمكن استخدامها بعد الترتيب والتقييم في الضبط الدقيق لنماذج اللغة الكبيرة المخصصة.
المتطلبات
أولاً سجّل الدخول بحساب Hugging Face الخاص بك:
hf auth login
تأكد من تثبيت distilabel:
pip install -U distilabel[vllm]
خطوط أنابيب Distilabel
يمكن بناء خطوط أنابيب Distilabel بأي عدد من الخطوات أو المهام المترابطة. يُغذّى ناتج خطوة أو مهمة واحدة كمدخل لخطوة أو مهمة أخرى. يمكن ربط سلسلة من الخطوات معًا لبناء خطوط أنابيب معقدة لمعالجة البيانات وتوليدها باستخدام نماذج LLM. مدخل كل خطوة هو دفعة من البيانات، تحتوي على قائمة من القواميس، حيث يمثل كل قاموس صفًا من مجموعة البيانات، وتكون المفاتيح أسماء الأعمدة. ولتغذية البيانات من مركز Hugging Face وإليه، عرّفنا فئة Distiset كتجريد لفئة datasets.DatasetDict.
Distiset ككائن مجموعة بيانات
يعيد خط أنابيب في distilabel نوعًا خاصًا من datasets.DatasetDict الخاص بـ Hugging Face يُسمى Distiset.
يمكن أن يُخرج Pipeline عدة مجموعات فرعية في Distiset، وهو كائن يشبه القاموس يحتوي على إدخال واحد لكل مجموعة فرعية. ثم يمكن دفع Distiset بسلاسة إلى Hugging Face Hub، مع وضع جميع المجموعات الفرعية في المستودع نفسه.
تحميل البيانات من Hub إلى Distiset
لإبراز مثال على تحميل البيانات من Hub، سنعيد إنتاج ورقة Prometheus 2 ونستخدم مهمة PrometheusEval المُنفَّذة في distilabel. مهام Prometheus 2 وPrometheuseval هي مهام تقييم مباشر وترتيب زوجي، أي تقييم جودة ردٍّ منفرد معزول لتعليمات معينة مع وجود إجابة مرجعية أو بدونه، وتقييم جودة ردٍّ مقابل ردٍّ آخر لتعليمات معينة مع وجود إجابة مرجعية أو بدونه، على التوالي. سنستخدم هذه المهام على مجموعة بيانات محمَّلة من Hub، أُنشئت بواسطة فريق H4 التابع لـ Hugging Face وتُسمى HuggingFaceH4/instruction-dataset.
from distilabel.llms import vLLM
from distilabel.pipeline import Pipeline
from distilabel.steps import KeepColumns, LoadDataFromHub
from distilabel.steps.tasks import PrometheusEval
if __name__ == "__main__":
with Pipeline(name="prometheus") as pipeline:
load_dataset = LoadDataFromHub(
name="load_dataset",
repo_id="HuggingFaceH4/instruction-dataset",
split="test",
output_mappings={"prompt": "instruction", "completion": "generation"},
)
task = PrometheusEval(
name="task",
llm=vLLM(
model="prometheus-eval/prometheus-7b-v2.0",
chat_template="[INST] {{ messages[0]['content'] }}\n{{ messages[1]['content'] }}[/INST]",
),
mode="absolute",
rubric="factual-validity",
reference=False,
num_generations=1,
group_generations=False,
)
keep_columns = KeepColumns(
name="keep_columns",
columns=["instruction", "generation", "feedback", "result", "model_name"],
)
load_dataset >> task >> keep_columnsثم نحتاج إلى استدعاء pipeline.run مع معاملات وقت التشغيل حتى يمكن إطلاق خط الأنابيب وتخزين البيانات في كائن Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)دفع مجموعة بيانات Distiset من distilabel إلى Hub
ادفع Distiset إلى مستودع Hugging Face، حيث سيُطابق كلٌّ من المجموعات الفرعية تكوينًا مختلفًا:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)📚 الموارد
- 🚀 مستندات Distilabel
- 🚀 مستندات Distilabel - distiset
- 🚀 مستندات Distilabel - prometheus
- 🆕 تقديم distilabel