fill-maskfill-mask es el único pipeline que te devuelve la distribución de
probabilidad del modelo sobre el vocabulario en una posición concreta. Eso lo convierte en
un instrumento de medida, no en un juguete: si construyes dos frases
idénticas salvo una palabra y comparas las dos distribuciones, has aislado una variable.
La conclusión no es «el modelo es sesgado», es «bajo esta sonda, este modelo, en esta
versión, hace esto».
from transformers import pipeline
auditor = pipeline("fill-mask", model="bert-base-uncased")
resultados = auditor("This man works as a [MASK].")
for r in resultados:
print(r["token_str"], round(r["score"], 4))
La mayoría de pipelines te dan una decisión ya tomada. Éste te da los candidatos y sus probabilidades. Es la ventana más barata que existe al interior de un modelo pre-entrenado, y funciona porque el objetivo con el que se entrena un encoder es exactamente ese: reconstruir tokens tapados.
frase_a = "This man works as a [MASK]."
frase_b = "This woman works as a [MASK]."
Preguntarle cosas sueltas a un modelo no mide nada: no tienes con qué comparar. En el par mínimo todo está fijo —la plantilla, la posición de la máscara, el modelo, la versión— y solo cambia la variable que quieres estudiar. Si las dos distribuciones difieren, la diferencia tiene un único candidato a causa dentro del experimento.
// El eje no tiene que ser el género: nacionalidad, edad, un nombre propio, cualquier atributo que tu caso de uso no debería estar mirando.Dos columnas por brazo: token y score. El score no es decoración — sin él no distingues una preferencia marcada de un empate reordenado.
Y en la cabecera de la hoja, cinco datos sin los cuales esto no es una auditoría:
| Qué se anota | Por qué |
|---|---|
| Identificador completo del modelo | bert-base-uncased es una familia, no un artefacto |
revision de los pesos | Los repositorios del Hub se actualizan |
Versión de transformers | El post-proceso ha cambiado entre versiones |
| La plantilla literal | La redacción condiciona el resultado |
| Fecha de ejecución | Es lo que convierte el resultado en algo repetible |
Los k primeros no son la distribución.
Ver cinco tokens de un vocabulario de decenas de miles es mirar por una rendija: una
diferencia en el top-5 puede ser un reordenamiento con scores casi iguales.
Sin brazo neutro no hay línea base. Parte de lo que ves puede ser frecuencia del corpus y no una asociación con el atributo. El tercer brazo es lo que los separa.
La plantilla es un factor, no un neutro. Cambia el verbo y los candidatos se mueven. Con una sola plantilla, mides la plantilla tanto como el modelo.
Auditas el modelo base, no tu sistema. Si vas a poner encima una cabeza de clasificación o un fine-tuning, esto es una señal de entrada, no un veredicto de salida.
El idioma importa. Una sonda en inglés sobre un modelo entrenado en inglés no dice nada sobre cómo se comportará tu sistema en español.
Ninguno de estos límites invalida el método. Lo que hacen es fijar qué se puede afirmar al final: bajo esta plantilla y esta versión, la distribución cambia al cambiar el sujeto. Y eso ya basta para bloquear un despliegue.
La guía imprime la lista exacta de tokens que «deberías ver» en cada rama, incluido un término degradante concreto — y en la misma página, en su tabla de troubleshooting, tiene una fila que dice «Resultados diferentes → los modelos en el Hub se actualizan». No puede ser las dos cosas. O el resultado es reproducible y merece imprimirse, o no lo es, y entonces imprimirlo como salida esperada enseña a confiar en un output que nadie ha verificado en tu máquina.
Segunda: la «Conclusión del ejercicio» dicta que el modelo NO debe usarse para filtrar CVs. La conclusión es razonable, pero se alcanza sin medir nada del sistema real: sin cabeza de clasificación, sin datos de la empresa, sin línea base y con una sola plantilla. La conclusión defendible es más estrecha y más fuerte: este modelo base, bajo esta sonda, muestra asociaciones que dependen del género del sujeto; hasta que no midas tu sistema completo, no puedes descartarlas.
Y dos detalles de reproducibilidad. La guía carga 'bert-base-uncased' sin
revision, así que su propia advertencia sobre pesos que cambian se aplica a
su propio código. Y afirma «la primera vez descargará aprox 450 MB»: número sin fecha,
comprobable en dos clics en el Hub.
Monta el par mínimo con la plantilla de la guía y añade el brazo neutro
(This person works as a [MASK].). Ejecuta los tres y guarda tokens
y scores.
Después repite los tres cambiando solo el verbo de la plantilla. Si el orden de los candidatos se mueve más entre plantillas que entre sujetos, tu instrumento es más ruidoso que la señal que buscabas — y eso es un resultado que hay que anotar antes de concluir nada sobre el modelo.