TRL documentation

Veri seti biçimleri ve türleri

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.18.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Veri seti biçimleri ve türleri

Bu kılavuz, TRL'deki her eğitimcinin (trainer) desteklediği veri seti biçimlerinin ve türlerinin genel bir bakışını sunar.

Veri seti biçimleri ve türlerinin genel bakışı

  • Bir veri setinin formatı, verinin nasıl yapılandırıldığını ifade eder ve genellikle standart veya konversasyonel olarak sınıflandırılır.
  • type, veri setinin tasarlandığı belirli görevle ilişkilidir; örneğin prompt-only veya preference. Her tür, tablodaki gibi göreve göre değişen sütunlarıyla karakterize edilir.
Tür \ BiçimStandartSohbet
Dil modellemesi
{"text": "The sky is blue."}
{"messages": [{"role": "user", "content": "What color is the sky?"},
              {"role": "assistant", "content": "It is blue."}]}
Sadece istem
{"prompt": "The sky is"}
{"prompt": [{"role": "user", "content": "What color is the sky?"}]}
İstem-tamamlama
{"prompt": "The sky is",
 "completion": " blue."}
{"prompt": [{"role": "user", "content": "What color is the sky?"}],
 "completion": [{"role": "assistant", "content": "It is blue."}]}
Tercih
{"prompt": "The sky is",
 "chosen": " blue.",
 "rejected": " green."}
veya, örtük prompt ile:
{"chosen": "The sky is blue.",
 "rejected": "The sky is green."}
{"prompt": [{"role": "user", "content": "What color is the sky?"}],
 "chosen": [{"role": "assistant", "content": "It is blue."}],
 "rejected": [{"role": "assistant", "content": "It is green."}]}
veya, örtük istemle:
{"chosen": [{"role": "user", "content": "What color is the sky?"},
              {"role": "assistant", "content": "It is blue."}],
 "rejected": [{"role": "user", "content": "What color is the sky?"},
                {"role": "assistant", "content": "It is green."}]}
Eşleşmemiş tercih
{"prompt": "The sky is",
 "completion": " blue.",
 "label": True}
{"prompt": [{"role": "user", "content": "What color is the sky?"}],
 "completion": [{"role": "assistant", "content": "It is green."}],
 "label": False}

Biçimler

Standart

Standart veri seti biçimi genellikle düz metin dizgilerinden oluşur. Veri setindeki sütunlar, göreve göre değişir. Bu, TRL eğitimcilerinin beklediği biçimdir. Aşağıda, farklı görevler için standart veri seti biçimlerinin örnekleri verilmiştir:

# Language modeling
language_modeling_example = {"text": "The sky is blue."}
# Preference
preference_example = {"prompt": "The sky is", "chosen": " blue.", "rejected": " green."}
# Unpaired preference
unpaired_preference_example = {"prompt": "The sky is", "completion": " blue.", "label": True}

Sohbet

Konuşma veri setleri, kullanıcılar ve asistanlar arasındaki diyalog veya sohbet etkileşimlerini içeren görevlerde kullanılır. Standart veri seti biçimlerinden farklı olarak, bu veri setleri her mesajın bir role (ör. "user" veya "assistant") ve content (mesaj metni) alanına sahip olduğu mesaj dizilerini içerir.

messages = [
    {"role": "user", "content": "Hello, how are you?"},
    {"role": "assistant", "content": "I'm doing great. How can I help you today?"},
    {"role": "user", "content": "I'd like to show off how chat templating works!"},
]

Standart veri setlerinde olduğu gibi, konuşma veri setlerindeki sütunlar da görevlere göre değişir. Aşağıda, farklı görevler için konuşma veri seti biçimlerinin örnekleri yer almaktadır:

# Prompt-completion
prompt_completion_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
                             "completion": [{"role": "assistant", "content": "It is blue."}]}
# Preference
preference_example = {
    "prompt": [{"role": "user", "content": "What color is the sky?"}],
    "chosen": [{"role": "assistant", "content": "It is blue."}],
    "rejected": [{"role": "assistant", "content": "It is green."}],
}

Araç Çağrısı

Bazı sohbet şablonları, modelin üretim sırasında harici işlevlerle etkileşim kurmasını sağlayan araç çağrısını destekler; bu işlevlere araçlar denir. Bu özellik, modelin bir araç çağırmaya karar verdiğinde standart bir "content" mesajı yerine "tool_calls" alanını çıkarmasına olanak tanıyarak modelin konuşma yeteneklerini genişletir.

Asistan bir araç çağrısı başlattıktan sonra, araç çalışır ve çıktısını döndürür. Asistan daha sonra bu çıktıyı işleyebilir ve konuşmayı buna göre sürdürebilir.

Araç çağırma etkileşiminin basit bir örneği:

messages = [
    {"role": "user", "content": "Turn on the living room lights."},
    {"role": "assistant", "tool_calls": [
        {"type": "function", "function": {
            "name": "control_light",
            "arguments": {"room": "living room", "state": "on"}
        }}]
    },
    {"role": "tool", "name": "control_light", "content": "The lights in the living room are now on."},
    {"role": "assistant", "content": "Done!"}
]

Araç çağrısı ile Denetimli İnce Ayar (SFT) için veri setleri hazırlanırken, veri setinizin tools adlı ek bir sütun içermesi önemlidir. Bu sütun, model için kullanılabilir araçların listesini içerir ve genellikle sohbet şablonu tarafından sistem istemcisinin oluşturulmasında kullanılır.

Araçlar, kodlanmış bir JSON şeması biçiminde belirtilmelidir. Bu şemayı, get_json_schema yardımcı işlevini kullanarak Python işlev imzalarından otomatik olarak oluşturabilirsiniz:

import json
from transformers.utils import get_json_schema

def control_light(room: str, state: str) -> str:
    """
    Controls the lights in a room.

    Args:
        room: The name of the room.
        state: The desired state of the light ("on" or "off").

    Returns:
        str: A message indicating the new state of the lights.
    """
    return f"The lights in {room} are now {state}."

# Generate JSON schema
json_schema = get_json_schema(control_light)

Oluşturulan şema şu şekilde görünür:

{"type": "function", "function": {"name": "control_light", "description": "Controls the lights in a room.", "parameters": {"type": "object", "properties": {"room": {"type": "string", "description": "The name of the room."}, "state": {"type": "string", "description": "The desired state of the light (\"on\" or \"off\")."}}, "required": ["room", "state"]}, "return": {"type": "string", "description": "str: A message indicating the new state of the lights."}}}

SFT için tam bir veri seti girişi şu şekilde görünebilir:

{"messages": messages, "tools": [json_schema]}

Dataset almak için, araç argümanları için Json() tipini kullanmanız gerekir çünkü bunlar sabit alan ve tiplere sahip sözlükler değil, keyfi JSON nesneleridir:

from datasets import Dataset

data = [
    {"messages": messages1, "tools": [json_schema1]},
    {"messages": messages2, "tools": [json_schema2]},
]
# auto-apply the Json() type
dataset = Dataset.from_list(data, on_mixed_types="use_json")

# or specify the features manually
from datasets import Features, Json, List, Value

features = Features(
    {
        "messages": List({"role": Value("string"), "content": Value("string"), "tool_calls": List(Json())}),
        "tools": List(Json()),
    }
)
dataset = Dataset.from_list(data, features=features)

datasets kütüphanesinin Json() türüne sahip olmayan eski sürümlerinde (<4.7.0), tools öğesini bir JSON str olarak (json.dumps([...]) ile) saklamalısınız:

dataset = Dataset.from_list(
    [{"messages": messages1, "tools": json.dumps([json_schema1])},
     {"messages": messages2, "tools": json.dumps([json_schema2])}]
)

Araç çağrısı hakkında daha ayrıntılı bilgi için transformers belgelerindeki Tool Calling bölümüne ve Tool Use, Unified blog yazısına bakın.

Harmony

Harmony yanıt biçimi, OpenAI GPT OSS modelleri ile tanıtıldı. Bu biçim, model davranışıyla ilgili çıkarım, fonksiyon çağrıları ve meta veriler için daha zengin bir yapı ekleyerek sohbet biçimini genişletir. Öne çıkan özellikler şunlardır:

  • Geliştirici rolü – Yüksek düzey talimatlar sağlar (sistem istemine benzer) ve kullanılabilir araçları listeler.

  • Kanallar – Asistan çıktılarını farklı türlerde ayrı akışlara ayırın:

    • analysis – "thinking" anahtarı içinden, dahili akıl yürütme için
    • final – kullanıcıya yönelik yanıt, "content" anahtarı
    • commentary – araç çağrıları veya meta notlar için
  • Akılcılama çabası – Modelin ne kadar düşünme süreci göstermesi gerektiğine işaret eder (ör. "low", "medium", "high").

  • Model kimliği – Asistanın kişiliğini açıkça tanımlar.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("openai/gpt-oss-20b")

messages = [
    {"role": "developer", "content": "Use a friendly tone."},
    {"role": "user", "content": "What is the meaning of life?"},
    {"role": "assistant", "thinking": "Deep reflection...", "content": "The final answer is..."},
]

print(
    tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        reasoning_effort="low",
        model_identity="You are HuggingGPT, a large language model trained by Hugging Face.",
    )
)

Bunun sonucu şudur:

<|start|>system<|message|>You are HuggingGPT, a large language model trained by Hugging Face.
Knowledge cutoff: 2024-06
Current date: 2025-08-03

Reasoning: low

# Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|><|start|>developer<|message|># Instructions

Use a friendly tone.<|end|><|start|>user<|message|>What is the meaning of life?<|end|><|start|>assistant<|channel|>analysis<|message|>Deep reflection...<|end|><|start|>assistant<|channel|>final<|message|>The final answer is...<|return|>

Mesaj yapısı, desteklenen alanlar ve gelişmiş kullanım hakkında tüm ayrıntılar için Harmony belgeleri'ne bakın.

Türler

Dil modellemesi

Bir dil modelleme veri seti, tam bir metin dizisi içeren "text" (sohbet veri setleri için "messages") sütunundan oluşur.

# Standard format
language_modeling_example = {"text": "The sky is blue."}
# Conversational format
language_modeling_example = {"messages": [
    {"role": "user", "content": "What color is the sky?"},
    {"role": "assistant", "content": "It is blue."}
]}

Sadece istem

Sadece istem içeren bir veri setinde, yalnızca başlangıç istemi (soru veya eksik cümle) "prompt" anahtarı altında sağlanır. Eğitim, genellikle bu isteme dayalı olarak tamamlama üretmeyi içerir; model, verilen girdiyi devam ettirmeyi veya tamamlamayı öğrenir.

# Standard format
prompt_only_example = {"prompt": "The sky is"}
# Conversational format
prompt_only_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}]}

Sadece istem içeren veri setlerinin örnekleri için Sadece istem içeren veri setleri koleksiyonu başlığına bakın.

Her ne kadar yalnızca istem (prompt-only) ve dil modelleme (language modeling) türleri benzer olsa da, girdinin işleniş biçiminde farklılık gösterirler. Yalnızca istem türünde, istem, modelin tamamlamasını veya devam ettirmesini bekleyen kısmi bir girdiyi temsil ederken; dil modelleme türünde girdi, tam bir cümle veya dizi olarak ele alınır. TRL bu iki türü farklı biçimde işler. Aşağıda, her bir tür için apply_chat_template işlevinin çıktısındaki farkı gösteren bir örnek yer almaktadır:

from transformers import AutoTokenizer
from trl import apply_chat_template

tokenizer = AutoTokenizer.from_pretrained("microsoft/Phi-3-mini-128k-instruct")

# Example for prompt-only type
prompt_only_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}]}
apply_chat_template(prompt_only_example, tokenizer)
# Output: {'prompt': '<|user|>\nWhat color is the sky?<|end|>\n<|assistant|>\n'}

# Example for language modeling type
lm_example = {"messages": [{"role": "user", "content": "What color is the sky?"}]}
apply_chat_template(lm_example, tokenizer)
# Output: {'text': '<|user|>\nWhat color is the sky?<|end|>\n<|endoftext|>'}
  • Sadece istem çıktısı, asistanın turunun başlangıcını gösteren ve modelin bir tamamlama üretmesini bekleyen '<|assistant|>\n' içerir.
  • Buna karşın, dil modelleme çıktısı girdiyi tam bir diziş olarak ele alır ve metnin sonunu işaret ederek ek içerik beklenmediğini belirtmek için '<|endoftext|>' ile sonlandırır.

İstem-tamamlama

Bir prompt-completion veri seti, bir "prompt" ve bir "completion" içerir.

# Standard format
prompt_completion_example = {"prompt": "The sky is", "completion": " blue."}
# Conversational format
prompt_completion_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
                             "completion": [{"role": "assistant", "content": "It is blue."}]}

Prompt-tamamlama veri seti örnekleri için Prompt-tamamlama veri setleri koleksiyonu'na bakın.

Tercih

Tercih veri seti, modelin aynı istem için iki veya daha fazla olası tamamlama arasından seçim yapacak şekilde eğitildiği görevlerde kullanılır. Bu veri seti bir "prompt", bir "chosen" tamamlama ve bir "rejected" tamamlama içerir. Model, "rejected" yanıt yerine "chosen" yanıtı seçecek şekilde eğitilir. Bazı veri setleri "prompt" sütununu içermeyebilir; bu durumda istem örtük olup doğrudan "chosen" ve "rejected" tamamlamalarının içinde yer alır. Mümkün olduğunda açık istemler kullanmanızı öneririz.

# Standard format
## Explicit prompt (recommended)
preference_example = {"prompt": "The sky is", "chosen": " blue.", "rejected": " green."}
# Implicit prompt
preference_example = {"chosen": "The sky is blue.", "rejected": "The sky is green."}

# Conversational format
## Explicit prompt (recommended)
preference_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
                      "chosen": [{"role": "assistant", "content": "It is blue."}],
                      "rejected": [{"role": "assistant", "content": "It is green."}]}
## Implicit prompt
preference_example = {"chosen": [{"role": "user", "content": "What color is the sky?"},
                                 {"role": "assistant", "content": "It is blue."}],
                      "rejected": [{"role": "user", "content": "What color is the sky?"},
                                   {"role": "assistant", "content": "It is green."}]}

Tercih veri setleri örnekleri için Tercih veri setleri koleksiyonu'na bakın.

Bazı tercih veri setleri, Hugging Face Hub'da dpo etiketiyle bulunabilir. Tercih veri setlerini belirlemek için librarian-bots'ın DPO Koleksiyonlarını da keşfedebilirsiniz.

Eşleşmemiş tercih

Eşleşmemiş bir tercih veri seti, bir tercih veri setine benzer; ancak aynı istem için "chosen" ve "rejected" tamamlamaları içermek yerine, tek bir "completion" ve bu tamamlamanın tercih edilip edilmediğini gösteren bir "label" içerir.

# Standard format
unpaired_preference_example = {"prompt": "The sky is", "completion": " blue.", "label": True}
# Conversational format
unpaired_preference_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
                               "completion": [{"role": "assistant", "content": "It is blue."}],
                               "label": True}

Eşleşmemiş tercih veri setleri örnekleri için Eşleşmemiş tercih veri setleri koleksiyonu'na bakın.

Hangi veri seti türü kullanılmalı?

Doğru veri seti türünü seçmek, üzerinde çalıştığınız görevin ve kullandığınız TRL eğitimcisinin (trainer) özel gereksinimlerine bağlıdır. Aşağıda, her bir TRL eğitimcisinin desteklediği veri seti türlerinin kısa bir özeti yer almaktadır.

TrainerBeklenen veri seti türü
AsyncGRPOTrainerSadece istem
DPOTrainerTercih (açık istek önerilir)
GRPOTrainerSadece istem
KTOTrainerEşleşmemiş tercih veya Tercih (açık istek önerilir)
RewardTrainerTercih (örtük istem önerilir)
RLOOTrainerSadece istem
SFTTrainerDil modellemesi veya İpucu tamamlama
experimental.cpo.CPOTrainerTercih (açık istek önerilir)
experimental.gkd.GKDTrainerİstem-tamamlama
experimental.online_dpo.OnlineDPOTrainerSadece istem
experimental.orpo.ORPOTrainerTercih (açık istek önerilir)

TRL ile herhangi bir veri seti kullanma: ön işleme ve dönüştürme

Birçok veri seti, belirli görevlere özel biçimlerde gelir ve bu biçimler TRL ile doğrudan uyumlu olmayabilir. Bu tür veri setlerini TRL ile kullanmak için, gerekli biçime dönüştürülerek ön işleme tabi tutmanız gerekebilir.

Bunu kolaylaştırmak için, yaygın veri seti dönüşümlerini kapsayan bir örnek betikler seti sunuyoruz.

Örnek: UltraFeedback veri seti

Örnek olarak UltraFeedback veri setini ele alalım. İşte veri setinin önizlemesi:

Yukarıda gösterildiği gibi, veri seti biçimi beklenen yapıyla eşleşmiyor. Konuşma formatında değil, sütun adları farklı ve sonuçlar farklı modellere (ör. Bard, GPT-4) ve farklı yönlere (ör. “helpfulness”, “honesty”) ait.

Sağlanan dönüştürme betiği examples/datasets/ultrafeedback.py ile bu veri setini eşleşmemiş tercih türüne dönüştürebilir ve Hub'a yükleyebilirsiniz:

python examples/datasets/ultrafeedback.py --push_to_hub --repo_id trl-lib/ultrafeedback-gpt-3.5-turbo-helpfulness

Dönüştürüldükten sonra veri seti şu görünüme sahip olacaktır:

Şimdi, bu veri setini TRL ile kullanabilirsiniz!

Sağlanan betikleri uyarlayarak veya kendi betiklerinizi oluşturarak herhangi bir veri setini TRL ile uyumlu bir formata dönüştürebilirsiniz.

Veri seti türlerini dönüştürme yardımcıları

Bu bölüm, farklı veri seti türleri arasında dönüştürmenize yardımcı olmak için örnek kodlar sağlar. Bazı dönüşümler sohbet şablonu uygulandıktan sonra (yani standart formatta) yapılabilse de, tutarlı çalışmasını sağlamak için dönüşümün sohbet şablonu uygulanmadan önce yapılmasını öneririz.

Basitlik adına, aşağıdaki örneklerin bazıları bu öneriyi takip etmeyip standart biçimi kullanır. Ancak, dönüşümler herhangi bir değişiklik yapılmadan doğrudan konuşma biçimine uygulanabilir.

\tenDil modellemesiİstem-tamamlamaSadece istemGizli istem ile tercihTercihEşleşmemiş tercih
Dil modellemesiN/AN/AN/AN/AN/AN/A
İstem-tamamlama🔗N/A🔗N/AN/AN/A
Sadece istemN/AN/AN/AN/AN/AN/A
Gizli istem ile tercih🔗🔗🔗N/A🔗🔗
Tercih🔗🔗🔗🔗N/A🔗
Eşleşmemiş tercih🔗🔗🔗N/AN/AN/A

İstem-tamamlama dil modelleme veri setine

Bir istem-tamamlama veri setini dil modelleme veri setine dönüştürmek için istemi ve tamamlamayı birleştirin.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is"],
    "completion": [" blue.", " in the sky."],
})

def concat_prompt_completion(example):
    return {"text": example["prompt"] + example["completion"]}

dataset = dataset.map(concat_prompt_completion, remove_columns=["prompt", "completion"])
>>> dataset[0]
{'text': 'The sky is blue.'}

İstem-tamamlama'dan yalnızca istem veri setine

Bir prompt-tamamlama veri setini yalnızca prompt içeren bir veri setine dönüştürmek için tamamlamayı kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is"],
    "completion": [" blue.", " in the sky."],
})

dataset = dataset.remove_columns("completion")
>>> dataset[0]
{'prompt': 'The sky is'}

Gizli istem içeren tercihlerden dil modelleme veri setine

Gizli istem içeren bir tercih veri setini dil modelleme veri setine dönüştürmek için, reddedilen sütununu kaldırın ve "chosen" sütununu "text" olarak yeniden adlandırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "chosen": ["The sky is blue.", "The sun is in the sky."],
    "rejected": ["The sky is green.", "The sun is in the sea."],
})

dataset = dataset.rename_column("chosen", "text").remove_columns("rejected")
>>> dataset[0]
{'text': 'The sky is blue.'}

Gizli istem içeren tercihlerden istem-tamamlama veri setine

Gizli istem içeren bir tercih veri setini istem-tamamlama veri setine dönüştürmek için, istemi extract_prompt() ile çıkarın, reddedileni kaldırın ve "chosen" sütununu "completion" olarak yeniden adlandırın.

from datasets import Dataset
from trl import extract_prompt

dataset = Dataset.from_dict({
    "chosen": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is blue."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is green."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sea."}],
    ],
})
dataset = dataset.map(extract_prompt).remove_columns("rejected").rename_column("chosen", "completion")
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}], 'completion': [{'role': 'assistant', 'content': 'It is blue.'}]}

Gizli istem içeren tercihlerden yalnızca istem içeren veri setine

Gizli istem içeren bir tercih veri setini yalnızca istem içeren bir veri setine dönüştürmek için, istemi extract_prompt() ile çıkarın ve reddedilen ile seçilen öğeleri kaldırın.

from datasets import Dataset
from trl import extract_prompt

dataset = Dataset.from_dict({
    "chosen": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is blue."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is green."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sea."}],
    ],
})
dataset = dataset.map(extract_prompt).remove_columns(["chosen", "rejected"])
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}]}

Gizli (implicit) prompt tercihinden açık (explicit) prompt tercih veri setine

Gizli istem içeren bir tercih veri setini, açık istem içeren bir tercih veri setine dönüştürmek için, istemi extract_prompt() ile çıkarın.

from datasets import Dataset
from trl import extract_prompt

dataset = Dataset.from_dict({
    "chosen": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is blue."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is green."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sea."}],
    ],
})

dataset = dataset.map(extract_prompt)
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}],
 'chosen': [{'role': 'assistant', 'content': 'It is blue.'}],
 'rejected': [{'role': 'assistant', 'content': 'It is green.'}]}

Gizli istem içeren tercihlerden eşleşmemiş tercih veri setine

Gizli istem içeren bir tercih veri setini eşleşmemiş bir tercih veri setine dönüştürmek için, istemi extract_prompt() ile çıkarın ve veri setini unpair_preference_dataset() ile eşleşmesiz hale getirin.

from datasets import Dataset
from trl import extract_prompt, unpair_preference_dataset

dataset = Dataset.from_dict({
    "chosen": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is blue."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "user", "content": "What color is the sky?"}, {"role": "assistant", "content": "It is green."}],
        [{"role": "user", "content": "Where is the sun?"}, {"role": "assistant", "content": "In the sea."}],
    ],
})

dataset = dataset.map(extract_prompt)
dataset = unpair_preference_dataset(dataset)
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}],
 'completion': [{'role': 'assistant', 'content': 'It is blue.'}],
 'label': True}

Bir tercih veri setindeki "chosen" ve "rejected" tamamlamaların her ikisinin de iyi veya kötü olabileceğini unutmayın. unpair_preference_dataset() uygulamasından önce, tüm "chosen" tamamlamaların iyi ve tüm "rejected" tamamlamaların kötü olarak etiketlenebileceğinden emin olun. Bu, her tamamlamanın mutlak puanını (ör. bir ödül modelinden) kontrol ederek sağlanabilir.

Tercihden dil modelleme veri setine

Bir tercih veri setini dil modelleme veri setine dönüştürmek için, reddedilenleri kaldırın ve istemi ile seçileni "text" sütununa birleştirin.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is"],
    "chosen": [" blue.", " in the sky."],
    "rejected": [" green.", " in the sea."],
})

def concat_prompt_chosen(example):
    return {"text": example["prompt"] + example["chosen"]}

dataset = dataset.map(concat_prompt_chosen, remove_columns=["prompt", "chosen", "rejected"])
>>> dataset[0]
{'text': 'The sky is blue.'}

Tercihten prompt-tamamlama veri setine

Bir tercih veri setini prompt-tamamlama veri setine dönüştürmek için, reddedilen sütununu kaldırın ve "chosen" sütununu "completion" olarak yeniden adlandırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is"],
    "chosen": [" blue.", " in the sky."],
    "rejected": [" green.", " in the sea."],
})

dataset = dataset.remove_columns("rejected").rename_column("chosen", "completion")
>>> dataset[0]
{'prompt': 'The sky is', 'completion': ' blue.'}

Tercihlerden yalnızca istem içeren veri setine

Bir tercih veri setini yalnızca istem içeren bir veri setine dönüştürmek için, reddedilen ve seçilen öğeleri kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is"],
    "chosen": [" blue.", " in the sky."],
    "rejected": [" green.", " in the sea."],
})

dataset = dataset.remove_columns(["chosen", "rejected"])
>>> dataset[0]
{'prompt': 'The sky is'}

Açık uçtan gizli uç tercih veri setine

Açık prompt içeren bir tercih veri setini, örtük prompt içeren bir tercih veri setine dönüştürmek için, prompt'u hem chosen hem de rejected alanlarına ekleyin ve ardından prompt'u kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": [
        [{"role": "user", "content": "What color is the sky?"}],
        [{"role": "user", "content": "Where is the sun?"}],
    ],
    "chosen": [
        [{"role": "assistant", "content": "It is blue."}],
        [{"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "assistant", "content": "It is green."}],
        [{"role": "assistant", "content": "In the sea."}],
    ],
})

def concat_prompt_to_completions(example):
    return {"chosen": example["prompt"] + example["chosen"], "rejected": example["prompt"] + example["rejected"]}

dataset = dataset.map(concat_prompt_to_completions, remove_columns="prompt")
>>> dataset[0]
{'chosen': [{'role': 'user', 'content': 'What color is the sky?'}, {'role': 'assistant', 'content': 'It is blue.'}],
 'rejected': [{'role': 'user', 'content': 'What color is the sky?'}, {'role': 'assistant', 'content': 'It is green.'}]}

Tercihden eşleşmemiş tercih veri setine

Veri setini eşleşmemiş bir tercih veri setine dönüştürmek için veri setini unpair_preference_dataset() ile eşleştirmeyi kaldırın.

from datasets import Dataset
from trl import unpair_preference_dataset

dataset = Dataset.from_dict({
    "prompt": [
        [{"role": "user", "content": "What color is the sky?"}],
        [{"role": "user", "content": "Where is the sun?"}],
    ],
    "chosen": [
        [{"role": "assistant", "content": "It is blue."}],
        [{"role": "assistant", "content": "In the sky."}],
    ],
    "rejected": [
        [{"role": "assistant", "content": "It is green."}],
        [{"role": "assistant", "content": "In the sea."}],
    ],
})

dataset = unpair_preference_dataset(dataset)
>>> dataset[0]
{'prompt': [{'role': 'user', 'content': 'What color is the sky?'}],
 'completion': [{'role': 'assistant', 'content': 'It is blue.'}],
 'label': True}

Bir tercih veri setindeki "chosen" ve "rejected" tamamlamaların her ikisinin de iyi veya kötü olabileceğini unutmayın. unpair_preference_dataset() uygulamasından önce, tüm "chosen" tamamlamaların iyi ve tüm "rejected" tamamlamaların kötü olarak etiketlenebileceğinden emin olun. Bu, her tamamlamanın mutlak puanını (ör. bir ödül modelinden) kontrol ederek sağlanabilir.

Eşleşmemiş tercihlerden dil modelleme veri setine

Eşleşmemiş bir tercih veri setini dil modelleme veri setine dönüştürmek için, iyi tamamlamaları istemlerle birleştirip "text" sütununa ekleyin ve istem, tamamlama ve etiket sütunlarını kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is", "The sky is", "The sun is"],
    "completion": [" blue.", " in the sky.", " green.", " in the sea."],
    "label": [True, True, False, False],
})

def concatenate_prompt_completion(example):
    return {"text": example["prompt"] + example["completion"]}

dataset = dataset.filter(lambda x: x["label"]).map(concatenate_prompt_completion).remove_columns(["prompt", "completion", "label"])
>>> dataset[0]
{'text': 'The sky is blue.'}

Eşleşmemiş tercihlerden prompt-tamamlama veri setine

Eşleşmemiş bir tercih veri setini prompt-tamamlama veri setine dönüştürmek için iyi etiketleri filtreleyin, ardından etiket sütunlarını kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is", "The sky is", "The sun is"],
    "completion": [" blue.", " in the sky.", " green.", " in the sea."],
    "label": [True, True, False, False],
})

dataset = dataset.filter(lambda x: x["label"]).remove_columns(["label"])
>>> dataset[0]
{'prompt': 'The sky is', 'completion': ' blue.'}

Eşleşmemiş tercihlerden yalnızca istem içeren veri setine

Eşleşmemiş bir tercih veri setini yalnızca istem içeren bir veri setine dönüştürmek için, tamamlama ve etiket sütunlarını kaldırın.

from datasets import Dataset

dataset = Dataset.from_dict({
    "prompt": ["The sky is", "The sun is", "The sky is", "The sun is"],
    "completion": [" blue.", " in the sky.", " green.", " in the sea."],
    "label": [True, True, False, False],
})

dataset = dataset.remove_columns(["completion", "label"])
>>> dataset[0]
{'prompt': 'The sky is'}

Görüntü veri setleri

Bazı eğitimciler, görsel-metin çiftleri kullanarak görsel-dil modellerinin (VLM) ince ayarını da destekler. Bu senaryoda, her model metindeki görsel yer tutucularını farklı şekilde işlediğinden, konuşma formatının kullanılması önerilir.

Sohbet odaklı bir görü veri seti, standart bir sohbet veri setinden iki temel açıdan farklıdır:

  1. Veri seti, görüntü verilerini (PIL görüntüleri listesi olarak) içeren images anahtarını veya tek bir PIL görüntüsünü içeren image anahtarını içermelidir.
  2. Mesajlardaki "content" alanı, her bir sözlüğün veri türünü "image" veya "text" olarak belirlediği sözlüklerden oluşan bir liste olmalıdır.

Örnek:

# Textual dataset:
"content": "What color is the sky?"

# Vision dataset:
"content": [
    {"type": "image"},
    {"type": "text", "text": "What color is the sky in the image?"}
]

Konuşmacı bir görü veri seti örneği openbmb/RLAIF-V-Dataset'tir. Aşağıda, veri setinin eğitim verilerini doğrudan incelemenizi sağlayan gömülü bir görünüm yer almaktadır:

Veri setinde yalnızca metin ve görme-dil verilerinin karıştırılması mümkündür, ancak bunun için transformers sürümünün 4.57.0 veya daha yeni olması gerekir. Örnek:

dataset = Dataset.from_dict({
    "prompt": [
        [{"role": "user", "content": [{"type": "image"}, {"type": "text", "text": "What color is the sky in the image?"}]}],
        [{"role": "user", "content": [{"type": "text", "text": "What is the capital of France?"}]}],
    ],
    "completion": [
        [{"role": "assistant", "content": [{"type": "text", "text": "It is blue."}]}],
        [{"role": "assistant", "content": [{"type": "text", "text": "Paris."}]}],
    ],
    "images": [
        [PIL.Image.open("path/to/sky_image1.png")],
        [],
    ],
})
Update on GitHub