Hub documentation
Distilabel
Distilabel
Distilabel adalah kerangka kerja untuk data sintetis dan umpan balik AI bagi para insinyur yang membutuhkan pipeline cepat, andal, dan dapat diskalakan berdasarkan paper penelitian yang telah diverifikasi.
Distilabel dapat digunakan untuk menghasilkan data sintetis dan umpan balik AI untuk berbagai proyek, termasuk NLP prediktif tradisional (klasifikasi, ekstraksi, dll.) atau skenario model bahasa generatif dan besar (pengikutian instruksi, generasi dialog, penilaian, dll.). Pendekatan programatik Distilabel memungkinkan Anda membangun pipeline yang dapat diskalakan untuk generasi data dan umpan balik AI. Tujuan distilabel adalah mempercepat pengembangan AI Anda dengan cepat menghasilkan dataset berkualitas tinggi dan beragam berdasarkan metodologi penelitian yang terverifikasi untuk menghasilkan dan menilai dengan umpan balik AI.
Apa yang dibangun orang-orang dengan distilabel?
Komunitas Argilla menggunakan distilabel untuk membuat dataset dan model yang luar biasa.
- 1M OpenHermesPreference adalah dataset berisi sekitar 1 juta preferensi AI yang dihasilkan menggunakan LLM teknium/OpenHermes-2.5. Dataset ini merupakan contoh yang sangat baik tentang bagaimana Anda dapat menggunakan distilabel untuk memperluas dan meningkatkan pengembangan dataset.
- dataset distilabeled Intel Orca DPO yang digunakan untuk fine-tuning model OpenHermes yang ditingkatkan. Dataset ini dibangun dengan menggabungkan kurasi manusia di Argilla dengan umpan balik AI dari distilabel, menghasilkan versi yang ditingkatkan dari dataset Intel Orca dan melampaui model yang di-fine-tune pada dataset aslinya.
- data DPO haiku adalah contoh bagaimana siapa pun dapat membuat dataset sintetis untuk tugas tertentu, yang setelah kurasi dan evaluasi dapat digunakan untuk fine-tuning LLM kustom.
Prasyarat
Pertama masuk dengan akun Hugging Face Anda:
hf auth login
Pastikan Anda telah menginstal distilabel:
pip install -U distilabel[vllm]
Pipeline Distilabel
Pipeline Distilabel dapat dibangun dengan sejumlah langkah atau tugas yang saling terhubung. Output dari satu langkah atau tugas diberikan sebagai input untuk langkah atau tugas lainnya. Serangkaian langkah dapat dirangkai untuk membangun pipeline pemrosesan dan generasi data yang kompleks dengan LLM. Input dari setiap langkah adalah batch data, berisi daftar kamus, di mana setiap kamus mewakili satu baris dataset, dan kuncinya adalah nama kolom. Untuk memberi data dari dan ke Hugging Face hub, kami telah mendefinisikan kelas Distiset sebagai abstraksi dari datasets.DatasetDict.
Distiset sebagai objek dataset
Pipeline di distilabel mengembalikan tipe khusus dari Hugging Face datasets.DatasetDict yang disebut Distiset.
Pipeline dapat mengoutput beberapa subset dalam Distiset, yaitu objek seperti kamus dengan satu entri per subset. Distiset kemudian dapat didorong secara mulus ke Hugging Face Hub, dengan semua subset berada dalam repositori yang sama.
Muat data dari Hub ke Distiset
Untuk menunjukkan contoh pemuatan data dari Hub, kami akan mereproduksi makalah Prometheus 2 dan menggunakan tugas PrometheusEval yang diimplementasikan di distilabel. Tugas Prometheus 2 dan Prometheuseval adalah tugas penilaian langsung dan peringkat berpasangan, yaitu menilai kualitas satu respons terisolasi untuk instruksi tertentu dengan atau tanpa jawaban referensi, dan menilai kualitas satu respons terhadap respons lainnya untuk instruksi tertentu dengan atau tanpa jawaban referensi, masing-masing. Kami akan menggunakan tugas-tugas ini pada dataset yang dimuat dari Hub, yang dibuat oleh tim H4 Hugging Face bernama 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_columnsLalu, kita perlu memanggil pipeline.run dengan parameter runtime agar pipeline dapat diluncurkan dan data dapat disimpan dalam objek Distiset.
distiset = pipeline.run(
parameters={
task.name: {
"llm": {
"generation_kwargs": {
"max_new_tokens": 1024,
"temperature": 0.7,
},
},
},
},
)Push distilabel Distiset ke Hub
Dorong Distiset ke repositori Hugging Face, di mana setiap subset akan sesuai dengan konfigurasi yang berbeda:
distiset.push_to_hub(
"my-org/my-dataset",
commit_message="Initial commit",
private=False,
token=os.getenv("HF_TOKEN"),
)π Sumber daya
- π Dokumentasi Distilabel
- π Dokumentasi Distilabel - distiset
- π Dokumentasi Distilabel - prometheus
- π Memperkenalkan distilabel