Wie man eine Referenzmenge beurteilt
Eine Referenzmenge ist die Liste von Fällen, mit der Sie eine KI-Funktion bewerten. Ein Wert ist nur so gut wie diese Liste.
Das Modul über Evals und Tests für modellbasierte Funktionen zeigt, wie man eine erste Menge baut. Diese Lektion stellt eine härtere Frage: Dürfen Sie dem Wert trauen, den sie ergibt?
Am Ende dieser Lektion
Notiz
Ich kann sagen, ob eine Referenzmenge gut genug ist, um ihr zu trauen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Abdeckung | wie gut die Fälle sich auf die Arten von Eingaben verteilen | |
| Label | die Antwort, die eine Person für einen Fall als richtig ansieht | ja |
| Uneinigkeit | zwei Personen geben einem Fall zwei verschiedene Labels | |
| Spielraum | wie weit ein Wert allein durch Zufall schwanken darf | |
| Abstand | der Unterschied zwischen den Werten zweier Versionen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Abdeckung heißt: jede Art wird geprüft
Sortieren Sie Ihre Fälle nach Arten, zum Beispiel einfach, gemischt, Grenzfall und Ablehnung. Zählen Sie jede Art. Eine Art mit nur einem oder zwei Fällen ist dünn.
Eine dünne Art versteckt Fehler. Scheitert eine Funktion an jedem Ablehnungsfall, bewegen zwei Fälle von zwanzig den Wert kaum.
Durchgerechnetes Beispiel: zwanzig Fälle nach Art
| Art | Fälle | Anteil | Urteil |
|---|---|---|---|
| einfach | 10 | 50 Prozent | Genug |
| gemischt | 5 | 25 Prozent | Genug |
| grenzfall | 3 | 15 Prozent | Genug |
| ablehnung | 2 | 10 Prozent | Dünn, mehr Fälle ergänzen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zwei Personen prüfen die Labels des anderen
Ein Label ist die Meinung einer Person. Bitten Sie eine zweite Person, dieselben Fälle zu beschriften, ohne die ersten Labels zu sehen. Vergleichen Sie dann.
Wo beide übereinstimmen, ist der Fall klar. Wo sie abweichen, ist der Fall oder die Regel unklar. Klären Sie diese Fälle, bevor Sie etwas bewerten.
Ein häufiger Fehler
Warnung
Viele denken, das Label einer Fachperson sei die Wahrheit. Es ist eine Meinung. Verlassen Sie sich darauf erst, wenn eine zweite Person zustimmt oder Sie aufgeschrieben haben, warum der Fall dieses Label hat.
Eine kleine Menge trennt zwei Versionen nicht
Ein Wert schwankt durch Zufall. Als grobe Regel gilt für den Spielraum: 100 geteilt durch die Wurzel der Fallzahl, in Punkten. Bei 100 Fällen sind es 10 Punkte.
Ein Abstand unter dem Spielraum kann Rauschen sein. Um 5 Punkte Abstand zu sehen, brauchen Sie etwa 400 Fälle.
Durchgerechnetes Beispiel: Fälle und Spielraum
| Fälle | Spielraum in Punkten | Kleinster Abstand, dem Sie trauen |
|---|---|---|
| 25 | 20 | Etwa 20 Punkte |
| 100 | 10 | Etwa 10 Punkte |
| 400 | 5 | Etwa 5 Punkte |
| 2.500 | 2 | Etwa 2 Punkte |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Die Modellhilfe schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' '// Die Token einer Antwort oder null, wenn sie keine nennt.' 'function zaehlen(daten, name) {' ' return daten.usage && typeof daten.usage[name] === \"number\" ? daten.usage[name] : null;' '}' > model.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Modellhilfe schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function fragen(nachrichten, probe, max) {' ' try {' ' const res = await fetch(basis + \"/v1/chat/completions\", {' ' method: \"POST\",' ' headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' ' body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 100 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"Status \" + res.status);' ' const d = await res.json();' ' return { text: d.choices[0].message.content, eingabe: zaehlen(d, \"prompt_tokens\"), ausgabe: zaehlen(d, \"completion_tokens\"), aufgezeichnet: false };' ' } catch (fehler) {' ' console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' ' return { text: probe, eingabe: null, ausgabe: null, aufgezeichnet: true };' ' }' '}' 'module.exports = { fragen };' >> model.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Mengenprüfung schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const zeilen = [' ' \"1 einfach ja ja\", \"2 einfach ja ja\", \"3 einfach nein nein\", \"4 einfach ja ja\", \"5 einfach nein nein\",' ' \"6 einfach ja ja\", \"7 gemischt ja nein\", \"8 gemischt nein nein\", \"9 gemischt ja ja\", \"10 einfach nein nein\",' ' \"11 gemischt nein nein\", \"12 grenzfall ja ja\", \"13 gemischt ja nein\", \"14 grenzfall nein nein\", \"15 einfach ja ja\",' ' \"16 einfach nein nein\", \"17 grenzfall ja ja\", \"18 einfach ja nein\", \"19 ablehnung nein nein\", \"20 ablehnung nein nein\",' '].map(function (z) {' ' const t = z.split(\" \");' ' return { id: Number(t[0]), art: t[1], a: t[2], b: t[3] };' '});' > pruefung.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Mengenprüfung schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const zahlen = {};' 'zeilen.forEach(function (z) { zahlen[z.art] = (zahlen[z.art] || 0) + 1; });' 'const duenn = Object.keys(zahlen).filter(function (k) { return zahlen[k] < 3; });' 'const weicht = zeilen.filter(function (z) { return z.a < z.b || z.a > z.b; });' 'const gleich = zeilen.length - weicht.length;' 'const abstand = 5;' 'const noetig = (100 / abstand) * (100 / abstand);' >> pruefung.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Mengenprüfung schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' console.log(\"Fälle: \" + zeilen.length + \" nach Art: \" + JSON.stringify(zahlen));' ' console.log(\"dünne Arten (unter 3): \" + duenn.join(\", \"));' ' console.log(\"einig: \" + (gleich * 100 / zeilen.length) + \" Prozent\");' ' console.log(\"diese Nummern prüfen: \" + weicht.map(function (z) { return z.id; }).join(\", \"));' ' console.log(\"für einen Abstand von \" + abstand + \" Punkten brauchen Sie etwa \" + noetig + \" Fälle\");' ' const q = \"Schreiben Sie in einem kurzen Satz, warum zwei Personen dieselben Fälle beschriften sollten.\";' ' const probe = \"Wo sie sich widersprechen, ist der Fall oder die Regel unklar, und ein Wert dafür sagt wenig.\";' ' const antwort = await fragen([{ role: \"user\", content: q }], probe, 60);' ' console.log(\"Das Modell sagte: \" + antwort.text);' '}' 'main();' >> pruefung.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Prüfung ausführen
docker exec -w /home/node/project agent node pruefung.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Was die Prüfung ausgibt
| Zeile | Was sie zeigt |
|---|---|
| Fälle: 20 nach Art: {...} | Wie viele Fälle jede Art hat |
| dünne Arten (unter 3): ablehnung | Arten, die mehr Fälle brauchen |
| einig: 85 Prozent | Wie oft beide Personen übereinstimmten |
| diese Nummern prüfen: 7, 13, 18 | Fälle, bei denen sie abweichen |
| für einen Abstand von 5 Punkten brauchen Sie etwa 400 Fälle | Wie viele Fälle ein Abstand dieser Größe braucht |
| Das Modell sagte: ... | Ein Satz aus dem Labor. Eine Aufgezeichnete Probe, wenn kein Modell antwortet |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.