# Test-Set स्वच्छता: Leakage और Contamination — LLM Engineering की बुनियाद

Source: https://www.geekswithgeeks.com/hi/llm-engineering/e-leak

> Test मामलों को prompts, प्रशिक्षण डेटा और उदाहरणों से बाहर रखें।

## Test लीक हो तो score झूठ बोलता है

Score तभी ईमानदार है जब system ने **उत्तर नहीं देखे**। Leakage आम है: test मामले prompt के few-shot उदाहरणों में कॉपी; वही दस्तावेज़ fine-tuning डेटा और मूल्यांकन set दोनों में; test सवाल उत्तरों समेत retrieval index में; सार्वजनिक benchmark items जो मॉडल ने pretraining में देखे (**contamination**)। अभ्यास: काम शुरू होने से पहले डेटा **train/dev/test** में बाँटें और हर मामला tag करें; sets के बीच **लगभग-duplicates** जाँचें (जैसे साझा शब्द n-grams, उदाहरण की तरह); test मामले prompt उदाहरणों के रूप में कभी उपयोग न करें; ऐसा **निजी held-out set** रखें जिस पर कोई tune न करे; समय के साथ नए असली मामलों से set **ताज़ा** करें; और अपने निर्णयों के लिए सार्वजनिक benchmark scores पर संशयी रहें। Test set की विफलता ठीक करने के बाद प्रमाण के रूप में पुराना मामला दोबारा उपयोग करने की जगह **नया** समान मामला जोड़ें।

## n-grams से leaked test मामले पहचानना, चलाकर

मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। साफ़ test मामला प्रशिक्षण पाठ से 5-शब्द क्रम साझा नहीं करता, जबकि leaked वाला (प्रशिक्षण से एक शब्द जोड़कर कॉपी किया) 9 साझा करता है और चिह्नित होता है।

```python
def ngrams(text, n=5):
    w = text.lower().split(); return {" ".join(w[i:i + n]) for i in range(len(w) - n + 1)}

train = ["Our refund policy allows returns within thirty days of delivery for unused items",
         "Passwords must be at least twelve characters and include a symbol"]
test_ok  = "How long do I have to return an item I bought last week"
test_bad = "Our refund policy allows returns within thirty days of delivery for unused items today"

train_grams = set().union(*(ngrams(t) for t in train))
for name, t in (("clean test case", test_ok), ("leaked test case", test_bad)):
    overlap = ngrams(t) & train_grams
    print(f"{name:17} shared 5-grams with training data: {len(overlap)}", "-> LEAK" if overlap else "")

```

Output:

```
clean test case   shared 5-grams with training data: 0 
leaked test case  shared 5-grams with training data: 9 -> LEAK
```

## नए मामले जोड़ें, पुराना प्रमाण दोबारा न उपयोग करें

विफलता ठीक करने के बाद नए समान मामले से परखें।

**Quiz:** Prompt के few-shot उदाहरणों में test सवाल हों तो समस्या क्यों है?

- [ ] Few-shot उदाहरण निषिद्ध हैं
- [ ] यह prompt छोटा करता है
- [x] System ने उत्तर देख लिए हैं, इसलिए score असली प्रदर्शन बढ़ाकर बताता है
- [ ] कोई प्रभाव नहीं

*Answer:* System ने उत्तर देख लिए हैं, इसलिए score असली प्रदर्शन बढ़ाकर बताता है. मूल्यांकन को ऐसे मामले चाहिए जो system को दिखाए नहीं गए।
