कंटैमिनेशन: जब टेस्ट पेपर लीक हो गया
मॉडल इंटरनेट के बहुत सारे टेक्स्ट से सीखते हैं, जिसमें वही टेस्ट के सवाल भी शामिल हो सकते हैं जिनसे उन्हें परखा जाता है। इसके संकेत पहचानें, और जानें कि हेल्ड-आउट और नए टेस्ट सेट आपकी रक्षा कैसे करते हैं।
60 सेकंड में
कंटैमिनेशन: जब टेस्ट पेपर लीक हो गया
मॉडल इंटरनेट के बहुत सारे टेक्स्ट से सीखते हैं, जिसमें वही टेस्ट के सवाल भी शामिल हो सकते हैं जिनसे उन्हें परखा जाता है। इसके संकेत पहचानें, और जानें कि हेल्ड-आउट और नए टेस्ट सेट…
टेस्ट का कंटेंट अंदर कैसे पहुँचता है
- वेब क्रॉल: बेंचमार्क के सवाल और जवाब GitHub, ब्लॉग, फ़ोरम और कोर्स नोट्स पर पोस्ट किए जाते हैं। बड़े वेब क्रॉल उन्हें समेट लेते हैं।
- बदले हुए रूप (रीराइटेड कॉपियां): किसी सवाल का दूसरी भाषा में अनुवाद किया गया हो या किसी ट्यूटोरियल में उसके शब्द बदल दिए गए हों, तब भी वह जवाब सिखा ही देता है।
- फ़ाइन-ट्यूनिंग डेटा: इंस्ट्रक्शन डेटासेट में कभी-कभी बेंचमार्क जैसे सवाल होते हैं, या ऐसे मॉडल द्वारा बनाए गए सवाल होते हैं जिन्होंने उन्हें पहले देखा था।
- आपके अपने लीक्स: आप डिबगिंग करते समय टेस्ट केस को प्रॉम्प्ट में पेस्ट कर देते हैं, या फ़ेल हुए टेस्ट सवालों को "उन्हें ठीक करने के लिए" ट्रेनिंग डेटा में जोड़ देते हैं।
संकेत कि स्कोर कंटैमिनेटेड हो सकता है
| संकेत | आपको क्या दिखता है | यह लीकेज की ओर इशारा क्यों करता है |
|---|---|---|
| पुराना, नए से बेहतर है | बहुत पहले पब्लिश हुए सवालों पर परफ़ॉर्मेंस, उनके जैसे नए सवालों की तुलना में बहुत बेहतर है। | पुराने सवालों को ट्रेनिंग से पहले इंटरनेट पर फैलने का ज़्यादा समय मिला था। |
| पैराफ़्रेज़ करने पर गिरावट | जब आप सवालों के शब्द बदलते हैं या नंबर बदलते हैं, तो एक्यूरेसी गिर जाती है। | असली समझ शब्द बदलने पर भी काम करती है। हूबहू शब्दों को याद रखना काम नहीं आता। |
| हूबहू याद आना (वर्बेटिम रिकॉल) | टेस्ट के सवाल की शुरुआत मिलने पर मॉडल उसे शब्द-दर-शब्द पूरा कर देता है। | उसने सिर्फ़ टॉपिक ही नहीं, बल्कि सवाल का पूरा टेक्स्ट देखा हुआ है। |
| इतना अच्छा कि यकीन न हो | किसी एक बेंचमार्क पर बहुत बड़ा उछाल लेकिन उससे जुड़े दूसरे कामों में कोई बदलाव नहीं। | असली सुधार आमतौर पर एक जैसे सभी कामों में दिखाई देता है। |
ओवरलैप की जाँच करना
def ngrams(text, n=8):
words = text.lower().split()
return {tuple(words[i:i + n]) for i in range(len(words) - n + 1)}
def overlap(test_item, training_ngrams, n=8):
grams = ngrams(test_item, n)
if not grams:
return 0.0
return len(grams & training_ngrams) / len(grams)
training_text = "... your fine-tuning data joined together ..."
train_grams = ngrams(training_text)
score = overlap("the test question you want to check goes here in full", train_grams)
print(f"overlap: {score:.0%}")अपने इवैल्यूएशन को सुरक्षित रखना
- 1
डेटा को अलग रखें (हेल्ड-आउट)
किसी भी ट्रेनिंग या प्रॉम्प्ट ट्यूनिंग से पहले टेस्ट डेटा को अलग कर लें, और ट्यूनिंग करते समय उसे कभी न देखें। - 2
इसे प्राइवेट रखें
अपने टेस्ट सेट को ऑनलाइन पोस्ट न करें और न ही इसे पब्लिक टूल्स में पेस्ट करें। - 3
इसे रीफ़्रेश करते रहें
मॉडल के ट्रेनिंग कटऑफ़ के बाद लिखे गए नए सवाल जोड़ें, उदाहरण के लिए इस महीने के असली यूज़र सवाल। - 4
पुराने और नए की तुलना करें
अगर मॉडल नए सवालों की तुलना में पुराने सवालों पर बहुत बेहतर करता है, तो पड़ताल करें।
और देखें और पढ़ें
लैब
एक छोटा कंटैमिनेशन चेक: एक n-gram ओवरलैप स्क्रिप्ट और साथ में पुराना बनाम बदले हुए शब्दों वाला टेस्ट।
समस्या
- शुरुआती स्क्रिप्ट कॉपी करें। कोई भी ऐसा टेक्स्ट पेस्ट करें जिसे आप "ट्रेनिंग डेटा" के विकल्प के तौर पर इस्तेमाल कर सकते हैं (उदाहरण के लिए, कोई पब्लिक-डोमेन आर्टिकल या आपके अपने नोट्स)।
- पाँच "टेस्ट सवाल" लिखें: दो उस टेक्स्ट के अंदर से कॉपी किए गए, एक जिसके शब्द काफ़ी बदल दिए गए हों, और दो बिल्कुल नए।
- स्क्रिप्ट चलाएँ और हर सवाल के लिए ओवरलैप रिकॉर्ड करें। यह किन सवालों को पकड़ता है? किन्हें छोड़ देता है?
- यह चेक आपको क्या बता सकता है और क्या नहीं, इस पर दो वाक्य लिखें।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q18-gram चेक में संख्या 8 एक समझौता (ट्रेड-ऑफ़) क्यों है?दिखाएं
छोटे n-grams (जैसे 3 शब्द) "one of the" जैसे आम फ़्रेज़ से मैच हो जाते हैं, जिससे कई साफ़-सुथरे सवाल भी कंटैमिनेटेड लगने लगते हैं। लंबे n-grams (जैसे 20 शब्द) सिर्फ़ लगभग हूबहू कॉपियों से ही मैच होते हैं, इसलिए थोड़े-बहुत बदलाव भी असली लीक्स को छिपा देते हैं। बीच की कोई वैल्यू गलत चेतावनियों और छूट जाने वाली गलतियों के बीच संतुलन बनाती है। टीमें अक्सर कई वैल्यूज़ आज़माती हैं और खुद देखकर मैच की जाँच करती हैं।
Q2एक वेंडर कहता है कि किसी पब्लिक बेंचमार्क पर उसके मॉडल में "कोई कंटैमिनेशन नहीं है"। आप क्या पूछेंगे?दिखाएं
पूछें कि उन्होंने कैसे जाँच की: उन्होंने कौन सा ट्रेनिंग डेटा सर्च किया, मैचिंग का कौन सा तरीका और थ्रेशोल्ड इस्तेमाल किया, क्या उन्होंने पैराफ़्रेज़ और अनुवाद की जाँच की, और क्या वे अपने ट्रेनिंग कटऑफ़ के बाद पब्लिश हुए सवालों पर नतीजे रिपोर्ट करते हैं। फिर अपने खुद के बदले हुए शब्दों वाले या नए सवाल चलाकर देखें। बिना तरीके के किया गया दावा कोई सबूत नहीं होता।
अक्सर पूछे जाने वाले सवाल
क्या कंटैमिनेशन चीटिंग (नकल) जैसा ही है?
आमतौर पर नहीं। ज़्यादातर कंटैमिनेशन अनजाने में होता है: ट्रेनिंग सेट इतने बड़े होते हैं कि कोई भी उन्हें पूरा नहीं पढ़ता। लेकिन स्कोर पढ़ने वाले व्यक्ति के लिए इसका असर चीटिंग जैसा ही होता है, इसलिए इसकी जाँच की जानी चाहिए।
क्या मैं किसी क्लोज्ड मॉडल में कंटैमिनेशन की जाँच कर सकता हूँ?
सिर्फ़ अप्रत्यक्ष रूप से, क्योंकि आप उसका ट्रेनिंग डेटा नहीं देख सकते। संकेतों का इस्तेमाल करें: पुराने और नए सवालों की तुलना करें, सवालों के शब्द बदलें, और टेस्ट करें कि क्या वह टेस्ट सवालों को शब्द-दर-शब्द पूरा करता है। नतीजों को सबूत के तौर पर देखें, पक्के प्रमाण के रूप में नहीं।
अगर किसी मॉडल ने कोई जवाब रट लिया है, तो क्या यह हमेशा बुरा होता है?
यूज़र्स के लिए नहीं: फ़ैक्ट्स याद रखना काम आता है। यह मापने (measurement) के लिए बुरा है, क्योंकि टेस्ट का मकसद नई समस्याओं पर रीज़निंग या कोडिंग जैसी क्षमता को जाँचना था। रटा हुआ जवाब आपको अगली नई समस्या के बारे में कुछ नहीं बताता।
मुझे अपना प्राइवेट टेस्ट सेट कितनी बार रीफ़्रेश करना चाहिए?
इसका कोई तय नियम नहीं है। नियमित रूप से नए असली उदाहरण जोड़ते रहें, खासकर जब आपका प्रोडक्ट या यूज़र्स बदलें। एक स्थिर कोर सेट रखें ताकि आप समय के साथ तुलना कर सकें, साथ ही एक नया हिस्सा रखें जिसे किसी मॉडल ने न देखा हो।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।