Datasetdesign för finjustering
Kunna bygga, rensa och balansera ett instruktionsdataset, och mäta hur datakvalitet påverkar resultatet.
Förkunskaper
Intuition
Vid finjustering är datakvalitet viktigare än datamängd. LIMA-pappret nådde stark instruktionsföljning med 1 000 noggrant utvalda exempel. Tusentals slarviga exempel gör modellen sämre, inte bättre.
Vad «kvalitet» betyder konkret:
- Svaren är i exakt den form du vill ha i produktion (längd, ton, struktur).
- Inga motsägelser mellan exempel.
- Inga fel — modellen lär sig felen ordagrant.
- Täcker de fall som faktiskt förekommer, inklusive de svåra.
- Innehåller exempel på att avstå när underlaget saknas.
Den sista glöms nästan alltid: en modell som aldrig sett ett «det vet jag inte»-exempel kommer aldrig att svara så.
Kod
import hashlib, re
from collections import Counter
def normalisera(t):
return re.sub(r"\s+", " ", t.lower()).strip()
def rensa(exempel, eval_texter, min_ord=5, max_ord=800):
sedda, eval_h = set(), {hashlib.sha256(normalisera(t).encode()).hexdigest() for t in eval_texter}
ut, bort = [], Counter()
for e in exempel:
h = hashlib.sha256(normalisera(e["instruktion"] + e["svar"]).encode()).hexdigest()
n = len(e["svar"].split())
if h in sedda: bort["dubblett"] += 1; continue
if h in eval_h: bort["läckage_mot_eval"] += 1; continue
if not (min_ord <= n <= max_ord): bort["längd"] += 1; continue
if "som språkmodell" in e["svar"].lower(): bort["mall-svar"] += 1; continue
sedda.add(h); ut.append(e)
return ut, dict(bort)
rensade, statistik = rensa(raw, eval_texter=[f["input"] for f in evalfall])
print(len(raw), "→", len(rensade), statistik)
# 12400 → 9180 {'dubblett': 2010, 'läckage_mot_eval': 37, 'längd': 980, 'mall-svar': 193}
Balansering: räkna exempel per kategori och per svarslängd. Är 70 % av exemplen av en typ lär sig modellen den typen på de andras bekostnad. Nedsampla den stora kategorin hellre än att uppsampla de små (dubbletter lärs in ordagrant).
Mät att det hjälpte: träna på 25 %, 50 % och 100 % av datan och rita kurvan. Planar den ut är mer data inte lösningen — bättre data eller annan metod är det. Det är ett två timmars experiment som ofta sparar veckor.
Behärskning innebär
- Bygger och balanserar ett instruktionsdataset
- Rensar dubbletter och läckage mot evalsviten
- Mäter hur datakvalitet påverkar resultatet
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- arXiv — LIMA: Less Is More for Alignment — arXiv (öppen åtkomst; licens per artikel)
- arXiv — Training language models to follow instructions with human feedback — arXiv (öppen åtkomst; licens per artikel)