Los sesgos del juez y cómo domarlos
auditarás y mitigarás los tres sesgos sistemáticos de un LLM-as-judge —posición, verbosidad y self-preference— entendiendo el mecanismo de cada uno y aplicando la mitigación correcta. Sin esto, tu juez mide el orden de presentación o la longitud, no la calidad, y tú lo confundes con un veredicto.
4.1El juez que prefería ir primero
Estás iterando el prompt del agente de Aurora —la tienda online ficticia que es tu banco de pruebas todo el curso—. Quieres saber si la versión B del prompt responde mejor que la versión A.
Montas un juez pairwise: "¿cuál respuesta es mejor, la primera o la segunda?". Le das el par (A, B) y dice "la primera". Bien, parece que A gana.
Por curiosidad, le das el mismo par al revés, (B, A). Dice… "la primera".
Léelo otra vez. El juez no prefiere la respuesta A. Prefiere la que va primera. Tu comparación de prompts no estaba midiendo calidad. Estaba midiendo el orden en que pegaste las dos respuestas en el prompt.
Y aquí viene la pregunta incómoda: si nunca hubieras invertido el orden por curiosidad, habrías declarado a A ganadora y cambiado el prompt de producción. La decisión habría sido un artefacto del layout, no de la evidencia.
¿Cuántos de tus veredictos son sesgo y no juicio? Esta lección te enseña a cazarlos.
4.2Qué vas a poder hacer
Al terminar esta lección sabrás:
- Diagnosticar cuál de los tres sesgos —posición, verbosidad, self-preference— explica un síntoma concreto del juez.
- Aplicar swap-and-average para neutralizar el sesgo de posición en un juez pairwise.
- Diseñar un mini-experimento que confirme o descarte el sesgo de verbosidad.
- Distinguir lo que está establecido sobre estos sesgos de lo que sus propios autores marcan como no concluyente.
Necesitas saber antes:
- De N2·L2: las cuatro decisiones de diseño del juez, en especial el modo pointwise (juzga una respuesta) frente al pairwise (compara dos). El sesgo de posición vive en el pairwise.
- De N2·L3: que tu juez es un clasificador y se valida con su acuerdo con el humano (Cohen's κ). Un κ bajo puede deberse a un sesgo escondido.
Esta lección no construye un juez nuevo. Audita y arregla el que ya tienes.
4.3Recupera
Antes de seguir, responde mentalmente. No mires lo de abajo hasta tener tu respuesta.
- En N2·L3 validaste el juez y quizá te salió un κ bajo. La validación te dijo que algo iba mal con el acuerdo. ¿Te dijo por qué?
- De N2·L2: ¿en cuál de los dos modos —pointwise o pairwise— le presentas al juez dos respuestas en un orden concreto?
- Si un juez pairwise cambia su veredicto al invertir el orden de las dos respuestas, ¿qué propiedad esperada de un buen juez se rompe?
La respuesta a la 1 es no: la validación mide la brecha, no la causa. Una causa que L3 dejó abierta es el sesgo sistemático. La respuesta a la 2 es el pairwise: ahí hay un "primero" y un "segundo", y por tanto un orden que sesgar. La respuesta a la 3 es la consistencia: un veredicto justo no debería depender de en qué posición pegaste cada respuesta. Validar te dice que algo falla; auditar sesgos te dice qué.
4.4El concepto: tres formas de medir lo que no querías medir
Empecemos por lo concreto y subamos hacia la idea general.
Un sesgo del juez es una preferencia sistemática del LLM-as-judge por una propiedad irrelevante de la respuesta —su posición, su longitud, su autor— en lugar de por su calidad. La analogía: un juez de tribunal que falla a favor del abogado que habla primero, o del que usa más folios. El límite de la analogía: el LLM no "tiene intención" de favorecer a nadie; el sesgo emerge de cómo procesa el texto, no de una motivación.
Es común confundir "el juez se equivoca" con "el juez está sesgado". La diferencia clave: un juez incompetente falla de forma dispersa; un juez sesgado falla en una dirección predecible. Esa dirección predecible es lo que puedes cazar y corregir.
Vamos con los tres del temario, cada uno con su mecanismo y su mitigación.
Sesgo de posición
El sesgo de posición es la tendencia del juez a favorecer sistemáticamente una posición —a menudo la primera— con independencia del contenido. Es exactamente el fallo del hook.
La evidencia es contundente y muy variable entre modelos. El estudio MT-Bench (Zheng et al., Judging LLM-as-a-Judge, arXiv:2306.05685) midió la consistencia de posición: el porcentaje de veces que el juez mantiene su veredicto al invertir el orden. Distintos modelos dieron consistencias muy distintas, y few-shot la mejoraba de forma notable. (Las cifras exactas por modelo de este paper están pendientes de verificación final; cuando las cites, hazlo desde la tabla del paper, no de memoria.)
Hay un detalle que importa para Aurora. El sesgo de posición se acentúa cuando el gap de calidad entre las dos respuestas es pequeño (Shi et al., Judging the Judges, arXiv:2406.07791). Cuando una respuesta es mucho mejor, el orden importa poco. Cuando A y B se parecen, el orden decide. Iterar un prompt produce justo ese caso: cambios sutiles, respuestas similares. Justo cuando más necesitas un juez fino, más muerde el sesgo.
La mitigación estándar es swap-and-average: evaluar cada par en ambos órdenes (A→B y B→A). Te quedas con los veredictos que coinciden, o promedias (fuente: arXiv:2411.16594; Hamel Husain, llm-judge, 2024). Si el juez dice "la primera" en ambos órdenes, vota por posición, no por calidad: ese par es inconsistente y no cuenta. Si dice "A" en un orden y "A" en el otro, el veredicto es robusto.
Sesgo de verbosidad
El sesgo de verbosidad es la tendencia del juez a premiar respuestas más largas aunque no sean mejores. Más tokens, más alto el score, sin que la longitud aporte corrección.
El mismo estudio MT-Bench lo demostró con el "repetitive list attack": inflar una respuesta repitiendo contenido sin añadir información. Unos modelos cayeron casi por completo en la trampa; otros la resistieron casi del todo (arXiv:2306.05685). (Cifras exactas pendientes de verificación final; no las cites de memoria.) La lección operativa no depende del número. Algunos jueces confunden volumen con calidad. No sabes cuál es el tuyo hasta que lo pruebas.
Aterriza esto en Aurora. Una respuesta de política larga y prolija no está más fundamentada que una corta y exacta. Si tu juez de groundedness premia la primera, está midiendo verborrea, no fidelidad al chunk recuperado.
La mitigación tiene dos partes. Primero, rúbrica explícita: instruir al juez para que penalice la longitud no informativa y juzgue solo la fundamentación. Segundo, medir la correlación: comprobar si el veredicto del juez correlaciona con el número de tokens de la respuesta. Si las respuestas que pasan son sistemáticamente más largas que las que fallan, tienes un sospechoso.
Self-preference
El self-preference —también llamado sesgo egocéntrico— es la observación de que un juez tiende a favorecer outputs producidos por su propio modelo o familia. Aquí hace falta más cuidado del habitual con lo que afirmamos.
La observación: en MT-Bench, GPT-4 favoreció sus propios outputs con un win rate +10%, y Claude-v1 con +25% (arXiv:2306.05685). Pero —y esto es lo que muchos resúmenes omiten— los propios autores advierten que no pueden concluir causalidad: los datos son limitados y las diferencias, pequeñas. No es un hecho cerrado. Preséntalo como una observación con esa caveat, no como una ley.
Hay un mecanismo propuesto que reencuadra el fenómeno. El juez no se prefiere por autoría (no hay narcisismo). Prefiere outputs de baja perplejidad —texto que le resulta predecible y familiar— y sus propios outputs le resultan familiares por construcción (Wataoka et al., arXiv:2410.21819). La perplejidad mide cuánto "sorprende" un texto al modelo: baja perplejidad = el modelo lo habría escrito de forma parecida. Visto así, el self-preference es preferencia por lo predecible, no por lo propio.
La mitigación es de diseño: cuando sea posible, usa un juez de familia o modelo distinto al sistema evaluado. Si Aurora corre con un modelo X, juzgar sus salidas con ese mismo X arriesga premiar la familiaridad. Y si no puedes cambiar de modelo, al menos sé consciente del riesgo al leer los veredictos.
El mapa más amplio y un orden de daño
Los tres sesgos del temario no son la lista completa. El survey de jueces (arXiv:2411.16594) enumera más: length, formatting, authority, egocentric (= self-preference), preference leakage, position. Quédate con el mapa; profundizamos en los tres que más afectan a tu juez de Aurora.
Por último, una pieza de evidencia sobre la magnitud relativa del daño. El trabajo CALM (arXiv:2410.02736) cataloga 12 sesgos clave y propone una métrica de robustez (Robustness Rate). De ese trabajo, lo defendible hoy es el orden cualitativo: el sesgo de sentiment daña más que el de verbosity. Los valores numéricos exactos requieren leer el PDF y están pendientes; no los cites como cifra. El orden cualitativo sí es sólido y útil: no todos los sesgos pesan igual.
4.5Míralo funcionar: auditoría de posición sobre el juez de Aurora
Volvamos al juez pairwise del hook. Vamos a auditarlo de verdad: medir cuánto sesgo de posición tiene y aplicar swap-and-average.
Esta sección tiene código. Léelo entero primero; después lo recorremos por bloques. La idea es sencilla aunque el código parezca denso: corremos cada par dos veces, en ambos órdenes, y comparamos.
El juez usa el SDK de Anthropic con structured output, igual que en N2·L2. Recibe dos respuestas y elige.
1import json
2import anthropic
3
4client = anthropic.Anthropic()
5
6PROMPT_PAIRWISE = """Eres un evaluador del agente de soporte de Aurora.
7Te doy una pregunta de cliente y dos respuestas candidatas.
8Elige cuál responde mejor, basándote SOLO en la calidad, no en la longitud.
9
10Pregunta: {pregunta}
11Respuesta PRIMERA: {primera}
12Respuesta SEGUNDA: {segunda}
13
14Devuelve un JSON con 'ganadora' ("primera" o "segunda") y 'razon' (1 frase)."""
15
16def juzgar_par(pregunta: str, primera: str, segunda: str) -> dict:
17 response = client.messages.create(
18 model="claude-sonnet-4-6",
19 max_tokens=256,
20 messages=[{
21 "role": "user",
22 "content": PROMPT_PAIRWISE.format(
23 pregunta=pregunta, primera=primera, segunda=segunda
24 ),
25 }],
26 output_config={
27 "format": {
28 "type": "json_schema",
29 "schema": {
30 "type": "object",
31 "properties": {
32 "ganadora": {"type": "string", "enum": ["primera", "segunda"]},
33 "razon": {"type": "string"},
34 },
35 "required": ["ganadora", "razon"],
36 "additionalProperties": False,
37 },
38 }
39 },
40 )
41 return json.loads(response.content[0].text)Ahora el corazón de la auditoría. Para cada par (a, b) lo juzgamos dos veces: una con a en primera posición, otra con b en primera posición. El truco está en traducir "primera/segunda" de vuelta a "a/b" según el orden en que lo pasamos.
1def auditar_posicion(pares: list[dict]) -> dict:
2 """pares: [{'pregunta':..., 'a':..., 'b':...}, ...]
3 Corre cada par en ambos órdenes y mide la consistencia."""
4 consistentes = 0
5 veredictos_robustos = []
6
7 for par in pares:
8 # Orden 1: a=primera, b=segunda
9 v1 = juzgar_par(par["pregunta"], par["a"], par["b"])
10 gana_orden1 = "a" if v1["ganadora"] == "primera" else "b"
11
12 # Orden 2 (swap): b=primera, a=segunda
13 v2 = juzgar_par(par["pregunta"], par["b"], par["a"])
14 gana_orden2 = "b" if v2["ganadora"] == "primera" else "a"
15
16 if gana_orden1 == gana_orden2:
17 consistentes += 1
18 veredictos_robustos.append({"par": par, "ganadora": gana_orden1})
19 # si difieren -> el juez votó por posición; descartamos el par
20
21 tasa = consistentes / len(pares)
22 return {"tasa_consistencia": tasa, "robustos": veredictos_robustos}Ahora la auto-explicación. Antes de leer el análisis, responde: ¿por qué traducir "primera/segunda" a "a/b" es el paso que hace honesta la comparación?
Porque sin esa traducción compararías dos cosas distintas. En el orden 1, "primera" significa a; en el orden 2, "primera" significa b. Si solo miraras la etiqueta cruda "primera", un juez que siempre dice "primera" parecería consistente (dice lo mismo las dos veces). La traducción lo desenmascara: un juez pegado a la posición elige a en el orden 1 y b en el orden 2 —ganadores distintos—, y eso lo marca como inconsistente.
Leamos un resultado. Supón que corres 50 pares y obtienes:
1tasa_consistencia: 0.60 ← 30 de 50 pares coinciden al invertir
2robustos: 30 paresUna tasa de consistencia del 60% es una señal de alarma. Significa que en 20 de 50 pares el juez cambió de ganadora solo por invertir el orden. Para esos 20, su veredicto no medía calidad. El swap-and-average los descarta y se queda con los 30 robustos. Tu agregado ahora se apoya solo en veredictos que sobrevivieron a la inversión.
Una segunda auto-explicación, esta más sutil: ¿por qué swap-and-average no elimina el sesgo de posición, pero sí neutraliza su efecto en el agregado?
Porque el sesgo sigue ahí dentro del modelo: en cada llamada individual, el juez todavía tiende a favorecer la primera posición. Swap-and-average no cambia esa tendencia. Lo que hace es cancelarla. Al promediar los dos órdenes, la ventaja que el sesgo da a "lo primero" se reparte por igual entre a y b, y se anula. El sesgo persiste a nivel de llamada; desaparece a nivel de agregado.
4.6Hazlo tú
Ejercicio 1 — andamiaje parcial
Has corrido un experimento de swap sobre 8 pares del juez de Aurora. Aquí están los veredictos ya traducidos a "a/b" en cada orden:
1par 1: orden1=a orden2=a
2par 2: orden1=a orden2=b
3par 3: orden1=b orden2=b
4par 4: orden1=a orden2=a
5par 5: orden1=b orden2=a
6par 6: orden1=b orden2=b
7par 7: orden1=a orden2=b
8par 8: orden1=a orden2=aCompleta los dos huecos:
- La tasa de consistencia es ______ (pista: cuenta los pares donde orden1 == orden2, divide entre 8).
- Los pares que el swap descarta por inconsistentes son: ______ (pista: aquellos donde el ganador cambia al invertir).
Ejercicio 2 — autónomo
Sospechas que tu juez de groundedness de Aurora tiene sesgo de verbosidad: parece que aprueba más las respuestas largas. Pero "parece" no es un dato.
Sin mirar la solución, diseña el mini-experimento que confirma o descarta el sesgo. Tu respuesta debe especificar:
- Qué pares de respuestas construirías para aislar la longitud (pista: misma fundamentación, distinta extensión).
- Qué medirías sobre los veredictos del juez.
- Qué resultado confirmaría el sesgo y cuál lo descartaría.
- Qué mitigación aplicarías si se confirma.
Antes de seguir, una interrogación elaborativa. Respóndela tú primero: ¿por qué para aislar el sesgo de verbosidad las dos respuestas del par deben tener la misma fundamentación? Piénsalo antes de leer la línea siguiente.
Porque si difieren en fundamentación y en longitud, no sabrías a cuál de las dos atribuir el cambio de veredicto. Igualando la fundamentación, la única variable que se mueve es la longitud. Si el veredicto cambia, solo puede deberlo a ella. Es el mismo principio de control que harías en cualquier experimento: una variable a la vez.
4.7Comprueba
Sin pistas. Para cada síntoma, nombra el sesgo, su mecanismo y la mitigación correcta. Para el self-preference, incluye además el caveat que sus autores señalan.
Síntoma A: "Mi juez pairwise cambia de ganadora cuando invierto el orden de las dos respuestas."
Síntoma B: "Mi juez aprueba sistemáticamente las respuestas más largas, aunque no añadan información correcta."
Síntoma C: "Mi juez, que corre con el mismo modelo que el agente, parece favorecer las salidas de ese agente frente a las de un modelo distinto."
Ver la respuesta razonada
Síntoma A — sesgo de posición. Mecanismo: el juez favorece una posición (a menudo la primera) con independencia del contenido; se acentúa cuando el gap de calidad entre las dos respuestas es pequeño. Mitigación: swap-and-average —correr cada par en ambos órdenes y quedarse con los veredictos consistentes o promediar—.
Síntoma B — sesgo de verbosidad. Mecanismo: el juez premia la longitud aunque no aporte corrección (el "repetitive list attack" lo demuestra). Mitigación: rúbrica que penalice explícitamente la longitud no informativa, más medir si el veredicto correlaciona con el número de tokens.
Síntoma C — self-preference (sesgo egocéntrico). Mecanismo propuesto: el juez prefiere outputs de baja perplejidad (familiaridad), no por autoría. Mitigación: usar un juez de familia o modelo distinto al evaluado. Caveat obligatorio: los autores que observaron el efecto (+10% GPT-4, +25% Claude-v1) advierten que no pueden concluir causalidad —datos limitados, diferencias pequeñas—. Preséntalo como observación, no como hecho cerrado.
Feedback formativo:
- Si acertaste los tres con su mecanismo: dominas el núcleo de la auditoría de sesgos —síntoma → mecanismo → mitigación—. Reutilizarás este reflejo en N2·L6, cuando audites tu juez para el checkpoint C2, y en N5, al vigilar el juez en producción.
- Si nombraste el sesgo pero fallaste el mecanismo: el nombre sin el mecanismo no te deja arreglarlo. Para C, el error típico es decir "se quiere a sí mismo"; la explicación defendible es la baja perplejidad (familiaridad). Vuelve al §4.4 y verbaliza cada mecanismo en una frase.
- Si olvidaste el caveat de causalidad en C: ahí está la diferencia entre repetir un titular y entender la evidencia. Los propios autores frenan la conclusión causal. Afirmar causalidad donde la fuente no la afirma es el error que este curso te entrena a no cometer. Releer §4.4, "Self-preference", cierra la brecha.
4.8Conecta
Vuelve al juez del hook, el que prefería ir primero.
Antes, ese sesgo era invisible: solo lo viste porque invertiste el orden por curiosidad. Ahora tienes el método. Corres swap-and-average, mides la tasa de consistencia y te quedas solo con los veredictos que sobreviven a la inversión. El artefacto del layout deja de contaminar tus decisiones de producto.
Has recorrido tres piezas del juez: lo diseñaste (L2), lo validaste (L3) y ahora lo desbiasaste (L4). Pero domar sesgos sube el suelo de tu juez —quita el ruido sistemático—; quizá aún no llegue al umbral de acuerdo que te fijaste.
La pieza que falta no es un arreglo puntual. Es un bucle de iteración disciplinado que sube el acuerdo de forma sistemática, leyendo dónde tu juez discrepa de ti y refinando la rúbrica. Eso es N2·L5.
La idea que sostiene esta lección: un veredicto que cambia al invertir el orden no es un veredicto, es un sesgo con disfraz de juicio. Cazarlo es barato: corres el par dos veces. No cazarlo te cuesta decisiones tomadas sobre ruido.
Cierra con esto: domar sesgos sube el suelo de tu juez; alinearlo sube el techo. L5 ataca el techo.
4.9Reflexiona
Tómate dos minutos. Estas preguntas consolidan más que releer.
- De los tres sesgos, ¿cuál es más peligroso en tu contexto? El de posición es invisible si nunca inviertes el orden. ¿Estás invirtiéndolo hoy?
- Con tus palabras: ¿por qué swap-and-average neutraliza el sesgo de posición sin eliminarlo?
- ¿Qué sigue sin estar claro? Anótalo. Si es "cómo subo el acuerdo cuando los sesgos ya están domados", es la pregunta correcta —la responde L5—.
Referencia rápida
- Sesgo del juez: preferencia sistemática por una propiedad irrelevante (posición, longitud, autor) en vez de por la calidad. Falla en una dirección predecible (arXiv:2411.16594 lista la familia completa).
- Posición: favorece una posición (a menudo la primera); se acentúa con gap de calidad pequeño (arXiv:2306.05685; arXiv:2406.07791). Mitigación: swap-and-average —ambos órdenes, quedarse con los consistentes—.
- Verbosidad: premia la longitud aunque no aporte corrección ("repetitive list attack", arXiv:2306.05685). Mitigación: rúbrica que penaliza longitud no informativa + medir correlación con tokens.
- Self-preference: favorece outputs propios (+10% GPT-4, +25% Claude-v1) pero los autores no concluyen causalidad (arXiv:2306.05685). Mecanismo propuesto: baja perplejidad/familiaridad (arXiv:2410.21819). Mitigación: juez de modelo distinto al evaluado.
- Magnitud relativa (CALM, arXiv:2410.02736): orden cualitativo defendible —sentiment daña más que verbosity—; valores numéricos exactos pendientes del PDF, no citar como cifra.
- No usar nunca: cifras de sesgo "de memoria" sin pegarlas a su setup; afirmar causalidad del self-preference donde la fuente la niega.