पाठ 15 / 27

Dataset Format और Validation (JSONL)

प्रशिक्षण run पर ख़र्च से पहले हर row जाँचें।

हर पंक्ति में एक JSON object

Hosted fine-tuning सेवाएँ और open-source trainers आम तौर पर JSONL लेते हैं: हर पंक्ति में एक JSON object, chat मॉडल के लिए आम तौर पर सहायक उत्तर पर समाप्त होने वाली role/content turns की messages सूची। सटीक schema provider के अनुसार अलग है, इसलिए वर्तमान दस्तावेज़ मानें। जो भी schema हो, पहले स्थानीय रूप से validate करें: हर पंक्ति parse हो, roles वैध हों, आख़िरी turn ग़ैर-ख़ाली सहायक उत्तर हो, token लंबाई सीमा में हो, और किसी row में secrets या व्यक्तिगत डेटा न हो। 20-पंक्ति की script से पकड़ी गई विफलता बिल से पकड़ी गई विफलता से बहुत सस्ती है।

Row validator, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से उदाहरण संख्याओं के साथ चलाया। Checker एक वैध row स्वीकार करता है और अन्य तीन नमूना पंक्तियों में ग़ायब सहायक turn, ख़ाली अंतिम उत्तर और JSON syntax त्रुटि बताता है। दिखाया schema सामान्य chat आकार है, किसी एक provider का सटीक format नहीं।

import json

def check(line):
    try: ex = json.loads(line)
    except json.JSONDecodeError as e: return f"bad JSON: {e.msg}"
    m = ex.get("messages")
    if not isinstance(m, list) or len(m) < 2: return "needs a messages list with at least 2 turns"
    if any(t.get("role") not in {"system", "user", "assistant"} for t in m): return "unknown role"
    if m[-1]["role"] != "assistant" or not m[-1].get("content", "").strip(): return "last turn must be a non-empty assistant answer"
    return "ok"

lines = ['{"messages": [{"role": "user", "content": "Where is my order?"}, {"role": "assistant", "content": "Please share your order number."}]}',
         '{"messages": [{"role": "user", "content": "Hi"}]}',
         '{"messages": [{"role": "user", "content": "Hi"}, {"role": "assistant", "content": ""}]}', '{oops}']
seen = set()
for i, l in enumerate(lines, 1):
    dup = l in seen; seen.add(l)
    print(i, check(l), "(duplicate)" if dup else "")

Output:

1 ok 
2 needs a messages list with at least 2 turns 
3 last turn must be a non-empty assistant answer 
4 bad JSON: Expecting property name enclosed in double quotes

पहले 20 rows से dry-run

पूरा dataset चलाने से पहले format, लागत और आउटपुट शैली पक्की करने को छोटा job चलाएँ।

त्वरित जाँच: पहले dataset स्थानीय रूप से validate क्यों करें?

  • भुगतान वाले प्रशिक्षण run से पहले format त्रुटियाँ सस्ते में पकड़ी जाती हैं
  • Validation मॉडल बड़ा करती है
  • JSONL files edit नहीं हो सकतीं
  • यह मूल्यांकन set की जगह लेती है
Answer

भुगतान वाले प्रशिक्षण run से पहले format त्रुटियाँ सस्ते में पकड़ी जाती हैं — सस्ती स्थानीय जाँचें व्यर्थ runs से बचाती हैं।