<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>G-Eval on lo0 — Blog Técnico</title><link>https://blog.lo0.es/tags/g-eval/</link><description>Recent content in G-Eval on lo0 — Blog Técnico</description><generator>Hugo -- gohugo.io</generator><language>es</language><lastBuildDate>Wed, 27 May 2026 08:30:00 +0200</lastBuildDate><atom:link href="https://blog.lo0.es/tags/g-eval/index.xml" rel="self" type="application/rss+xml"/><item><title>LLM-as-judge: el corrector de oposiciones que evalúa a otros modelos sin convertirse en oráculo</title><link>https://blog.lo0.es/posts/llm-as-judge-fundamentos/</link><pubDate>Wed, 27 May 2026 08:30:00 +0200</pubDate><guid>https://blog.lo0.es/posts/llm-as-judge-fundamentos/</guid><description>&lt;blockquote>
&lt;p>Este post profundiza la sección de &lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">Evals para LLMs&lt;/a> sobre judges. Allí estaba como una pieza del tribunal mixto; aquí entramos a por qué funciona, dónde se rompe y cómo se mide su calibración antes de aceptarlo en CI.&lt;/p>
&lt;/blockquote>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>Un judge LLM no es &amp;ldquo;un GPT-4 al que le preguntas si la respuesta es buena&amp;rdquo;. Es un &lt;strong>corrector formado&lt;/strong>: tiene una rúbrica escrita por adelantado, se le pide razonamiento explícito antes del veredicto, su score se calcula como expectativa ponderada por las probabilidades de los tokens (no como el primer token que escupe), y antes de aceptarlo en producción se calibra contra una muestra de ~50 ejemplos anotados por humanos hasta lograr &lt;strong>κ ≥ 0.5&lt;/strong> (Cohen&amp;rsquo;s kappa). El estado del arte en mayo de 2026 son tres patrones —&lt;strong>G-Eval&lt;/strong>, &lt;strong>Prometheus 2&lt;/strong> y &lt;strong>panel of judges&lt;/strong>—, cada uno respondiendo a un trade-off distinto entre coste, calidad y reproducibilidad. Todos comparten cuatro sesgos documentados: position, verbosity, self-preference y narcissism. Este post explica cómo se construye un judge real, cómo se mide si miente, y cuándo conviene cada patrón.&lt;/p>
&lt;h2 id="estás-aquí-eval">Estás aquí: EVAL&lt;/h2>
&lt;div class="diagram" style="max-width:780px;margin:1rem auto;">
&lt;svg viewBox="0 0 780 90" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="estás aquí: Eval">
&lt;style>.box{stroke:#444;stroke-width:1.4;rx:6}.active{fill:#7aafff;stroke-width:3}.idle{fill:#f4f4f4}.lbl{font:600 12px sans-serif;fill:#222}.arr{stroke:#666;stroke-width:1.4;fill:none;marker-end:url(#jdm)}.cyc{stroke:#888;stroke-width:1.2;fill:none;stroke-dasharray:4 2;marker-end:url(#jdm)}&lt;/style>
&lt;defs>&lt;marker id="jdm" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">&lt;path d="M0,0 L10,5 L0,10 z" fill="#666"/>&lt;/marker>&lt;/defs>
&lt;text x="390" y="20" text-anchor="middle" class="lbl">Estás aquí: EVAL · la pieza judge dentro del tribunal mixto&lt;/text>
&lt;rect x="30" y="35" width="110" height="35" class="box idle"/>&lt;text x="85" y="58" text-anchor="middle" class="lbl">1 · Data&lt;/text>
&lt;rect x="155" y="35" width="110" height="35" class="box idle"/>&lt;text x="210" y="58" text-anchor="middle" class="lbl">2 · Tune&lt;/text>
&lt;rect x="280" y="35" width="110" height="35" class="box active"/>&lt;text x="335" y="58" text-anchor="middle" class="lbl">3 · Eval&lt;/text>
&lt;rect x="405" y="35" width="110" height="35" class="box idle"/>&lt;text x="460" y="58" text-anchor="middle" class="lbl">4 · Deploy&lt;/text>
&lt;rect x="530" y="35" width="110" height="35" class="box idle"/>&lt;text x="585" y="58" text-anchor="middle" class="lbl">5 · Observe&lt;/text>
&lt;rect x="655" y="35" width="110" height="35" class="box idle"/>&lt;text x="710" y="58" text-anchor="middle" class="lbl">6 · Retrain&lt;/text>
&lt;path class="arr" d="M140,52 L155,52"/>&lt;path class="arr" d="M265,52 L280,52"/>&lt;path class="arr" d="M390,52 L405,52"/>&lt;path class="arr" d="M515,52 L530,52"/>&lt;path class="arr" d="M640,52 L655,52"/>
&lt;path class="cyc" d="M710,72 L710,82 L85,82 L85,72"/>
&lt;/svg>
&lt;/div>
&lt;h2 id="la-analogía-el-corrector-de-oposiciones">La analogía: el corrector de oposiciones&lt;/h2>
&lt;p>Una oposición pública tiene miles de exámenes. Imposible que el tribunal senior los corrija todos. La solución del sistema español lleva décadas siendo la misma: &lt;strong>correctores formados&lt;/strong>. Personas que no son catedráticos, pero que reciben:&lt;/p>
&lt;ol>
&lt;li>Una &lt;strong>plantilla de corrección&lt;/strong> escrita por adelantado: qué se valora, cuántos puntos vale cada apartado, qué descuenta.&lt;/li>
&lt;li>Un &lt;strong>entrenamiento previo&lt;/strong> con una muestra de exámenes ya corregidos por el tribunal senior, hasta que sus correcciones coinciden razonablemente.&lt;/li>
&lt;li>Una &lt;strong>auditoría continua&lt;/strong>: una fracción de sus correcciones se re-corrige por el tribunal senior para verificar que el corrector no se desvía.&lt;/li>
&lt;/ol>
&lt;p>Un judge LLM bien construido es exactamente eso. &lt;strong>No es un oráculo, es un corrector formado&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>La rúbrica son las criterios explícitos en el prompt (qué es faithfulness, qué es relevancy, etc.).&lt;/li>
&lt;li>El entrenamiento es la calibración contra ~50 ejemplos anotados por humanos.&lt;/li>
&lt;li>La auditoría continua es el muestreo semanal donde un humano re-evalúa una fracción del tráfico que el judge ha juzgado.&lt;/li>
&lt;/ul>
&lt;p>Y, como con el corrector humano, &lt;strong>el judge tiene sesgos sistemáticos&lt;/strong> que la oposición pública ha aprendido a vigilar: prefieren ciertos formatos de letra, ciertas longitudes, ciertas estructuras. Lo mismo le pasa al judge. El resto del post desmonta exactamente cuáles y cómo se miden.&lt;/p>
&lt;h2 id="por-qué-existe-llm-as-judge">Por qué existe LLM-as-judge&lt;/h2>
&lt;p>La razón directa: &lt;strong>dinero y tiempo&lt;/strong>. Una anotación humana profesional cuesta del orden de 0.50 € a 5 € por ejemplo (según complejidad y dominio), y tarda 30 segundos a varios minutos. Un juicio de GPT-4 cuesta ~0.01-0.05 € y tarda ~2 segundos. Para un golden dataset de 500 ejemplos evaluados continuamente sobre 10 candidatos al día, &lt;strong>la diferencia es entre 2 500 € al día y 50 € al día&lt;/strong>. Y la diferencia de wall-clock es entre días y minutos.&lt;/p>
&lt;p>La razón menos directa pero más relevante: &lt;strong>escalabilidad metodológica&lt;/strong>. Un golden dataset de 500 ejemplos es relativamente fácil de anotar una vez. Lo que pasa después es lo difícil:&lt;/p>
&lt;ul>
&lt;li>Cada vez que sale un adapter candidato hay que re-evaluar los 500.&lt;/li>
&lt;li>Cada vez que se actualiza el dataset (porque entró un incidente nuevo) hay que re-evaluar.&lt;/li>
&lt;li>Cada vez que cambia el system prompt hay que re-evaluar.&lt;/li>
&lt;/ul>
&lt;p>Sin un judge automatizable y barato, la batería de eval &lt;strong>deja de correr&lt;/strong> y el sistema se vuelve ciego entre release y release. Eso es lo que de verdad justifica el patrón.&lt;/p>
&lt;h2 id="los-tres-patrones-canónicos-en-2026">Los tres patrones canónicos en 2026&lt;/h2>
&lt;div class="diagram" style="max-width:760px;margin:1.5rem auto;">
&lt;svg viewBox="0 0 760 320" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Tres patrones de LLM-as-judge">
&lt;style>
.bx{fill:#f8f8f8;stroke:#444;stroke-width:1.4;rx:8}
.b1{fill:#ffe6d6}
.b2{fill:#d6eaff}
.b3{fill:#d9f5d6}
.bh{fill:#fff5b0;stroke:#444;stroke-width:1.4;rx:6}
.t{font:700 13px sans-serif;fill:#222}
.s{font:400 11px sans-serif;fill:#555}
.h{font:700 14px sans-serif;fill:#222}
.ar{stroke:#666;stroke-width:1.5;fill:none;marker-end:url(#mjj)}
&lt;/style>
&lt;defs>&lt;marker id="mjj" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">&lt;path d="M0,0 L10,5 L0,10 z" fill="#666"/>&lt;/marker>&lt;/defs>
&lt;text x="380" y="22" text-anchor="middle" class="h">Tres patrones canónicos para construir un judge&lt;/text>
&lt;rect x="30" y="45" width="220" height="240" class="bx b1"/>
&lt;text x="140" y="68" text-anchor="middle" class="t">1 · G-Eval&lt;/text>
&lt;text x="140" y="86" text-anchor="middle" class="s">(Liu et al. 2023)&lt;/text>
&lt;rect x="50" y="100" width="180" height="40" class="bh"/>
&lt;text x="140" y="118" text-anchor="middle" class="s">Judge potente (GPT-4o, Claude)&lt;/text>
&lt;text x="140" y="132" text-anchor="middle" class="s">+ rúbrica + CoT + form-filling&lt;/text>
&lt;text x="50" y="158" class="s">• score = E[i · P(token=i)]&lt;/text>
&lt;text x="50" y="174" class="s">• prompt con criterio + ejemplos&lt;/text>
&lt;text x="50" y="190" class="s">• salida estructurada (JSON)&lt;/text>
&lt;text x="50" y="206" class="s">• coste alto, calidad alta&lt;/text>
&lt;text x="50" y="226" class="s">↗ casos:&lt;/text>
&lt;text x="50" y="242" class="s"> golden set pequeño + dominio&lt;/text>
&lt;text x="50" y="258" class="s"> donde la calidad pesa más&lt;/text>
&lt;text x="50" y="274" class="s"> que el coste por juicio&lt;/text>
&lt;rect x="270" y="45" width="220" height="240" class="bx b2"/>
&lt;text x="380" y="68" text-anchor="middle" class="t">2 · Prometheus 2&lt;/text>
&lt;text x="380" y="86" text-anchor="middle" class="s">(Kim et al. 2024)&lt;/text>
&lt;rect x="290" y="100" width="180" height="40" class="bh"/>
&lt;text x="380" y="118" text-anchor="middle" class="s">Judge especializado open source&lt;/text>
&lt;text x="380" y="132" text-anchor="middle" class="s">Mistral 8×7B fine-tuned&lt;/text>
&lt;text x="290" y="158" class="s">• score 1-5 sobre rúbrica custom&lt;/text>
&lt;text x="290" y="174" class="s">• 0.897 correlación con GPT-4&lt;/text>
&lt;text x="290" y="190" class="s">• corre on-premise (~32 GB VRAM)&lt;/text>
&lt;text x="290" y="206" class="s">• sin coste por juicio externo&lt;/text>
&lt;text x="290" y="226" class="s">↗ casos:&lt;/text>
&lt;text x="290" y="242" class="s"> evaluación masiva on-prem,&lt;/text>
&lt;text x="290" y="258" class="s"> datos no salen del perímetro,&lt;/text>
&lt;text x="290" y="274" class="s"> ENS/NIS2 estricto&lt;/text>
&lt;rect x="510" y="45" width="220" height="240" class="bx b3"/>
&lt;text x="620" y="68" text-anchor="middle" class="t">3 · Panel of Judges&lt;/text>
&lt;text x="620" y="86" text-anchor="middle" class="s">(Verga et al. 2024)&lt;/text>
&lt;rect x="530" y="100" width="180" height="40" class="bh"/>
&lt;text x="620" y="118" text-anchor="middle" class="s">3-5 judges heterogéneos&lt;/text>
&lt;text x="620" y="132" text-anchor="middle" class="s">+ agregación (mediana/voto)&lt;/text>
&lt;text x="530" y="158" class="s">• reduce self-preference bias&lt;/text>
&lt;text x="530" y="174" class="s">• varianza menor que single&lt;/text>
&lt;text x="530" y="190" class="s">• coste 3-5× mayor&lt;/text>
&lt;text x="530" y="206" class="s">• identifica casos disputados&lt;/text>
&lt;text x="530" y="226" class="s">↗ casos:&lt;/text>
&lt;text x="530" y="242" class="s"> decisiones de gate críticas,&lt;/text>
&lt;text x="530" y="258" class="s"> evaluación de modelos del&lt;/text>
&lt;text x="530" y="274" class="s"> mismo proveedor (autojuicio)&lt;/text>
&lt;/svg>
&lt;/div>
&lt;h3 id="1--g-eval">1 · G-Eval&lt;/h3>
&lt;p>Publicado por Liu et al. (2023). La idea base es tan simple que se entiende en una frase: &lt;strong>dale al judge una rúbrica detallada, pídele que razone antes de puntuar, y léelo como expectativa ponderada en vez de como primer token&lt;/strong>. Las tres palancas:&lt;/p>
&lt;p>&lt;strong>Rúbrica:&lt;/strong> prompt con criterio explícito (ej. &amp;ldquo;Faithfulness: el grado en que la respuesta se apoya únicamente en el contexto, sin inventar datos. Score 1 = inventa todo, 5 = todo apoyado en el contexto&amp;rdquo;), idealmente con uno o dos ejemplos por valor del extremo.&lt;/p>
&lt;p>&lt;strong>Chain-of-thought + form-filling:&lt;/strong> se le pide primero &amp;ldquo;razona brevemente sobre cada criterio&amp;rdquo; y luego &amp;ldquo;rellena este formulario JSON&amp;rdquo;. Eso fuerza al modelo a no escupir un número arbitrario.&lt;/p>
&lt;p>&lt;strong>Probability-weighted scoring:&lt;/strong> en lugar de leer el primer token después del campo &lt;code>score:&lt;/code>, se mira la distribución de probabilidades del modelo sobre los tokens &lt;code>1, 2, 3, 4, 5&lt;/code> y se calcula:&lt;/p>
&lt;p>$$\hat{s} = \sum_{i=1}^{5} i \cdot \frac{p(\text{token}=i)}{\sum_{j=1}^{5} p(\text{token}=j)}$$&lt;/p>
&lt;p>Esto convierte un score discreto en uno continuo. La justificación: si el judge &amp;ldquo;dudaba&amp;rdquo; entre 4 y 5 (probabilidades 0.4 y 0.5 sobre &lt;code>4&lt;/code> y &lt;code>5&lt;/code>), el score real es &lt;strong>4.55&lt;/strong>, no &lt;code>5&lt;/code>. Esto reduce drásticamente la varianza entre runs del mismo prompt, y captura información que la decodificación greedy descarta.&lt;/p>
&lt;p>Limitaciones de G-Eval: &lt;strong>necesita acceso a logprobs&lt;/strong> del modelo. Los modelos closed-source han ido limitando este acceso (Claude no lo expone, GPT-4 lo expone pero sólo top-5). En 2026 G-Eval con probability weighting estricto sólo es práctico contra modelos open source que sirvas tú mismo (vLLM lo expone) o contra GPT-4 con &lt;code>logprobs=true&lt;/code>.&lt;/p>
&lt;h3 id="2--prometheus-2">2 · Prometheus 2&lt;/h3>
&lt;p>Publicado por Kim et al. (KAIST, 2024). El insight es complementario a G-Eval: &lt;strong>¿y si en vez de pedirle a un judge generalista que evalúe, fine-tuneamos un judge específico?&lt;/strong>&lt;/p>
&lt;p>Prometheus 2 es un Mistral 8×7B (MoE, ~47 GB en BF16, ~24 GB en INT4) fine-tuneado sobre 100k+ ejemplos de evaluación con rúbricas variadas. La métrica que se publicó en el paper: &lt;strong>0.897 de correlación Pearson con GPT-4-as-judge&lt;/strong> sobre el Vicuna Bench y similares. Eso es relevante porque significa que se puede sustituir a GPT-4 como judge a un coste de inferencia local sin perder casi nada de calidad.&lt;/p>
&lt;p>Por qué importa en producción on-premise:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>No salen datos del perímetro&lt;/strong>. Para clientes ENS/NIS2 estrictos esto no es preferencia, es requisito. Un judge que viaja por API externa no es opcional ahí.&lt;/li>
&lt;li>&lt;strong>Coste marginal cero&lt;/strong>. Cuando el judge corre on-prem, evaluar 50 000 casos al día no añade factura externa.&lt;/li>
&lt;li>&lt;strong>Latencia controlada&lt;/strong>. La eval continua sobre tráfico real puede correr en paralelo sin saturar rate limits de un proveedor externo.&lt;/li>
&lt;/ul>
&lt;p>El precio: hay que mantener un servicio de inferencia más (Prometheus 2 corriendo en su propio vLLM), y el judge no se &amp;ldquo;actualiza&amp;rdquo; salvo que se re-fine-tunee.&lt;/p>
&lt;h3 id="3--panel-of-judges">3 · Panel of Judges&lt;/h3>
&lt;p>Verga et al. (Cohere, 2024) lo formalizaron: en vez de un único judge, usar &lt;strong>3-5 jueces heterogéneos&lt;/strong> —diferentes modelos, diferentes prompts, diferentes temperaturas— y agregar sus juicios.&lt;/p>
&lt;p>Mecanismos de agregación habituales:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Mediana&lt;/strong> para scores continuos. Robusta a outliers.&lt;/li>
&lt;li>&lt;strong>Voto mayoritario&lt;/strong> para juicios pairwise (chosen vs rejected). Si 3 de 5 prefieren A, el ganador es A.&lt;/li>
&lt;li>&lt;strong>Media ponderada por calibración&lt;/strong>: pesar cada judge según su κ contra humanos en la calibración. Los judges más fiables votan más.&lt;/li>
&lt;/ul>
&lt;p>Lo que el panel da y un single judge no:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Reducción del self-preference&lt;/strong> (sesgo de un judge a preferir outputs estilísticamente similares a los suyos): si los jueces son de proveedores distintos, la suma se cancela.&lt;/li>
&lt;li>&lt;strong>Medida de la dificultad del caso&lt;/strong>: si los 5 jueces coinciden, el caso es fácil; si están repartidos, el caso es ambiguo y conviene escalarlo a humano. Esto convierte al panel en un &lt;strong>sistema de triaging automático&lt;/strong> para anotación humana.&lt;/li>
&lt;li>&lt;strong>Varianza menor&lt;/strong>: el ruido de cada judge se promedia.&lt;/li>
&lt;/ol>
&lt;p>El coste: 3-5× la factura de un single judge. Por eso el panel se reserva habitualmente para &lt;strong>eval gates críticos&lt;/strong> (¿este adapter se promociona o no?), no para eval continuo sobre tráfico.&lt;/p>
&lt;h2 id="cómo-se-mide-si-el-judge-miente-cohens-kappa">Cómo se mide si el judge miente: Cohen&amp;rsquo;s kappa&lt;/h2>
&lt;p>Aceptar al judge en producción sin medir su acuerdo con humanos es lo mismo que aceptar un termómetro sin calibrar. La métrica estándar para inter-rater agreement con escalas discretas u ordinales es &lt;strong>Cohen&amp;rsquo;s kappa&lt;/strong>:&lt;/p>
&lt;p>$$\kappa = \frac{p_o - p_e}{1 - p_e}$$&lt;/p>
&lt;p>Donde &lt;code>p_o&lt;/code> es la &lt;strong>proporción de acuerdo observado&lt;/strong> (qué porcentaje de los ejemplos coincide judge-humano) y &lt;code>p_e&lt;/code> es la &lt;strong>proporción de acuerdo esperado por azar&lt;/strong> (lo que esperarías si ambos puntuaran al azar respetando las marginales de cada uno).&lt;/p>
&lt;p>La intuición: si &lt;code>p_o = 0.9&lt;/code> pero &lt;code>p_e = 0.85&lt;/code> (porque los dos puntúan casi siempre &amp;ldquo;4 ó 5&amp;rdquo;), el acuerdo es 90 % bruto pero κ = 0.33: la mayor parte del acuerdo viene de que ambos puntúan alto, no de que se entiendan. κ corrige por ese baseline.&lt;/p>
&lt;p>Escala interpretativa habitual (Landis y Koch 1977, todavía referencia):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>κ&lt;/th>
&lt;th>Interpretación&lt;/th>
&lt;th>Threshold productivo&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&amp;lt; 0.20&lt;/td>
&lt;td>Pobre&lt;/td>
&lt;td>Inservible&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.21–0.40&lt;/td>
&lt;td>Justo&lt;/td>
&lt;td>Sólo señal débil&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.41–0.60&lt;/td>
&lt;td>Moderado&lt;/td>
&lt;td>&lt;strong>Mínimo aceptable en 2026&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.61–0.80&lt;/td>
&lt;td>Sustancial&lt;/td>
&lt;td>Estado del arte para judges open source&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>0.81–1.00&lt;/td>
&lt;td>Casi perfecto&lt;/td>
&lt;td>Judges humanos entre sí raramente llegan&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Punto importante que el campo aprendió por las malas: &lt;strong>los humanos entre sí rara vez superan κ = 0.70&lt;/strong> en tareas LLM (faithfulness, relevancy). Eso es &lt;strong>el techo realista&lt;/strong> del judge LLM. Buscar κ = 0.9 contra humanos es perseguir un fantasma: ni siquiera dos anotadores humanos llegan ahí.&lt;/p>
&lt;h3 id="kappa-ponderada-para-escalas-ordinales">Kappa ponderada para escalas ordinales&lt;/h3>
&lt;p>Para scores 1-5, el desacuerdo &amp;ldquo;judge dice 4, humano dice 5&amp;rdquo; no es lo mismo que &amp;ldquo;judge dice 1, humano dice 5&amp;rdquo;. La kappa estándar trata ambos como un fallo idéntico. La &lt;strong>kappa ponderada lineal o cuadrática&lt;/strong> asigna peso a la magnitud del desacuerdo:&lt;/p>
&lt;p>$$\kappa_w = 1 - \frac{\sum_{i,j} w_{ij} , o_{ij}}{\sum_{i,j} w_{ij} , e_{ij}}, \quad w_{ij}^{(\text{lin})} = \frac{|i-j|}{k-1}, \quad w_{ij}^{(\text{quad})} = \frac{(i-j)^2}{(k-1)^2}.$$&lt;/p>
&lt;p>En G-Eval con scores 1-5, lo habitual es publicar &lt;code>κ_quad&lt;/code> porque penaliza más los desacuerdos grandes y se acerca mejor a la intuición humana.&lt;/p>
&lt;h3 id="ejemplo-numérico-de-calibración">Ejemplo numérico de calibración&lt;/h3>
&lt;p>Imagina un golden set de 50 ejemplos puntuados por humano y por el judge, ambos en escala 1-5. La matriz de confusión:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>Hum 1&lt;/th>
&lt;th>Hum 2&lt;/th>
&lt;th>Hum 3&lt;/th>
&lt;th>Hum 4&lt;/th>
&lt;th>Hum 5&lt;/th>
&lt;th>Total judge&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Judge 1&lt;/strong>&lt;/td>
&lt;td>3&lt;/td>
&lt;td>1&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>4&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Judge 2&lt;/strong>&lt;/td>
&lt;td>1&lt;/td>
&lt;td>4&lt;/td>
&lt;td>2&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>7&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Judge 3&lt;/strong>&lt;/td>
&lt;td>0&lt;/td>
&lt;td>1&lt;/td>
&lt;td>6&lt;/td>
&lt;td>2&lt;/td>
&lt;td>0&lt;/td>
&lt;td>9&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Judge 4&lt;/strong>&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>1&lt;/td>
&lt;td>12&lt;/td>
&lt;td>3&lt;/td>
&lt;td>16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Judge 5&lt;/strong>&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>0&lt;/td>
&lt;td>2&lt;/td>
&lt;td>12&lt;/td>
&lt;td>14&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Total humano&lt;/strong>&lt;/td>
&lt;td>4&lt;/td>
&lt;td>6&lt;/td>
&lt;td>9&lt;/td>
&lt;td>16&lt;/td>
&lt;td>15&lt;/td>
&lt;td>50&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Diagonal (acuerdos exactos): 3+4+6+12+12 = 37 → p_o = 0.74.&lt;/p>
&lt;p>&lt;code>p_e&lt;/code> se calcula como Σ_i (n_judge_i · n_hum_i) / n² = (4·4 + 7·6 + 9·9 + 16·16 + 14·15) / 50² = (16+42+81+256+210) / 2500 = 605/2500 ≈ 0.242.&lt;/p>
&lt;p>$$\kappa = \frac{0.74 - 0.242}{1 - 0.242} = \frac{0.498}{0.758} \approx 0.66$$&lt;/p>
&lt;p>Sustancial. Aceptable. Si quisiéramos κ ponderada cuadrática, los desacuerdos próximos (Judge 4 vs Hum 5) pesan menos que los lejanos (Judge 2 vs Hum 4), y el κ_quad típicamente sale 0.05-0.10 por encima del lineal.&lt;/p>
&lt;h2 id="los-cuatro-sesgos-del-judge">Los cuatro sesgos del judge&lt;/h2>
&lt;div class="diagram" style="max-width:760px;margin:1.5rem auto;">
&lt;svg viewBox="0 0 760 220" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Cuatro sesgos del judge LLM">
&lt;style>
.bx{fill:#f8f8f8;stroke:#444;stroke-width:1.4;rx:8}
.b1{fill:#ffe9d6}
.b2{fill:#d6eaff}
.b3{fill:#d9f5d6}
.b4{fill:#fff5b0}
.t{font:700 13px sans-serif;fill:#222}
.s{font:400 11px sans-serif;fill:#555}
.m{font:600 11px sans-serif;fill:#2c3e50}
.h{font:700 14px sans-serif;fill:#222}
&lt;/style>
&lt;text x="380" y="22" text-anchor="middle" class="h">Cuatro sesgos documentados del judge LLM&lt;/text>
&lt;rect x="20" y="40" width="170" height="160" class="bx b1"/>
&lt;text x="105" y="62" text-anchor="middle" class="t">Position bias&lt;/text>
&lt;text x="30" y="84" class="s">Prefiere la primera respuesta&lt;/text>
&lt;text x="30" y="100" class="s">cuando las dos son comparables.&lt;/text>
&lt;text x="30" y="124" class="m">Medición:&lt;/text>
&lt;text x="30" y="140" class="s">swap del orden → fracción&lt;/text>
&lt;text x="30" y="156" class="s">de cambios. &amp;lt;10% aceptable.&lt;/text>
&lt;text x="30" y="180" class="m">Mitigación: 2 pasadas swap&lt;/text>
&lt;rect x="200" y="40" width="170" height="160" class="bx b2"/>
&lt;text x="285" y="62" text-anchor="middle" class="t">Verbosity bias&lt;/text>
&lt;text x="210" y="84" class="s">Premia respuestas más largas,&lt;/text>
&lt;text x="210" y="100" class="s">independiente de contenido.&lt;/text>
&lt;text x="210" y="124" class="m">Medición:&lt;/text>
&lt;text x="210" y="140" class="s">corr Pearson score vs longitud&lt;/text>
&lt;text x="210" y="156" class="s">en golden. |r| &amp;lt; 0.3 aceptable.&lt;/text>
&lt;text x="210" y="180" class="m">Mitigación: rubrica explícita&lt;/text>
&lt;rect x="380" y="40" width="170" height="160" class="bx b3"/>
&lt;text x="465" y="62" text-anchor="middle" class="t">Self-preference&lt;/text>
&lt;text x="390" y="84" class="s">Un judge GPT-4 prefiere&lt;/text>
&lt;text x="390" y="100" class="s">outputs estilo GPT-4.&lt;/text>
&lt;text x="390" y="124" class="m">Medición:&lt;/text>
&lt;text x="390" y="140" class="s">comparar mismo dataset con&lt;/text>
&lt;text x="390" y="156" class="s">3 judges; divergencia &amp;lt; 15%.&lt;/text>
&lt;text x="390" y="180" class="m">Mitigación: panel heterogéneo&lt;/text>
&lt;rect x="560" y="40" width="180" height="160" class="bx b4"/>
&lt;text x="650" y="62" text-anchor="middle" class="t">Narcissism&lt;/text>
&lt;text x="570" y="84" class="s">El modelo evaluado y el judge&lt;/text>
&lt;text x="570" y="100" class="s">comparten arquitectura/proveedor.&lt;/text>
&lt;text x="570" y="124" class="m">Medición:&lt;/text>
&lt;text x="570" y="140" class="s">δ score humano vs judge cuando&lt;/text>
&lt;text x="570" y="156" class="s">candidato y judge coinciden.&lt;/text>
&lt;text x="570" y="180" class="m">Mitigación: judge externo&lt;/text>
&lt;/svg>
&lt;/div>
&lt;h3 id="position-bias">Position bias&lt;/h3>
&lt;p>Documentado primero por Wang et al. (2023). Si presentas dos respuestas A y B al judge en pairwise, &lt;strong>prefiere A más a menudo que B&lt;/strong> —del orden de 55-65 % cuando A y B son objetivamente equivalentes, con jueces típicos 2023-2024—. En 2026 los jueces frontier (GPT-5, Claude 4.5, Llama 4 Judge) lo tienen bastante mitigado, pero &lt;strong>sigue siendo medible&lt;/strong>.&lt;/p>
&lt;p>&lt;strong>Cómo medirlo formalmente:&lt;/strong> correr el dataset dos veces, una con &lt;code>(A, B)&lt;/code> y otra con &lt;code>(B, A)&lt;/code>. Si el judge es consistente, debe haber acuerdo entre pasadas. La fracción de casos donde el veredicto cambia es la &lt;strong>position-bias rate&lt;/strong>. Threshold aceptado en 2026: &amp;lt; 10 %.&lt;/p>
&lt;p>&lt;strong>Mitigación canónica:&lt;/strong> ejecutar siempre dos pasadas con el orden invertido y promediar. Frameworks como Promptfoo e Inspect AI lo hacen por defecto.&lt;/p>
&lt;h3 id="verbosity-bias">Verbosity bias&lt;/h3>
&lt;p>Documentado por Saito et al. y Dubois et al. en 2024. Para tareas abiertas (faithfulness, helpfulness), el judge tiende a dar mayor score a respuestas más largas. La correlación Pearson típica entre score y longitud en respuestas con calidad humana equivalente puede subir hasta 0.4-0.5 sin mitigación.&lt;/p>
&lt;p>&lt;strong>Cómo medirlo:&lt;/strong> correlación Pearson entre el score del judge y la longitud de la respuesta, &lt;strong>calculada sobre un subset donde los humanos han confirmado calidad equivalente&lt;/strong>. Si la correlación es &amp;gt; 0.3 en ese subset controlado, hay verbosity bias significativo.&lt;/p>
&lt;p>&lt;strong>Mitigación:&lt;/strong> rúbrica explícitamente neutral en longitud (&amp;ldquo;la respuesta debe ser apropiadamente concisa para la pregunta; longitud no es un criterio&amp;rdquo;) y few-shot con ejemplos donde una respuesta corta supera a una larga. AlpacaEval 2.0 incorpora una corrección por longitud directamente en la métrica.&lt;/p>
&lt;h3 id="self-preference-bias">Self-preference bias&lt;/h3>
&lt;p>Documentado por Panickssery et al. (Anthropic, 2024). &lt;strong>Un judge GPT-4 prefiere outputs de GPT-4. Un judge Claude prefiere outputs de Claude.&lt;/strong> No por una conspiración, sino porque los modelos comparten patrones estilísticos con sus parientes cercanos (estructura de párrafos, uso de bullet points, tono).&lt;/p>
&lt;p>&lt;strong>Cómo medirlo:&lt;/strong> sobre un golden set, comparar los scores de 3 judges distintos (ej. GPT-4, Claude, Llama 4 Judge). Si para un mismo candidato hay &amp;gt; 15 % de divergencia sistemática vinculable a la identidad del candidato, hay self-preference.&lt;/p>
&lt;p>&lt;strong>Mitigación:&lt;/strong> panel of judges con proveedores heterogéneos. Si se va a usar un único judge, &lt;strong>no debe ser del mismo proveedor que el modelo evaluado&lt;/strong>.&lt;/p>
&lt;h3 id="narcissism">Narcissism&lt;/h3>
&lt;p>Caso extremo del self-preference: el judge &lt;strong>es exactamente el mismo modelo&lt;/strong> que el candidato. Esto pasa más de lo que parece: un equipo entrena un Llama 3 8B con LoRA y lo evalúa con Llama 3 8B como judge porque &amp;ldquo;es lo que tienen on-prem&amp;rdquo;. Es metodológicamente inválido. El delta entre score humano y score judge crece de forma medible.&lt;/p>
&lt;p>&lt;strong>Mitigación:&lt;/strong> judge de &lt;strong>arquitectura distinta&lt;/strong> al candidato. Si tu candidato es Llama 3, tu judge debería ser Mistral, Qwen o un Prometheus 2 (que aunque está basado en Mistral, fue fine-tuneado específicamente para evaluación).&lt;/p>
&lt;h2 id="el-judge-como-bisagra-del-pipeline">El judge como bisagra del pipeline&lt;/h2>
&lt;p>El judge no es sólo &amp;ldquo;la pieza de eval&amp;rdquo;. Es &lt;strong>la bisagra&lt;/strong> que conecta tres etapas del pipeline:&lt;/p>
&lt;div class="diagram" style="max-width:760px;margin:1.5rem auto;">
&lt;svg viewBox="0 0 760 280" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="El judge como bisagra entre Eval, Tune y Retrain">
&lt;style>
.bx{fill:#f8f8f8;stroke:#444;stroke-width:1.4;rx:8}
.bt{fill:#ffd6d6}
.be{fill:#d6eaff}
.br{fill:#fff5b0}
.bj{fill:#d9f5d6;stroke:#444;stroke-width:2;rx:8}
.t{font:700 13px sans-serif;fill:#222}
.s{font:400 11px sans-serif;fill:#555}
.h{font:700 14px sans-serif;fill:#222}
.ar{stroke:#666;stroke-width:1.6;fill:none;marker-end:url(#mjbi)}
.ag{stroke:#27ae60;stroke-width:1.8;fill:none;marker-end:url(#mjbig)}
&lt;/style>
&lt;defs>
&lt;marker id="mjbi" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">&lt;path d="M0,0 L10,5 L0,10 z" fill="#666"/>&lt;/marker>
&lt;marker id="mjbig" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">&lt;path d="M0,0 L10,5 L0,10 z" fill="#27ae60"/>&lt;/marker>
&lt;/defs>
&lt;text x="380" y="22" text-anchor="middle" class="h">El judge como bisagra: produce preference pairs, decide gates, dispara retrain&lt;/text>
&lt;rect x="290" y="100" width="180" height="80" class="bj"/>
&lt;text x="380" y="130" text-anchor="middle" class="t">LLM judge&lt;/text>
&lt;text x="380" y="150" text-anchor="middle" class="s">G-Eval / Prometheus 2 /&lt;/text>
&lt;text x="380" y="166" text-anchor="middle" class="s">Panel of Judges&lt;/text>
&lt;rect x="30" y="60" width="170" height="60" class="bx bt"/>
&lt;text x="115" y="82" text-anchor="middle" class="t">TUNE&lt;/text>
&lt;text x="115" y="102" text-anchor="middle" class="s">DPO / KTO / ORPO / SimPO&lt;/text>
&lt;text x="115" y="116" text-anchor="middle" class="s">necesita pairs chosen/rejected&lt;/text>
&lt;rect x="30" y="160" width="170" height="60" class="bx be"/>
&lt;text x="115" y="182" text-anchor="middle" class="t">EVAL gate (CI)&lt;/text>
&lt;text x="115" y="202" text-anchor="middle" class="s">¿el adapter promociona?&lt;/text>
&lt;text x="115" y="216" text-anchor="middle" class="s">faithfulness ≥ 0.85, regr &amp;lt; 2pp&lt;/text>
&lt;rect x="560" y="60" width="170" height="60" class="bx be"/>
&lt;text x="645" y="82" text-anchor="middle" class="t">EVAL continuo&lt;/text>
&lt;text x="645" y="102" text-anchor="middle" class="s">muestreo sobre tráfico real,&lt;/text>
&lt;text x="645" y="116" text-anchor="middle" class="s">detección de drift y regresión&lt;/text>
&lt;rect x="560" y="160" width="170" height="60" class="bx br"/>
&lt;text x="645" y="182" text-anchor="middle" class="t">RETRAIN&lt;/text>
&lt;text x="645" y="202" text-anchor="middle" class="s">incidentes → dataset enrichment&lt;/text>
&lt;text x="645" y="216" text-anchor="middle" class="s">judge clasifica + triagea&lt;/text>
&lt;path class="ag" d="M290,135 L200,85"/>
&lt;text x="220" y="115" class="s" fill="#27ae60">pairs&lt;/text>
&lt;path class="ag" d="M290,150 L200,180"/>
&lt;text x="220" y="160" class="s" fill="#27ae60">gate&lt;/text>
&lt;path class="ar" d="M470,135 L560,85"/>
&lt;text x="520" y="100" class="s">scores&lt;/text>
&lt;path class="ar" d="M470,150 L560,180"/>
&lt;text x="525" y="160" class="s">triage&lt;/text>
&lt;/svg>
&lt;/div>
&lt;p>&lt;strong>Hacia TUNE:&lt;/strong> el judge genera los pares &lt;code>(chosen, rejected)&lt;/code> para DPO sin necesidad de etiquetadores humanos. Esa cadena es lo que hace que el &lt;a href="https://blog.lo0.es/posts/fine-tuning-continuo-produccion/">fine-tuning continuo&lt;/a> funcione sin un equipo de anotación dedicado.&lt;/p>
&lt;p>&lt;strong>Hacia EVAL gate:&lt;/strong> el judge da el score que se compara contra el threshold del CI. Si el adapter no supera 0.85 en faithfulness, no merge.&lt;/p>
&lt;p>&lt;strong>Hacia EVAL continuo:&lt;/strong> sobre una muestra del tráfico real (1-5 %), el judge calcula scores y los persiste. Eso permite detectar regresiones que aparecen días después del deploy y que el CI no veía porque su golden set no las cubría.&lt;/p>
&lt;p>&lt;strong>Hacia RETRAIN:&lt;/strong> los casos donde el judge da score bajo son &lt;strong>candidatos automáticos&lt;/strong> para el siguiente dataset de retraining. El judge actúa como &lt;strong>triage&lt;/strong> del flujo de incidentes.&lt;/p>
&lt;h2 id="implicaciones-en-hardware-on-premise">Implicaciones en hardware on-premise&lt;/h2>
&lt;p>Los números siguientes son indicativos para escenarios típicos en mayo de 2026.&lt;/p>
&lt;h3 id="en-una-rtx-4090-24-gb">En una RTX 4090 (24 GB)&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Judge&lt;/th>
&lt;th>¿Cabe?&lt;/th>
&lt;th>Throughput aproximado&lt;/th>
&lt;th>Notas&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>GPT-4o (API)&lt;/td>
&lt;td>n/a&lt;/td>
&lt;td>~50-100 juicios/min&lt;/td>
&lt;td>Coste externo, no es local&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Prometheus 2 (8×7B INT4)&lt;/td>
&lt;td>Sí, justo&lt;/td>
&lt;td>~40-80 juicios/min&lt;/td>
&lt;td>Q4_K_M GGUF, llama.cpp&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Llama 3.1 8B fine-tuned judge&lt;/td>
&lt;td>Sí, holgado&lt;/td>
&lt;td>~150-250 juicios/min&lt;/td>
&lt;td>Default razonable on-prem&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mistral Small Judge 22B&lt;/td>
&lt;td>No directo, requiere offload&lt;/td>
&lt;td>~10-20 juicios/min&lt;/td>
&lt;td>Demasiado para 24 GB en BF16&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Conclusión: en una sola 4090, un judge open source 8B fine-tuneado para evaluación (o Prometheus 2 cuantizado) es el sweet spot.&lt;/p>
&lt;h3 id="en-un-cluster-genérico-4h100-sxm-320-gb-nvlink">En un cluster genérico 4×H100 SXM (320 GB, NVLink)&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Judge&lt;/th>
&lt;th>Configuración&lt;/th>
&lt;th>Throughput aproximado&lt;/th>
&lt;th>Notas&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Prometheus 2 BF16&lt;/td>
&lt;td>TP=2&lt;/td>
&lt;td>~400-700 juicios/min&lt;/td>
&lt;td>Cabe holgadamente, latencia baja&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Llama 3.3 70B Instruct&lt;/td>
&lt;td>TP=4&lt;/td>
&lt;td>~150-300 juicios/min&lt;/td>
&lt;td>Si se usa como judge generalista&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Panel of 3 judges en paralelo&lt;/td>
&lt;td>TP=1-2 cada uno&lt;/td>
&lt;td>~600-1200 juicios/min combinado&lt;/td>
&lt;td>Patrón natural en cluster&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>En cluster NVLink lo natural es &lt;strong>correr un panel of judges&lt;/strong> en paralelo (cada judge ocupa 1-2 GPUs) con un router LiteLLM por delante. Eso quita el coste cognitivo de &amp;ldquo;qué judge usamos&amp;rdquo; porque se usan los tres y se agrega el resultado.&lt;/p>
&lt;h2 id="lo-que-no-hemos-cubierto-próximos-artículos">Lo que no hemos cubierto (próximos artículos)&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Red teaming y safety eval&lt;/strong>: cómo se evalúa robustez ante adversarial prompts. Es un patrón distinto al judge ordinal.&lt;/li>
&lt;li>&lt;strong>Eval de agentes multistep&lt;/strong>: AgentBench, TauBench, evaluación de trayectorias en lugar de outputs individuales.&lt;/li>
&lt;li>&lt;strong>Benchmark contamination&lt;/strong>: cómo detectar si el modelo evaluado vio el golden set durante pre-training, y por qué los benchmarks públicos están medio rotos.&lt;/li>
&lt;li>&lt;strong>Cost-aware judging&lt;/strong>: cuándo conviene un judge barato (Llama 8B) sobre uno caro (GPT-4o), y cómo cuantificar el trade-off calidad/coste con curvas de Pareto.&lt;/li>
&lt;/ul>
&lt;h2 id="ver-también">Ver también&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://blog.lo0.es/posts/evals-llm-la-capa-despues-de-tracing/">Evals para LLMs: la capa después del tracing&lt;/a> — el contexto completo de la etapa Eval; este post profundiza la pieza judge dentro del tribunal mixto que allí se describe.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/alignment-moderno-dpo-kto-orpo-simpo/">Alignment moderno: DPO, KTO, ORPO y SimPO&lt;/a> — los métodos de preference optimization que consumen los pares que produce el judge.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/fine-tuning-continuo-produccion/">Fine-tuning continuo en producción&lt;/a> — el ciclo Postgres + queries + hot-swap que necesita al judge como bisagra.&lt;/li>
&lt;li>&lt;a href="https://blog.lo0.es/posts/prompt-versioning-langfuse-mlflow/">Prompt versioning con Langfuse y MLflow&lt;/a> — el prompt del judge también se versiona; un cambio &amp;ldquo;menor&amp;rdquo; en la rúbrica puede invalidar la calibración.&lt;/li>
&lt;/ul>
&lt;h2 id="referencias">Referencias&lt;/h2>
&lt;ul>
&lt;li>Liu, Y., Iter, D., Xu, Y., Wang, S., Xu, R., Zhu, C. &lt;em>G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment&lt;/em> (EMNLP 2023).&lt;/li>
&lt;li>Kim, S., Suk, J., Longpre, S., Lin, B. Y., Shin, J., Welleck, S., Neubig, G., Lee, M., Lee, K., Seo, M. &lt;em>Prometheus 2: An Open Source Language Model Specialized in Evaluating Other Language Models&lt;/em> (EMNLP 2024).&lt;/li>
&lt;li>Verga, P., Hofstatter, S., Althammer, S., Su, Y., Piktus, A., Arkhangorodsky, A., Xu, M., White, N., Lewis, P. &lt;em>Replacing Judges with Juries: Evaluating LLM Generations with a Panel of Diverse Models&lt;/em> (Cohere, 2024).&lt;/li>
&lt;li>Panickssery, A., Bowman, S., Feng, S. &lt;em>LLM Evaluators Recognize and Favor Their Own Generations&lt;/em> (Anthropic, NeurIPS 2024).&lt;/li>
&lt;li>Wang, P., Li, L., Chen, L., Cai, Z., Zhu, D., Lin, B., Cao, Y., Liu, Q., Liu, T., Sui, Z. &lt;em>Large Language Models are Not Fair Evaluators&lt;/em> (ACL 2024).&lt;/li>
&lt;li>Dubois, Y., Galambosi, B., Liang, P., Hashimoto, T. &lt;em>Length-Controlled AlpacaEval: A Simple Way to Debias Automatic Evaluators&lt;/em> (Stanford, 2024).&lt;/li>
&lt;li>Cohen, J. &lt;em>A Coefficient of Agreement for Nominal Scales&lt;/em> (Educational and Psychological Measurement, 1960).&lt;/li>
&lt;li>Landis, J. R., Koch, G. G. &lt;em>The Measurement of Observer Agreement for Categorical Data&lt;/em> (Biometrics, 1977).&lt;/li>
&lt;/ul></description></item></channel></rss>