Hoppa till innehållet
AI-grafen
GFrontier LabLaboration· ca 90 min· sandlåda på servern

Labb: bygg och validera en benchmark

Bygga verktygen som gör en fallmängd till en benchmark — annotatörsöverensstämmelse, kontamineringskoll mot en korpus, validering mot baslinjer (golv, tak, diskriminering) och ett datakort — och köra dem på en given fallmängd.

Teori

En benchmark är ett mätinstrument: mätdomän, facit med känd tillförlitlighet (κ), skydd mot kontaminering (n-gram-överlapp, kanarier), och validering som visar att den skiljer system åt (ingen mättnad, inget golv). Ett datakort dokumenterar källa, licens, konstruktion och kända skevheter.

Deluppgifter

  1. kappa — cohens_kappa(a, b) för två lika långa etikettlistor (strängar). load_jsonl(path).
  2. kontaminering — ngrams(text, n) → mängd av n-gram (ord, gemener, bara \w+); contaminated(cases, corpus_text, n=8) → lista av case-id vars fråga har minst ett n-gram i korpusen.
  3. validering — validate(cases, results) där results är {system: {case_id: bool}} → {"floor": [id som ingen klarar], "ceiling": [id som alla klarar], "discrimination": andel fall där systemen skiljer sig, "accuracy": {system: andel}}.
  4. datakort — datacard(cases, meta) → markdown-sträng med rubrikerna "# <title>", "## Mätdomän", "## Källa och licens", "## Konstruktion", "## Kända skevheter", "## Statistik" (antal fall, fördelning per svårighet).

Godkänt när: ok >= 1

Startkoden

körs i en isolerad sandlåda på servern
"""Benchmark-verktyg. Fyll i funktionerna."""
import json
import re


def load_jsonl(path):
    return [json.loads(l) for l in open(path, encoding="utf-8") if l.strip()]


def cohens_kappa(a, b):
    """Cohens kappa för två lika långa listor med etiketter."""
    # TODO
    raise NotImplementedError


def ngrams(text, n=8):
    """Mängd av n-gram över ord (gemener, bara \\w+)."""
    # TODO
    raise NotImplementedError


def contaminated(cases, corpus_text, n=8):
    """Lista av case-id (i indataordning) vars 'question' delar minst ett n-gram med korpusen."""
    # TODO
    raise NotImplementedError


def validate(cases, results):
    """results: {system: {case_id: bool}}. Returnerar {"floor": [...], "ceiling": [...], "discrimination": float, "accuracy": {system: float}}."""
    # TODO
    raise NotImplementedError


def datacard(cases, meta):
    """Markdown med rubrikerna: '# <title>', '## Mätdomän', '## Källa och licens', '## Konstruktion', '## Kända skevheter', '## Statistik'."""
    # TODO
    raise NotImplementedError

Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.

Prova diagnosenSkapa konto gratis

Förväntade resultat

κ mellan de två annotatörerna ≈ 0,7; exakt två fall är kontaminerade mot korpusen (c07, c14); valideringen hittar ett takfall och ett golvfall; datakortet innehåller alla sex rubriker. Evalen sätter ok = 1 när allt stämmer.

Vanliga fel

  • κ: pe ska summera produkten av marginalerna per etikett, inte bara majoritetsklassen.
  • n-gram: normalisera till gemener och ta bort skiljetecken innan du delar — annars missar du överlapp.
  • discrimination: ett fall diskriminerar när minst ett system har rätt och minst ett har fel.
  • Datakortet: rubrikerna måste vara exakt de angivna (tester söker efter dem).