Distillation: एक छोटे मॉडल को सिखाना
एक बड़ा teacher मॉडल किसी एक काम के लिए छोटे student मॉडल को ट्रेन करने में मदद कर सकता है। जानें कि knowledge distillation और synthetic data कैसे काम करते हैं, और वे लाइसेंस नियम जो इस पर रोक लगा सकते हैं।
60 सेकंड में
Distillation: एक छोटे मॉडल को सिखाना
एक बड़ा teacher मॉडल किसी एक काम के लिए छोटे student मॉडल को ट्रेन करने में मदद कर सकता है। जानें कि knowledge distillation और synthetic data कैसे काम करते हैं, और वे लाइसेंस नियम…
दो आम तरीके
| तरीका | Student किससे सीखता है | ज़रूरत |
|---|---|---|
| पारंपरिक (soft labels) | हर संभावित उत्तर के लिए teacher की पूरी संभावना (probability), केवल सबसे ऊपर वाले उत्तर की नहीं | Teacher के आउटपुट की संभावनाओं (probabilities) तक पहुँच, आम तौर पर एक open-weight teacher जिसे आप खुद चलाते हैं |
| Synthetic data (केवल टेक्स्ट) | Teacher द्वारा लिखे गए उदाहरण उत्तर, जिन्हें सामान्य ट्रेनिंग डेटा की तरह इस्तेमाल किया जाता है | केवल teacher के टेक्स्ट आउटपुट, जैसे कि किसी API के ज़रिए, अगर शर्तें इसकी इजाज़त देती हों |
एक synthetic-data पाइपलाइन
- 1
एक काम तय करें
उदाहरण के लिए: किसी हिंदी या अंग्रेज़ी कस्टमर मैसेज को पाँच श्रेणियों में बाँटें और एक छोटा कारण दें। - 2
असली इनपुट इकट्ठा करें
सहमति से लिए गए और निजी जानकारी हटाए गए असली मैसेज, या असल जैसे दिखने वाले बनाए गए मैसेज। - 3
Teacher से पूछें
बड़े मॉडल से कहें कि वह एक तय फॉर्मेट में हर इनपुट के लिए जवाब दे। - 4
फ़िल्टर करें और जाँचें
गलत फॉर्मेट वाले उत्तर हटा दें। कुछ सैंपलों को लोगों से चेक करवाएँ। डुप्लीकेट हटाएँ। - 5
Student को ट्रेन करें
जाँचे गए उदाहरणों पर छोटे मॉडल को fine-tune करें (अगला सबक देखें)। - 6
Held-out डेटा पर मूल्यांकन करें
ऐसे उदाहरणों पर टेस्ट करें जो teacher ने कभी नहीं देखे थे, जिनका मूल्यांकन इंसानों या साफ़ नियमों द्वारा किया गया हो।
import json
LABELS = ["order", "complaint", "delivery", "refund", "other"]
def call_model(prompt: str) -> str:
... # plug in your provider or local teacher model here
def teacher_label(message: str) -> dict | None:
prompt = (
"Classify this customer message into one of: " + ", ".join(LABELS) + ".\n"
'Reply only with JSON like {"label": "...", "reason": "..."}.\n\n'
"Message: " + message
)
try:
out = json.loads(call_model(prompt))
except (json.JSONDecodeError, TypeError):
return None # drop badly formatted answers
if out.get("label") not in LABELS:
return None # drop invalid labels
return {"input": message, "label": out["label"], "reason": out.get("reason", "")}
def build_dataset(messages: list[str], path: str) -> None:
with open(path, "w", encoding="utf-8") as f:
for m in messages:
row = teacher_label(m)
if row:
f.write(json.dumps(row, ensure_ascii=False) + "\n")पहले लाइसेंस और शर्तें जाँचें
क्या गड़बड़ हो सकती है
- नकल की गई गलतियाँ: student, teacher की गलतियों और पूर्वाग्रहों (biases) को भी सीख लेता है। सैंपलों को खुद हाथ से जाँचें।
- सीमित डेटा: अगर सभी उदाहरण एक जैसे दिखते हैं, तो student ऐसे असली संदेशों पर फेल हो जाता है जो अलग दिखते हैं। असली और अलग-अलग तरह के इनपुट का इस्तेमाल करें।
- लीक हुआ टेस्ट डेटा: अगर आपके टेस्ट उदाहरण ट्रेनिंग में भी शामिल थे, तो आपके स्कोर ज़रूरत से ज़्यादा अच्छे दिखेंगे।
- निजी डेटा: सहमति और किसी साफ़ वजह के बिना लोगों के निजी संदेश किसी बाहरी teacher को न भेजें। पहले नाम और नंबर हटा लें।
और देखें और पढ़ें
लैब
किसी एक तय काम के लिए लिखित distillation योजना, जिसमें लाइसेंस की जाँच और मूल्यांकन का डिज़ाइन शामिल हो।
समस्या
काम: "एक छोटा मॉडल जो किसान के सवाल (हिंदी, मराठी या अंग्रेज़ी) को पढ़ता है और उसे इनमें से किसी एक रूप में टैग करता है: फसल की बीमारी, मौसम, बाज़ार भाव, सरकारी योजना, अन्य।"
- एक teacher मॉडल चुनें। उसका लाइसेंस और शर्तें पढ़ें और ठीक-ठीक लिखें कि वे दूसरे मॉडलों को ट्रेन करने के लिए आउटपुट का उपयोग करने के बारे में क्या कहते हैं। यदि इसकी अनुमति नहीं है, तो दूसरा teacher चुनें।
- Teacher का prompt और सटीक आउटपुट फॉर्मेट लिखें।
- बताएँ कि आपके इनपुट कहाँ से आते हैं और आप सहमति और निजी डेटा को कैसे संभालते हैं।
- Teacher के खराब उत्तरों के लिए तीन फ़िल्टरिंग नियम लिखें।
- टेस्ट डिज़ाइन करें: कितने held-out उदाहरण होंगे, उन्हें कौन लेबल करेगा, और teacher की जगह लेने के लिए student को कितने स्कोर तक पहुँचना होगा।
आपको कुछ भी चलाने की ज़रूरत नहीं है। अगर आप कोड आज़माना चाहते हैं, तो किसी लोकल मॉडल के साथ सबक में दिए गए स्केच का इस्तेमाल करें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1केवल teacher के सबसे भरोसेमंद (most confident) उत्तरों पर ट्रेन किया गया student असली ट्रैफ़िक पर खराब प्रदर्शन क्यों कर सकता है?दिखाएं
Confident उत्तर आम तौर पर आसान मामले होते हैं। अगर आप केवल उन्हीं पर ट्रेन करते हैं, तो student कभी भी वे कठिन और अस्पष्ट मैसेज नहीं देख पाता जो असली यूज़र भेजते हैं, इसलिए उसने उन्हें संभालना नहीं सीखा होता है। इंसानों द्वारा जाँचे गए कुछ कठिन उदाहरणों को शामिल रखने से student को स्थिति की ज़्यादा असली तस्वीर मिलती है।
Q2आपके टेस्ट सेट पर आपके distilled student का स्कोर teacher से ज़्यादा आया है। जश्न मनाने से पहले आपको क्या जाँचना चाहिए?दिखाएं
जाँचें कि कोई भी टेस्ट उदाहरण (या उससे मिलती-जुलती नकल) ट्रेनिंग डेटा में शामिल तो नहीं था। जाँचें कि टेस्ट लेबल इंसानों की तरफ से आए हों, न कि teacher से, वरना आप सिर्फ़ teacher से उसकी सहमति माप रहे हैं। दोनों मॉडलों की गलतियों को खुद हाथ से देखें, और ताज़ा असली ट्रैफ़िक का एक सैंपल जाँचें। अगर यह नतीजा फिर भी बना रहता है, तो किसी खास काम के लिए यह सचमुच बेहतर हो सकता है।
अक्सर पूछे जाने वाले सवाल
क्या कोई student अपने teacher से बेहतर हो सकता है?
कुल मिलाकर, आम तौर पर नहीं। किसी एक छोटे और तय काम पर, सावधानीपूर्वक फ़िल्टरिंग और इंसानों द्वारा जाँचे गए कुछ डेटा के साथ, एक student कभी-कभी उस काम में teacher की बराबरी कर सकता है या उससे बेहतर हो सकता है। Held-out उदाहरणों पर इसे मापें; पहले से मान न लें।
मुझे कितने उदाहरणों की ज़रूरत होगी?
इसकी कोई तय संख्या नहीं है। एक आसान क्लासिफिकेशन काम के लिए, कुछ सौ से लेकर कुछ हज़ार अच्छे और अलग-अलग तरह के उदाहरण शुरुआत करने के लिए काफ़ी होते हैं। छोटे स्तर से शुरू करें, नतीजा मापें, और जहाँ student गलतियाँ करे, वहाँ और उदाहरण जोड़ें।
क्या distillation और fine-tuning एक ही चीज़ हैं?
Distillation इस बारे में है कि ट्रेनिंग सिग्नल कहाँ से आता है: एक teacher मॉडल से। Fine-tuning खुद ट्रेनिंग का कदम है। Synthetic-data तरीके में आप आम तौर पर student को teacher के उदाहरणों पर fine-tune करते हैं, इसलिए दोनों साथ-साथ चलते हैं।
क्या मैं किसी open-weight मॉडल को teacher के तौर पर इस्तेमाल कर सकता हूँ?
हाँ, और इससे आपको ज़्यादा नियंत्रण मिलता है, जिसमें आउटपुट की संभावनाओं (probabilities) तक पहुँच भी शामिल है। इसका लाइसेंस अब भी लागू होता है, इसलिए जाँचें कि यह दूसरे मॉडलों को ट्रेन करने के लिए आउटपुट के उपयोग के बारे में क्या कहता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।