Hub documentation

Distilabel

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Distilabel

Distilabel, doğrulanmış araştırma makalelerine dayalı hızlı, güvenilir ve ölçeklenebilir boru hatlarına ihtiyaç duyan mühendisler için sentetik veri ve yapay zekâ geri bildirimi için bir çerçevedir.

Distilabel, geleneksel öngörücü NLP (sınıflandırma, çıkarım vb.) ile üretken ve büyük dil modeli senaryoları (talimat takibi, diyalog üretimi, yargılama vb.) dahil olmak üzere geniş bir proje yelpazesinde sentetik veri ve yapay zekâ geri bildirimi üretmek için kullanılabilir. Distilabel’in programatik yaklaşımı, veri üretimi ve yapay zekâ geri bildirimi için ölçeklenebilir iş akışları oluşturmanıza olanak tanır. Distilabel’in amacı, yapay zekâ geri bildirimiyle üretme ve yargılama için doğrulanmış araştırma yöntemlerine dayalı olarak yüksek kaliteli ve çeşitli veri setlerini hızla üreterek yapay zekâ geliştirmenizi hızlandırmaktır.

İnsanlar distilabel ile neler geliştiriyor?

Argilla topluluğu, harika veri kümeleri ve modeller oluşturmak için distilabel kullanır.

  • 1M OpenHermesPreference, teknium/OpenHermes-2.5 LLM'i kullanılarak üretilmiş yaklaşık 1 milyon yapay zeka tercihinden oluşan bir veri setidir. distilabel'in veri seti geliştirmeyi nasıl ölçeklendirebileceğinizi ve artırabileceğinizi gösteren harika bir örnektir.
  • distilabeled Intel Orca DPO veri seti, geliştirilmiş OpenHermes modelinin ince ayarında kullanıldı. Bu veri seti, Argilla'daki insan kürasyonu ile distilabel'den gelen yapay zekâ geri bildirimlerinin birleştirilmesiyle oluşturuldu; bu sayede Intel Orca veri setinin geliştirilmiş bir sürümü elde edildi ve orijinal veri seti üzerinde ince ayar yapılan modelleri geride bıraktı.
  • haiku DPO verisi, herkesin belirli bir görev için sentetik bir veri seti oluşturabileceğinin bir örneğidir; bu veri seti, kürasyon ve değerlendirme sonrasında özel LLM'lerin ince ayarında kullanılabilir.

Ön koşullar

Önce Hugging Face hesabınızla oturum açın:

hf auth login

distilabel kurulu olduğundan emin olun:

pip install -U distilabel[vllm]

Distilabel iş akışları

Distilabel pipeline'ları, herhangi bir sayıda birbirine bağlı adım veya görevle oluşturulabilir. Bir adımın veya görevin çıktısı, diğerine girdi olarak aktarılır. LLM'lerle karmaşık veri işleme ve üretim pipeline'ları oluşturmak için bir dizi adım birbirine bağlanabilir. Her adımın girdisi, veri bir partisidir; bu parti, sözlüklerden oluşan bir listeyi içerir. Her sözlük veri setinin bir satırını temsil eder ve anahtarlar sütun adlarıdır. Hugging Face hub'ından veri almak ve ona veri göndermek için, datasets.DatasetDict'nin bir soyutlaması olarak Distiset sınıfını tanımladık.

Distiset'i veri seti nesnesi olarak

distilabel'daki bir Pipeline, Distiset olarak adlandırılan özel bir Hugging Face datasets.DatasetDict türü döndürür.

Pipeline, Distiset içindeki birden çok alt küme üretebilir; bu, her alt küme için bir giriş içeren sözlük benzeri bir nesnedir. Bir Distiset, ardından tüm alt kümeler aynı depoda olacak şekilde Hugging Face Hub'a sorunsuz bir şekilde yüklenebilir.

Verileri Hub'dan bir Distiset'e yükleyin

Hub'dan veri yükleme örneğini göstermek için Prometheus 2 makalesini yeniden üretecek ve distilabel'de uygulanan PrometheusEval görevini kullanacağız. Prometheus 2 ve Prometheuseval görevleri, sırasıyla doğrudan değerlendirme ve çiftli sıralama görevleridir; yani bir talimat için referans cevapla veya referans cevap olmadan tek bir izole cevabın kalitesini değerlendirmek ve bir talimat için referans cevapla veya referans cevap olmadan bir cevabın kalitesini diğer bir cevapla karşılaştırarak değerlendirmek. Bu görevleri, Hugging Face H4 ekibi tarafından oluşturulan ve Hub'dan yüklenen HuggingFaceH4/instruction-dataset adlı veri setinde kullanacağız.

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

Ardından, hattın başlatılabilmesi ve verilerin Distiset nesnesinde saklanabilmesi için çalışma zamanı parametreleriyle pipeline.run çağrısını yapmamız gerekir.

distiset = pipeline.run(
    parameters={
        task.name: {
            "llm": {
                "generation_kwargs": {
                    "max_new_tokens": 1024,
                    "temperature": 0.7,
                },
            },
        },
    },
)

Bir distilabel Distiset'ini Hub'a gönder

Distiset'i bir Hugging Face deposuna gönderin; her alt küme farklı bir yapılandırmaya karşılık gelir:

distiset.push_to_hub(
    "my-org/my-dataset",
    commit_message="Initial commit",
    private=False,
    token=os.getenv("HF_TOKEN"),
)

📚 Kaynaklar

Update on GitHub