Free lesson · GenAI Safety & Evaluation Engineering
தரவுத்தொகுப்பு மாசுபாடு மற்றும் கசிவைக் கண்டறிதல்
மதிப்பீட்டுத் தரவுத்தொகுப்புகள் LLM பயிற்சித் தரவில் கசியவில்லை என்பதை உறுதிசெய்ய மாசுபாடு கண்டறிதலை நீங்கள் உருவாக்குவீர்கள். பின்வருவனவற்றைச் செய்யும் ஒரு ContaminationDetector class-ஐ உருவாக்குங்கள்: (1) ஒவ்வொரு test case input-ஐயும் OpenAI GPT-4o மற்றும் Gemini Pro-க்கு அனுப்புகிறது, (2) எதிர்பார்க்கப்படும் output-ஐ model அப்படியே (verbatim) மீண்டும் உருவாக்க முடிகிறதா என்று சரிபார்க்கிறது (மாசுபாட்டின் அறிகுறி), (3) ஒரு மாசுபாடு மதிப்பெண்ணைக் கணக்கிடுகிறது: model output-க்கும் எதிர்பார்க்கப்படும் பதிலுக்கும் இடையே >90% ROUGE-L overlap உள்ள test case-களின் சதவீதம். மாசுபட்ட test case-களை மாற்றுவதற்காகக் குறியிடுங்கள். ஒரு quarantine workflow-ஐ உருவாக்குங்கள்: மாசுபட்ட case-கள் மாசுபாட்டுச் சான்றுகளுடன் quarantine.jsonl கோப்புக்கு நகர்த்தப்படுகின்றன. ஒரு மாசுபாடு அறிக்கையை உருவாக்குங்கள்: மொத்த case-கள், மாசுபட்ட எண்ணிக்கை, ஒவ்வொரு model-க்கும் மாசுபாடு விகிதம், ஒவ்வொரு category-க்கும் விகிதம்.
Course: GenAI Evaluation, Safety & Governance · Chapter 1 · Evaluation Dataset Curation
Free to read — no subscription required.
அறிமுகம்
ஒரு மாடல் வழங்குநரின் பயிற்சித் தரவில் தோன்றும் ஒரு சோதனை நிகழ்வு (test case), உற்பத்தியில் (production) மறைந்துவிடும் ஊதிப்பெருக்கப்பட்ட பெஞ்ச்மார்க் மதிப்பெண்களை உருவாக்குகிறது. இதுவே தரவுத்தொகுப்பு மாசுபாடு (dataset contamination) — மேலும் நீங்கள் ஆய்வு செய்ய முடியாத பயிற்சிக் கார்பஸ்களைக் கொண்ட hosted LLM-களுக்கு, இதை நிகழ்தகவு அடிப்படையில் மட்டுமே கண்டறிய முடியும். நிலையான நுட்பம் என்னவென்றால், ஒவ்வொரு சோதனை நிகழ்வின் ஒரு பகுதியுடன் மாடலை ஆய்வு செய்து (probe), எதிர்பார்க்கப்படும் தொடர்ச்சியில் எவ்வளவு பகுதியை அது சொல்லுக்குச் சொல் (verbatim) மீண்டும் உருவாக்குகிறது என்பதை அளவிடுவதாகும். அதிக verbatim மேற்பொருந்தல் (ROUGE-L 0.85-க்கு மேல்) என்பது மாடல் அந்த உதாரணத்தை முன்பே பார்த்திருக்கிறது என்பதற்கான வலுவான சான்று; தரவுத்தொகுப்பை ஒரு நியாயமான பெஞ்ச்மார்க்காகப் பயன்படுத்துவதற்கு முன், அந்த நிகழ்வை தனிமைப்படுத்தி (quarantine) புதிய ஒன்றால் மாற்ற வேண்டும்.
முக்கிய சொற்கள்
- மாசுபாடு (Contamination): மாடலின் பயிற்சித் தரவில் இருக்கும் ஒரு சோதனை நிகழ்வு, இது சார்புடைய (biased) eval மதிப்பெண்களை உருவாக்குகிறது.
- ROUGE-L: இரண்டு சரங்களுக்கு (strings) இடையிலான நீளமான பொதுவான துணைவரிசை (longest common subsequence) மேற்பொருந்தல், நீளமான சரத்தால் இயல்பாக்கப்பட்டது. வரம்பு 0–1.
- ஆய்வு (Probe):
temperature=0.0உடன் மாடலுக்கு அனுப்பப்படும் ஒரு சோதனை நிகழ்வின் துண்டிக்கப்பட்ட முன்னொட்டு (prefix); மாடலின் தொடர்ச்சி எதிர்பார்க்கப்படும் வெளியீட்டுடன் ஒப்பிடப்படுகிறது. - தனிமைப்படுத்தல் (Quarantine): மாற்றீட்டிற்காக மாசுபட்ட பதிவுகள் பதிவு செய்யப்படும் ஒரு append-only கோப்பு (
quarantine.jsonl). - மாற்றீடு (Replacement): தனிமைப்படுத்தப்பட்ட நிகழ்வின் இடத்தை நிரப்புவதற்காக உருவாக்கப்படும் ஒரு புதிய சோதனை நிகழ்வு, வகை/சிரமநிலை (category/difficulty) சமநிலையைப் பாதுகாக்கிறது.
கருத்துகள்
செயல்பாட்டு ஒழுங்கு
- எப்போதும் temperature 0.0-இல் ஆய்வு செய்யுங்கள். சீரற்ற (stochastic) sampling ஒவ்வொரு ஓட்டத்திலும் வெவ்வேறு completion-களை உருவாக்கி, மதிப்பெண்களை அர்த்தமற்றதாக்குகிறது.
- தனிமைப்படுத்தலுக்கு append முறையை (
a) பயன்படுத்துங்கள். மேலெழுதுவது (overwriting) மாசுபாட்டு வரலாற்றின் தணிக்கைத் தடத்தை (audit trail) அழிக்கிறது. - ஒரு ஸ்கேனுக்கு குறைந்தது இரண்டு வழங்குநர்களை ஆய்வு செய்யுங்கள். ஒரு வழங்குநரின் பயிற்சித் தரவு மற்றவர்கள் பார்த்ததை உள்ளடக்காமல் இருக்கலாம்; பல வழங்குநர்களிடையே (cross-provider) ஆய்வு செய்வது அதிகமாகக் கண்டறிகிறது.
- காலாண்டுக்கு ஒருமுறை மீண்டும் ஸ்கேன் செய்யுங்கள். வழங்குநர்களின் பயிற்சி cutoff-கள் முன்னேறுகின்றன; புதிய மாடல் பதிப்புகள் வெளியாகும்போது புதிய மாசுபாடு தோன்றுகிறது.
- ROUGE-L > 0.85 என்பதை ஒரு வலுவான சமிக்ஞையாகக் கருதுங்கள், ஆனால் ஆதாரமாக அல்ல. சில சோதனை நிகழ்வுகள் இயல்பாகவே குறைந்த-என்ட்ரோபி கொண்டவை (எ.கா., "2+2 என்ன?") மற்றும் மாசுபாடு இல்லாமலே அதிக மேற்பொருந்தலை உருவாக்குகின்றன. தனிமைப்படுத்துவதற்கு முன் மாதிரி-சரிபார்ப்பு (spot-check) செய்யுங்கள்.
குறியீடு விளக்கம்
ஆய்வுச் சுழற்சி (Probe loop)
Code snippetpython
1import asyncio, json 2from pathlib import Path 3from openai import AsyncOpenAI 4from rouge_score import rouge_scorer 5 6class ContaminationDetector: 7 def __init__(self, providers: dict[str, AsyncOpenAI], threshold: float = 0.85) -> None: 8 self._providers = providers 9 self._threshold = threshold 10 self._scorer = rouge_scorer.RougeScorer(["rougeL"], use_stemmer=True) 11 12 async def probe(self, model: str, prefix: str) -> str: 13 client = self._providers[model] 14 resp = await client.chat.completions.create( 15 model=model, 16 messages=[{"role": "user", "content": prefix}], 17 temperature=0.0, 18 max_tokens=300, 19 ) 20 return resp.choices[0].message.content or "" 21 22 async def score(self, prefix: str, expected: str) -> dict[str, float]: 23 scores: dict[str, float] = {} 24 completions = await asyncio.gather(*[ 25 self.probe(m, prefix) for m in self._providers.keys() 26 ]) 27 for model, completion in zip(self._providers.keys(), completions): 28 r = self._scorer.score(expected, completion)["rougeL"].fmeasure 29 scores[model] = r 30 return scores 31 32 def is_contaminated(self, scores: dict[str, float]) -> bool: 33 return any(s >= self._threshold for s in scores.values())
ContaminationDetectorconstructor, வழங்குநர் பெயர் → SDK client என்ற dict-ஐயும், மாசுபாட்டு வரம்பு மதிப்பையும் (threshold, இயல்புநிலை 0.85) எடுத்துக்கொள்கிறது.probeஒரு மாடலை முன்னொட்டுடன் temperature 0.0-இல் அழைக்கிறது — நிர்ணயவாத (deterministic) அமைப்பு அவசியம், ஏனெனில் நிர்ணயவாதமற்ற decoding பயிற்சித்-தரவு மேற்பொருந்தலை மறைக்கிறது.scoreஅனைத்து வழங்குநர்களையும் ஒரே நேரத்தில் (concurrently) ஆய்வு செய்து, எதிர்பார்க்கப்படும் தொடர்ச்சிக்கு எதிராக ஒவ்வொரு வழங்குநருக்கும் ROUGE-L மதிப்பெண்ணைத் திருப்பித் தருகிறது.- ஏதேனும் ஒரு வழங்குநர் வரம்பு மதிப்பை விட அதிகமாக மதிப்பெண் பெற்றால்,
is_contaminatedஅந்த சோதனை நிகழ்வைக் குறிக்கிறது; ஒரு வழங்குநர் அந்த நிகழ்வை மனப்பாடம் செய்திருந்தாலே cross-provider பெஞ்ச்மார்க்குகளைச் சார்புடையதாக்கப் போதுமானது.
தனிமைப்படுத்தல் ஓட்டம் (Quarantine flow)
மாற்றீட்டுப் படி முக்கியமானது: மாசுபட்ட நிகழ்வுகளை வெறுமனே நீக்குவது தரவுத்தொகுப்பைச் சுருக்கி, பெரும்பாலும் வகை/சிரமநிலை சமநிலையைச் சிதைக்கிறது. எப்போதும் அதே (category, difficulty) கலத்தில் ஒரு புதிய நிகழ்வை உருவாக்கி, அதை மீண்டும் ஆய்வு செய்து, வரம்பு மதிப்பைக் கடந்த பிறகு மட்டுமே அதை commit செய்யுங்கள்.
துறைசார் பயன்பாடு
செய்ய வேண்டியவை மற்றும் செய்யக்கூடாதவை
செய்ய வேண்டியவை
- ஒவ்வொரு
probeஅழைப்பிலும்temperature=0.0என அமைக்கவும் — நிர்ணயவாத decoding தேவை, ஏனெனில் பூஜ்ஜியமற்ற temperature, verbatim பயிற்சித்-தரவு மேற்பொருந்தலை மறைக்கக்கூடிய sampling இரைச்சலை அறிமுகப்படுத்தி, தவறான எதிர்மறைகளை (false negatives) உருவாக்கி, மாசுபட்ட நிகழ்வுகள் செயலில் உள்ள தரவுத்தொகுப்பில் தப்பிப்பிழைக்க அனுமதிக்கிறது. - ஏதேனும் ஒரு வழங்குநரின் ROUGE-L மதிப்பெண் 0.85-ஐ எட்டினாலோ அல்லது மீறினாலோ அந்த சோதனை நிகழ்வை மாசுபட்டதாகக் குறிக்கவும் — எதிர்பார்க்கப்படும் தொடர்ச்சியை மனப்பாடம் செய்த ஒரு வழங்குநர் மட்டுமே cross-provider பெஞ்ச்மார்க்குகளைச் சார்புடையதாக்கப் போதுமானது, எனவே
is_contaminatedசரிபார்ப்பு பெரும்பான்மை அல்லது சராசரியை அல்ல,any()-ஐப் பயன்படுத்த வேண்டும். - அதே
(category, difficulty)கலத்தில் ஒரு மாற்றீட்டை உருவாக்கி, commit செய்வதற்கு முன் அதை மீண்டும் ஆய்வு செய்யவும் — தனிமைப்படுத்தப்பட்ட நிகழ்வுகளை வெறுமனே கைவிடுவது தரவுத்தொகுப்பைச் சுருக்கி, வகை மற்றும் சிரமநிலை சமநிலையைச் சிதைக்கிறது; மாற்றீடு செயலில் உள்ள தரவுத்தொகுப்பில் எழுதப்படுவதற்கு முன் அதுவே வரம்பு மதிப்பைக் கடக்க வேண்டும்.
செய்யக்கூடாதவை
- மாசுபட்ட நிகழ்வைத் தனிமைப்படுத்திய பிறகு மாற்றீட்டுப் படியைத் தவிர்க்க வேண்டாம் — புதிய சோதனை நிகழ்வை உருவாக்காமல்
quarantine.jsonl-இல் சேர்ப்பது தரவுத்தொகுப்பின் உள்ளடக்கத்தில் (coverage) ஒரு இடைவெளியை விடுகிறது; இதன் விளைவாக ஏற்படும் பரவல் மாற்றம் (distribution shift) பெஞ்ச்மார்க் முடிவுகளை முந்தைய ஓட்டங்களுடன் ஒப்பிட முடியாததாக்குகிறது. - ஒரு சோதனை நிகழ்வை மதிப்பிடும்போது வழங்குநர்களை வரிசையாக (sequentially) ஆய்வு செய்ய வேண்டாம் —
scoremethod அனைத்து வழங்குநர்களையும் இணையாக ஆய்வு செய்யasyncio.gather-ஐப் பயன்படுத்துகிறது; அந்த அழைப்புகளை வரிசைப்படுத்துவது வழங்குநர்களின் எண்ணிக்கைக்கு விகிதாசாரமாக தாமதத்தைச் (latency) சேர்த்து, பெரிய-தரவுத்தொகுப்பு மாசுபாட்டு ஸ்கேன்களை நடைமுறைக்கு ஒவ்வாத அளவுக்கு மெதுவாக்குகிறது. - 0.85-க்குக் கீழே உள்ள ROUGE-L மதிப்பெண்ணை, மாடல் அந்த உதாரணத்தை ஒருபோதும் பார்த்ததில்லை என்பதற்கான ஆதாரமாகக் கருத வேண்டாம் — ROUGE-L ஒரு நிகழ்தகவு சமிக்ஞை, தடயவியல் அடிப்படை உண்மை (forensic ground truth) அல்ல; விளிம்பு நிகழ்வுகளைப் பிடிக்க வரம்பு மதிப்பைக் குறைப்பது தவறான நேர்மறைகளை (false positives) அதிகரிக்கிறது, ஆனால் அதை 0.85-க்கு மேல் உயர்த்துவது, மதிப்பெண்களை இன்னும் ஊதிப்பெருக்கும் paraphrase-நிலை மனப்பாடத்தைத் தவறவிடும் அபாயத்தை ஏற்படுத்துகிறது.
3 hands-on labs come with this lesson — real code, in a cloud IDE. Create a free account to run them. No card.
Free account · no card · straight to the labs
Or get the full path — from
Listen to this lesson
Audio overviews of this lesson's labs and its chapter, from GenBodha Bytes.
- Build ContaminationDetector with LLM probingLab5 min
- Implement ROUGE-L overlap scoringLab5 min
- Create quarantine workflow and contamination reportLab5 min
- Evaluation Dataset CurationChapter overview20 min
More free lessons in GenAI Evaluation, Safety & Governance
- Ch 1Build a stratified evaluation dataset
- Ch 1Detect dataset contamination and leakageYou are here
- Ch 3Implement RAGAS metrics for RAG evaluation
- Ch 3Build DeepEval test suites for RAG
- Ch 5Score agent tool selection with DeepEval 3.0 and Vertex AI Agent Evaluation
- Ch 5Build agent benchmarks with task suites
- Ch 7Design A/B experiments for prompt variants