¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo puede estar sesgado un juez

Después de esta lección: Puedo averiguar cómo está sesgado un calificador antes de apoyarme en él.

Lección de 70 min7 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

Comprobar un juez antes de fiarte de él

Un juez es un modelo que califica las respuestas de otro modelo. Sale barato, así que los equipos lo usan mucho. Pero un juez puede inclinarse de formas que nadie ve.

El módulo sobre evaluación y pruebas muestra un juez y su acuerdo con las personas. Esta lección va más lejos, con tres pruebas hechas con números.

Al final de esta lección

Nota

Puedo averiguar cómo está sesgado un calificador antes de apoyarme en él.

Palabras clave

PalabraQué significa
Juezun modelo que califica respuestas
Kappael acuerdo con las personas más allá de lo que da el azar
Sesgo de posiciónuna inclinación hacia un lugar, no hacia una respuesta
Sesgo de longituduna inclinación hacia la respuesta más larga
Conjunto de calibraciónrespuestas que una persona calificó para probar un juez

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

El acuerdo no basta, el azar ayuda

Supón que un juez coincide con una persona en el 90 por ciento de las respuestas. Suena bien. Pero si casi todas aprueban, un juez que siempre dice aprobado también saca mucho.

Kappa quita el azar. Va de 1, perfecto, bajando hasta 0, que no es mejor que el azar.

Ejemplo resuelto: veinte respuestas calificadas

MedidaValorCómo se calcula
Elementos20Contados
Juez y persona coinciden18Un acuerdo del 90 por ciento
Coincidencias por azar, por 400296p por p, más f por f
Kappa0,62(360 menos 296) dividido entre (400 menos 296)

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que un acuerdo alto prueba que un juez es fiable. No es así cuando una etiqueta es mucho más común. Calcula kappa y usa un conjunto de calibración con suficientes casos de cada etiqueta.

Cambia el orden: sesgo de posición

Enseña al juez dos respuestas, X y luego Y, y anota su elección. Después enséñaselas otra vez como Y y luego X. Un juez justo elige la misma respuesta las dos veces.

Si la elección cambia, el juez siguió el lugar. Cuenta los cambios. Si son una cuarta parte de los casos o más, avisa del juez.

Cuenta cuántas veces gana la respuesta más larga

A algunos jueces les gustan las respuestas largas. Para probarlo, aparta los pares de igual longitud. Entre el resto, cuenta cuántas veces el juez elige la más larga.

La mitad más o menos es normal. Tres de cada cuatro o más indican que la longitud dirige la nota.

Escribe el ayudante del modelo, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const base = process.env.AI_URL || \"http://ai:4000\";' '// Los tokens de una respuesta, o null si no trae ninguno.' 'function count(data, name) {' '  return data.usage && typeof data.usage[name] === \"number\" ? data.usage[name] : null;' '}' > model.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el ayudante del modelo, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function ask(messages, sample, max) {' '  try {' '    const res = await fetch(base + \"/v1/chat/completions\", {' '      method: \"POST\",' '      headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' '      body: JSON.stringify({ model: \"lab\", messages: messages, max_tokens: max || 100 }),' '      signal: AbortSignal.timeout(30000),' '    });' '    if (res.ok === false) throw new Error(\"estado \" + res.status);' '    const d = await res.json();' '    return { text: d.choices[0].message.content, inTokens: count(d, \"prompt_tokens\"), outTokens: count(d, \"completion_tokens\"), recorded: false };' '  } catch (error) {' '    console.log(\"Muestra grabada: ningún modelo respondió (\" + error.message + \").\");' '    return { text: sample, inTokens: null, outTokens: null, recorded: true };' '  }' '}' 'module.exports = { ask };' >> model.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe las pruebas del juez, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ask } = require(\"./model\");' 'const H = \"pppppfpppppfpppfpppf\";' 'const J = \"pppppppppppfpppppppf\";' 'const rows = [' '  \"1 40 55 Y Y\", \"2 62 30 X X\", \"3 48 70 Y X\", \"4 33 51 X Y\",' '  \"5 80 45 X Y\", \"6 52 52 X X\", \"7 29 66 Y Y\", \"8 71 40 X Y\",' '  \"9 44 90 Y Y\", \"10 58 36 X X\", \"11 35 62 X Y\", \"12 77 41 X X\",' '].map(function (r) {' '  const p = r.split(\" \");' '  return { x: Number(p[1]), y: Number(p[2]), one: p[3], two: p[4] };' '});' > judge.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe las pruebas del juez, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function count(text, ch) { return text.split(ch).length - 1; }' 'const n = H.length;' 'let agree = 0;' 'for (let i = 0; i < n; i++) { if (H[i] === J[i]) agree++; }' 'const chance = count(J, \"p\") * count(H, \"p\") + count(J, \"f\") * count(H, \"f\");' 'const kappa = (agree * n - chance) / (n * n - chance);' >> judge.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe las pruebas del juez, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'let first = 0;' 'let second = 0;' 'let longer = 0;' 'let unequal = 0;' 'rows.forEach(function (r) {' '  if (r.one === \"X\" && r.two === \"Y\") first++;' '  if (r.one === \"Y\" && r.two === \"X\") second++;' '  if (r.x === r.y) return;' '  unequal++;' '  if ((r.one === \"X\") === (r.x > r.y)) longer++;' '});' >> judge.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe las pruebas del juez, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' '  console.log(\"acuerdo: \" + (agree * 100 / n) + \" por ciento, kappa: \" + kappa.toFixed(2));' '  console.log(\"prueba de intercambio: cambian \" + (first + second) + \" de \" + rows.length + \" (primer lugar \" + first + \", segundo lugar \" + second + \")\");' '  console.log(\"ganó la respuesta más larga: \" + longer + \" de \" + unequal + \" (\" + Math.floor(longer * 100 / unequal) + \" por ciento)\");' '  const q = \"Califica esta respuesta a ¿Dónde está la biblioteca? como aprobada o suspensa, en una palabra: Pregunta a alguien.\";' '  const reply = await ask([{ role: \"user\", content: q }], \"suspensa\", 5);' '  console.log(\"calificación en vivo: \" + reply.text);' '}' 'main();' >> judge.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecuta las pruebas del juez

Comando
docker exec -w /home/node/project agent node judge.js

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lo que imprimen las pruebas

LíneaQué muestra
acuerdo: 90 por ciento, kappa: 0.62Acuerdo alto, más débil sin el azar
prueba de intercambio: cambian 5 de 12Cinco elecciones siguieron el lugar
ganó la respuesta más larga: 9 de 11La más larga ganó el 81 por ciento de las veces
calificación en vivo: ...Una calificación real del laboratorio. Una muestra grabada si ningún modelo responde

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Sobre este laboratorio y su código: Laboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.