Lesson 146 — Advanced

Data Curation for Fine-Tuning

Fine-tune ki quality 90% data se decide hoti hai — model sirf wahi seekhta hai jo tum doge. Is lesson mein hum pehle behaviour spec likhna, examples ke sources aur unke bias, chat template match, loss masking, cleaning, balanced edge cases, leak-free splits aur dataset versioning ek ek karke dekhenge.

⏱ 20 min• Advanced• Should You Fine-Tune?

Data curation kyun sabse pehla kaam hai

Kya hai?

Fine-tuning dataset banana: har example ka input, sahi output, sahi format — aur saaf, balanced, versioned form mein. Model jo dekhega wahi banega — ganda data toh ganda behaviour, bahut mehnat se.

Kab kaam aata hai?

Training se pehle, aur training ke baad bhi — har naye failure case ke saath dataset update hoti hai. Dataset hi tumhara asli aset hai, weights toh uska nateeja hain.

Kahan milta hai?

Production logs se, experts ke dwara likhe examples se, filtered synthetic data se — phir JSONL files ke roop mein training scripts ko. Split aur manifest isi ke saath chalte hain.

Sabse aam galti ye hai ki log pehle tool khol lete hain aur data baad mein. Sahi order ulta hai: pehle behaviour ki specification likho, phir us specification ke against har example ko check karo. Iske bina har example pe individual judgement chalta rahega aur dataset mein 10 tonein mil jaayengi.

Spec pehle: Ek chhota SPEC object banao — kya chahiye, kya bilkul nahi chahiye. Har example isi spec se filter hoga. Ye 30 minute ka kaam aadhe dataset problems pehle hi khatam kar deta hai.

Examples kahan se aate hain

# Har source ka bias alag hai — mix karo, blind mat raho
sources = {
    "log":     "realistic, par PII + purane ghalat jawab bhi hain",
    "expert":  "clean, par chhoti quantity, ek hi expert ki aadat",
    "synthetic": "bhar ke quantity, par phrasing repeat + teacher ki galtiyan",
}

# pipeline: harvest -> filter -> expert review -> version
rows = filter_against_spec(SPEC, harvest(logs, expert_written, synthetic))
Synthetic data ka rule: Jo model produce kar raha hai usse blind trust mat karo. Har synthetic batch ka sample padho — ek hi phrasing, ek hi structure har jagah dikhe toh student model bhi utni hi narrow ho jaayega.

Chat template match aur loss masking

# Ek training example (JSONL, har line ek example)
{"messages": [
  {"role": "system", "content": "Tum ek support assistant ho."},
  {"role": "user", "content": "Refund kab milega?"},
  {"role": "assistant", "content": "Order dekh kar 5-7 working days ka window batata hoon."}
]}

# base model ne jis chat template se training ki, wahi format yahan chahiye
# galat template -> model bhi wahi galat framing seekhega (silent degradation)
Template mismatch = sabse common silent bug: Model chal jaata hai, output bhi aata hai, par quality expectations se kam — kyunki template alag tha. Pehle 20 examples ka rendered form nikal ke aankh se padho, tabhi training start karo.

Cleaning — thode saaf, hazar gande se behtar

import hashlib
from collections import defaultdict

def norm(t):
    return " ".join(t.lower().split())

def audit(rows):
    groups = defaultdict(list)
    for ex in rows:
        groups[norm(ex["prompt"])].append(ex)

    dup = sum(len(g) - 1 for g in groups.values())
    contradictions = 0
    for g in groups.values():
        outs = {norm(e["assistant"]) for e in g}
        if len(outs) > 1:            # same input, alag-alag jawab = label fight
            contradictions += 1
    return dup, contradictions        # dono theek karke hi aage badho
Balancing ka test: Dataset ka random sample nikaalo aur kaho — "ye 20 mein se kitne hard cases hain?" Agar jawab lagbhag zero, toh model hard case kabhi nahi seekhega. Har important edge case ka apna quota rakho.

Leak-free splits, PII aur versioning

import hashlib, json

def norm(t): return " ".join(t.lower().split())
def bucket(t): return int(hashlib.sha256(norm(t).encode()).hexdigest()[:8], 16) % 100

# split fingerprint pe, taaki near-duplicate ek hi side rahe
for ex in rows:
    b = bucket(ex["prompt"])
    ex["split"] = "test" if b < 10 else ("val" if b < 20 else "train")

manifest = {
    "name": "support-v3",
    "rows": len(rows),
    "spec": SPEC,
    "counts": count_by_split(rows),
}
# manifest + data dono version control mein — yahi traceability hai
Do not skip the held-out test: Validation baar baar dekhoge, usse model ki aadat set ho sakti hai. Asli test set ek baar — final decision ke waqt. Aur test set har naye dataset version pe naya nahi hota; wo tumhara stable judgements ka pen hai.

Exercise

Question: Data collect karne se pehle sabse pehle kya likha jaata hai jisse har example check hota hai? (ek shabd)

Question: Training loss sirf kis cheez ke tokens pe honi chahiye — prompts ya assistant responses?

Question: Train, val aur test ke alag-alag hisson mein same near-duplicate example chala jaaye — us problem ko kya kehte hain? (ek shabd)

Question: Dataset ko training configuration ke saath saath kis cheez mein track karte hain taaki har model trace ho sake?

Question: Ek hi input ke do alag jawab dataset mein hon — is inconsistency ko kya kehte hain?

Common mistakes

Desi example: Aate ko chhaanna — chhanni pehle, kadai baad mein

Halwai sabse pehle aata chhaantaa hai — patthar, kachra, gandagi alag — tabhi kadai lagti hai. Fine-tuning mein bhi: data saaf, balanced aur chhanna hua (splits) tabhi, warna jo ganda gaya wahi kadai mein se aayega:

text
kachra (duplicates/PII)   -> chhaan lo
patthar (contradictions)  -> nikaal do
ek hi size (balancing)    -> edge cases add karo
alag dabba (split)        -> train / val / test leak-free
recipe card (version)     -> manifest — kis data se bana
Interview angle — yahan se sawaal aate hain
  • Q: Dataset ke teen splits kyun hote hain? — Train seekhne ke liye, val tuning/selection ke liye, test final honest estimate ke liye.
  • Q: Loss masking kya hai aur kyun? — Sirf assistant tokens pe loss taaki model prompt dohonchhna na seekhe, sirf jawabarna seekhe.
  • Q: Chat template mismatch ka kya asar hai? — Silent quality drop: model chalta hai par base ki aadat se bahar framing mein train hua.
  • Q: 500 saaf examples vs 5000 shorile — kya chunoge? — 500 saaf, kyunki narrow task pe noise contradictions aur bad habits laati hai.
  • Q: Dataset versioning kaise karte ho? — Naam, row count, spec aur split counts ka manifest, har training run ke saath save.
Lesson complete?

Data pipeline clear — ab tum saaf, balanced aur versioned dataset bana sakte ho. Agla lesson — Supervised Fine-Tuning (SFT) — mein isi data ko actual training run mein badalna dekhenge.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course