Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama
Alpaca ve ShareGPT biçimlerinde talimat izleme verilerini toplayın, temizleyin ve biçimlendirin; veri tekilleştirmesi uygulayın ve verileri eğitim ve doğrulama kümelerine ayırın.
Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Veri, İnce Ayardaki En Önemli Etkendir
İnce ayarda eğitim verilerinizin kalitesi, tüm hiperparametrelerden, mimari seçimlerinden veya eğitim tekniklerinden daha önemlidir. 100 yüksek kaliteli örnek, 10.000 vasat örnekten daha iyi sonuç verir. Ne ekerseniz onu biçersiniz; ince ayarlı model, hatalar, ön yargılar ve biçim tutarsızlıkları da dâhil olmak üzere verilerinizdeki tüm kalıpları olduğu gibi yeniden üretir. Veri kalitesine yatırım yapmak, her ince ayar projesinde en yüksek getiriyi sağlayan adımdır.
Talimat Takibi Biçimleri
Talimat takipli görevlerdeki ince ayarların çoğunda sistem, kullanıcı ve asistan rollerini içeren bir konuşma iletisi biçimi kullanılır. OpenAI'nin ince ayar API'si, her satırın eksiksiz bir konuşma örneği olduğu JSONL dosyalarını kullanır. Alpaca biçimi (talimat/girdi/çıktı) ve ShareGPT biçimi (konuşmalar listesi) de yaygın olarak kullanılır. Kullanmayı planladığınız ince ayar çerçevesine uyan biçimi seçin.
import json
# OpenAI fine-tuning format (JSONL)
# Each line is one training example
openai_example = {
'messages': [
{'role': 'system', 'content': 'You are a JSON extraction agent.'},
{'role': 'user', 'content': 'Extract: "John Smith, age 32, from Seattle, joined 2023-01-15"'},
{'role': 'assistant', 'content': '{"name": "John Smith", "age": 32, "city": "Seattle", "join_date": "2023-01-15"}'}
]
}
# Alpaca format
alpaca_example = {
'instruction': 'Extract structured data from the following text.',
'input': 'John Smith, age 32, from Seattle, joined 2023-01-15',
'output': '{"name": "John Smith", "age": 32, "city": "Seattle", "join_date": "2023-01-15"}'
}
# Write as JSONL
with open('train.jsonl', 'w') as f:
f.write(json.dumps(openai_example) + '\n')
# Add more examples here...Eğitim Verisi Toplama: Üç Strateji
İnce ayar veri kümesi oluşturmanın üç temel stratejisi vardır. İnsan üretimi: uzmanlar ideal örnekleri elle yazar — kalite en yüksek, ancak süreç yavaş ve maliyetlidir. LLM üretimi: güçlü bir model (GPT-4o), daha sonra insanlar tarafından doğrulanan örnekler üretir — çok daha hızlı ve ucuzdur; doğrulama yapılırsa kalitesi iyidir. Kayıtlardan çıkarma: mevcut üretim kayıtlarından girdi-çıktı çiftlerini çıkarın ve kullanıcı puanları veya LLM-as-judge puanlaması gibi kalite sinyallerini kullanarak yüksek kaliteli örnekleri filtreleyin.
from openai import OpenAI
client = OpenAI()
def generate_training_example_with_gpt4o(task_description: str, example_input: str) -> dict:
'''Use GPT-4o to generate a training example for a smaller model.'''
prompt = f'''You are creating a training example for fine-tuning a smaller model.
Task: {task_description}
Given this input:
{example_input}
Write the ideal assistant response that demonstrates the correct behavior for this task.
Be specific, accurate, and follow the expected format precisely.'''
response = client.chat.completions.create(
model='gpt-4o', # teacher model
messages=[{'role': 'user', 'content': prompt}]
)
return {
'messages': [
{'role': 'system', 'content': task_description},
{'role': 'user', 'content': example_input},
{'role': 'assistant', 'content': response.choices[0].message.content}
]
}Kalite Filtreleme ve Doğrulama
Her eğitim örneği dâhil edilmeden önce bir kalite doğrulama adımından geçmelidir. Şunları doğrulayın: yanıt doğru biçimdedir, yanıt doğrudur (olgusal görevlerde), yanıt halüsinasyon veya zararlı içerik barındırmaz, talimat-yanıt çifti tutarlıdır ve örnek üretim kullanım senaryosunu temsil eder. Biçim denetimleri için otomatik doğrulama, içerik kalitesi için LLM-as-judge kullanın; ayrıca bir örneklem üzerinde insan incelemesi yapın.
import json
def validate_training_example(example: dict, schema_validator=None) -> dict:
issues = []
# Format check
if 'messages' not in example:
issues.append('Missing messages field')
return {'valid': False, 'issues': issues}
messages = example['messages']
if not any(m['role'] == 'assistant' for m in messages):
issues.append('No assistant message found')
# Check assistant message quality
assistant_content = next((m['content'] for m in messages if m['role'] == 'assistant'), '')
if len(assistant_content) < 5:
issues.append('Assistant response too short')
# Schema validation for JSON output tasks
if schema_validator:
try:
parsed = json.loads(assistant_content)
schema_validator(parsed) # raises if invalid
except json.JSONDecodeError:
issues.append('Assistant response is not valid JSON')
except Exception as e:
issues.append(f'Schema validation failed: {str(e)}')
return {'valid': len(issues) == 0, 'issues': issues}
# Run validation on all examples before training
examples = load_training_examples('raw_dataset.jsonl')
valid_examples = [e for e in examples if validate_training_example(e)['valid']]
print(f'Valid examples: {len(valid_examples)}/{len(examples)}')Veri Tekilleştirme
Eğitim verilerindeki yinelenen veya neredeyse yinelenen örnekler zararlıdır. Modelin bu belirli örneklere aşırı uyum sağlamasına neden olur ve farklı kalıpları öğrenmek için kullanılabilecek eğitim kapasitesini boşa harcar. Veri kümenize son hâlini vermeden önce tekilleştirme çalıştırın. Kesin tekilleştirme, aynı örnekleri bulmak için özetleme kullanır. Yakın tekilleştirme ise yalnızca önemsiz şekillerde farklılık gösteren örnekleri bulmak için MinHash veya gömme benzerliğini kullanır.
import hashlib
from datasketch import MinHash, MinHashLSH
def exact_deduplicate(examples: list[dict]) -> list[dict]:
seen_hashes = set()
unique = []
for ex in examples:
# Hash the user and assistant messages
content = str(ex['messages'])
h = hashlib.md5(content.encode()).hexdigest()
if h not in seen_hashes:
seen_hashes.add(h)
unique.append(ex)
print(f'Exact dedup: {len(examples)} -> {len(unique)} ({len(examples)-len(unique)} removed)')
return unique
def near_deduplicate_by_input(examples: list[dict], similarity_threshold=0.85) -> list[dict]:
# Build index of input texts
inputs = [next((m['content'] for m in ex['messages'] if m['role'] == 'user'), '') for ex in examples]
lsh = MinHashLSH(threshold=similarity_threshold, num_perm=128)
unique_indices = set()
for i, text in enumerate(inputs):
m = MinHash(num_perm=128)
for word in text.lower().split():
m.update(word.encode('utf-8'))
if not lsh.query(m): # no similar items found
lsh.insert(str(i), m)
unique_indices.add(i)
return [examples[i] for i in sorted(unique_indices)]Eğitim/Doğrulama Bölmesi
Herhangi bir ince ayar çalıştırmasına başlamadan önce veri kümenizi eğitim ve doğrulama kümelerine ayırın. Doğrulama kümesi, eğitim sırasında aşırı uyumu izlemek için kullanılır (doğrulama kaybı artarken eğitim kaybı azalırsa model aşırı uyum sağlıyordur). Tipik bir bölme, yüzde 90 eğitim / yüzde 10 doğrulama şeklindedir. Bölmenin rastgele olduğundan ve veri kümenizde anlamlı kategoriler varsa katmanlı yapıldığından emin olun (örneğin her iki kümede de tüm amaç türlerinin eşit temsil edilmesi).
import random
import json
def split_dataset(examples: list[dict], val_fraction=0.1, seed=42) -> tuple[list, list]:
random.seed(seed) # reproducible split
shuffled = examples.copy()
random.shuffle(shuffled)
n_val = max(1, int(len(shuffled) * val_fraction))
val_set = shuffled[:n_val]
train_set = shuffled[n_val:]
print(f'Train: {len(train_set)} examples, Validation: {len(val_set)} examples')
return train_set, val_set
def save_jsonl(examples: list[dict], path: str):
with open(path, 'w') as f:
for ex in examples:
f.write(json.dumps(ex) + '\n')
# Split and save
examples = load_training_examples('clean_dataset.jsonl')
train, val = split_dataset(examples, val_fraction=0.1)
save_jsonl(train, 'train.jsonl')
save_jsonl(val, 'validation.jsonl')
print(f'Saved train.jsonl ({len(train)}) and validation.jsonl ({len(val)})')Veri Kümesini Dengeleme
Dengesiz veri kümeleri, ince ayarlı modellerin yaygın durumlarda aşırı uzmanlaşmasına ve nadir fakat önemli durumlarda başarısız olmasına neden olur. Veri kümenizde A kategorisinden 900, B kategorisinden 100 örnek varsa model her zaman A'yı tahmin etmeyi öğrenebilir. Veri kümesini şu yollarla dengeleyin: azınlık kategorilerini fazladan örnekleyin (nadir örnekleri çoğaltın), çoğunluk kategorilerini eksik örnekleyin veya yetersiz temsil edilen durumlar için GPT-4o kullanarak yapay örnekler üretin.
from collections import Counter
import random
def analyze_distribution(examples: list[dict], category_extractor) -> dict:
categories = [category_extractor(ex) for ex in examples]
counts = Counter(categories)
print('Category distribution:')
for cat, count in counts.most_common():
print(f' {cat}: {count} ({100*count/len(examples):.1f}%)')
return counts
def oversample_minority(examples: list[dict], category_extractor, target_count: int) -> list[dict]:
by_category = {}
for ex in examples:
cat = category_extractor(ex)
by_category.setdefault(cat, []).append(ex)
balanced = []
for cat, cat_examples in by_category.items():
if len(cat_examples) < target_count:
# Oversample with replacement
oversampled = random.choices(cat_examples, k=target_count)
balanced.extend(oversampled)
else:
# Undersample to target_count
balanced.extend(random.sample(cat_examples, target_count))
random.shuffle(balanced)
return balancedVeri Temizleme ve Normalleştirme
Eğitim verileri çoğu zaman ince ayara zarar veren tutarsızlıklar içerir: çıktı alanlarında büyük-küçük harf kullanımının karışık olması, satır sonu boşlukları, tırnak işaretlerinin tutarsız kullanımı, sayı biçimlerinin karışık olması veya JSON anahtarlarını adlandırma kurallarının farklılık göstermesi. Eğitimden önce bunları normalleştirin. İnce ayarlı model, verilerinizde bulunan kesin biçimlendirmeyi öğrenir; verilerinizde tutarsızlıklar varsa model de bunları yeniden üretir.
import json
import re
def normalize_json_output_example(example: dict) -> dict:
'''Normalize JSON output in assistant messages for consistency.'''
messages = example.get('messages', [])
normalized = []
for msg in messages:
if msg['role'] == 'assistant':
content = msg['content'].strip()
# Try to parse and re-serialize JSON for consistent formatting
try:
parsed = json.loads(content)
# Normalize: sort keys, consistent spacing
content = json.dumps(parsed, ensure_ascii=False, sort_keys=True)
except json.JSONDecodeError:
pass # Not JSON output - leave as is
normalized.append({'role': 'assistant', 'content': content})
else:
normalized.append(msg)
return {'messages': normalized}
def normalize_dataset(examples: list[dict]) -> list[dict]:
return [normalize_json_output_example(ex) for ex in examples]Veri Kümesi Kalite Ölçütlerini Ölçme
Verileri ince ayar için göndermeden önce veri kümesinin tamamı üzerinde kalite ölçütlerini hesaplayın. Şunları denetleyin: örnek başına ortalama ve en yüksek belirteç sayısı (uzun örneklerin eğitimi daha maliyetlidir ve bu örnekler kesilebilir), sözcük dağarcığı kapsamı (veri kümesi üretim girdilerinin tüm çeşitliliğini kapsıyor mu?) ve tutarlılık puanı (benzer girdiler benzer çıktılar alıyor mu?). Çoğu ince ayar sağlayıcısında, başarısız bir eğitim çalışması için ücretlendirme yapmadan önce biçim hatalarını denetleyen bir veri doğrulama uç noktası bulunur.
import tiktoken
def analyze_dataset_quality(examples: list[dict], model='gpt-4o-mini') -> dict:
encoder = tiktoken.encoding_for_model(model)
token_counts = []
for ex in examples:
total_tokens = sum(
len(encoder.encode(m['content']))
for m in ex['messages']
)
token_counts.append(total_tokens)
report = {
'total_examples': len(examples),
'avg_tokens_per_example': sum(token_counts) / len(token_counts),
'max_tokens': max(token_counts),
'min_tokens': min(token_counts),
'examples_over_4k_tokens': sum(1 for t in token_counts if t > 4096),
'estimated_training_tokens': sum(token_counts),
'estimated_cost': sum(token_counts) / 1_000_000 * 8.0 # ~$8/1M tokens for gpt-4o-mini
}
for key, value in report.items():
print(f'{key}: {value}')
return reportVeri Kümesini Yinelemeli Olarak İyileştirme
Veri kümesi hazırlama yinelemeli bir süreçtir. İlk veri kümenizle küçük bir modeli ince ayarlayın, ayrılan örnekler üzerinde değerlendirin, başarısızlık biçimlerini belirleyin ve bunları veri kümesindeki boşluklara veya kalite sorunlarına kadar izleyin. Ardından verileri düzeltip yeniden eğitim yapın. Bu hataya dayalı veri iyileştirme döngüsü, üretim ortamındaki ince ayarda standart uygulamadır ve tek seferde kusursuz bir veri kümesi toplamaya çalışmaktan çok daha etkilidir.
Örnekler Arasında Sistem İstemi Tutarlılığı
İnce ayar yaptığınız model üretimde her zaman aynı sistem istemini kullanacaksa, bu sistem istemini her eğitim örneğine aynen ekleyin. Modelin hiçbir sistem istemi olmadan çalışmasını istiyorsanız, sistem istemi kullanmadan eğitin. Eğitim ve çıkarım koşulları arasındaki uyumsuzluklar, ince ayarın beklentileri karşılamamasının başlıca nedenlerindendir. Model, eğitim sırasında gördüğü istem yapısına özgü davranışları öğrenir.
Hızlı Kontrol
Bu derste ince ayar eğitim veri kümesi hazırlama konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: İnce ayarda veri kalitesi, veri miktarından daha önemlidir — 100 mükemmel örnek, 10.000 vasat örnekten daha iyi sonuç verir; herhangi bir eğitim çalıştırmasından önce yinelenen verileri kaldırma, doğrulama, dengeleme ve normalleştirme dört temel veri temizleme adımıdır ve eğitim/doğrulama bölmesi, gerçek dünya performansını düşürmeden önce eğitim sırasında aşırı uyumu tespit etmek için gereklidir. Sırada Hugging Face PEFT ile LoRA ince ayarı yapacağız.
Sıkça Sorulan Sorular
“Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama” dersi ücretsiz mi?
Evet — “Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama” dersinde ne öğreneceğim?
Alpaca ve ShareGPT biçimlerinde talimat izleme verilerini toplayın, temizleyin ve biçimlendirin; veri tekilleştirmesi uygulayın ve verileri eğitim ve doğrulama kümelerine ayırın. AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İnce Ayarın İstem Yazımını Geride Bıraktığı Durumlar
- Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama
- Hugging Face PEFT ile LoRA İnce Ayarı
- İnce Ayarlı Modelinizi Değerlendirme ve Dağıtma