En el tema anterior vimos la idea general de los modelos preentrenados. Ahora nos concentraremos en uno de los más influyentes en la historia reciente del NLP: BERT.
BERT se volvió especialmente importante porque mostró con mucha claridad que un modelo preentrenado basado en Transformers podía adaptarse con gran eficacia a tareas de comprensión del lenguaje, entre ellas la clasificación de texto.
BERT significa Bidirectional Encoder Representations from Transformers. El nombre ya da dos pistas fundamentales: trabaja con representaciones obtenidas mediante Transformers y lo hace de manera bidireccional.
Esto significa que, al construir la representación de un token, el modelo considera contexto tanto a la izquierda como a la derecha. Esa fue una diferencia muy relevante frente a enfoques autorregresivos orientados a predicción estricta del siguiente token.
BERT marcó un punto de inflexión porque mostró que el preentrenamiento profundo sobre grandes corpus podía transferirse con enorme eficacia a muchas tareas supervisadas.
En lugar de diseñar representaciones específicas para cada problema, se podía tomar una base ya entrenada y ajustarla con una capa final relativamente simple para clasificación, inferencia textual, pregunta-respuesta y otras tareas.
BERT pertenece a la familia de modelos encoder-only. Eso lo vuelve especialmente adecuado para tareas de comprensión del texto, donde el objetivo principal es producir representaciones contextuales fuertes y luego tomar una decisión sobre ellas.
En clasificación de texto, esta arquitectura funciona muy bien porque necesita entender el contenido completo de la entrada antes de asignar una etiqueta.
La bidireccionalidad es uno de los motivos centrales de su buen rendimiento en comprensión. Una palabra no se interpreta solo por lo que vino antes, sino también por lo que aparece después.
En tareas como clasificación, eso es muy valioso porque el sentido global de una oración o documento puede depender de relaciones repartidas a ambos lados del texto.
Una de las ideas más conocidas de BERT es el masked language modeling. Durante el preentrenamiento, algunas palabras se ocultan y el modelo debe predecirlas usando el contexto disponible.
Esto obliga al sistema a construir representaciones muy informativas del entorno lingüístico, en lugar de limitarse a predecir el siguiente token de forma estrictamente secuencial.
Al entrenarse sobre enormes cantidades de texto, BERT aprende regularidades sintácticas, asociaciones semánticas, relaciones contextuales y patrones frecuentes del lenguaje. Ese conocimiento queda distribuido en los parámetros del modelo.
Cuando luego se lo adapta a clasificación, no empieza desde cero: ya dispone de una base muy rica de representación lingüística.
Para usar BERT en clasificación de texto, se toma el modelo preentrenado y se agrega una pequeña capa de salida que produzca las etiquetas necesarias. Después se realiza fine-tuning con ejemplos etiquetados de la tarea.
La idea es simple: BERT aporta una representación poderosa del texto y la capa final aprende a traducir esa representación en decisiones concretas.
En muchas implementaciones de BERT para clasificación se utiliza un token especial al comienzo de la secuencia, comúnmente llamado [CLS]. La representación final asociada a ese token se usa como resumen global del texto.
Ese vector puede alimentar una capa densa y una salida de clasificación. No significa que el resto de los tokens deje de importar; al contrario, la representación de [CLS] ya incorpora información contextual proveniente de toda la secuencia.
BERT no trabaja directamente con palabras completas tal como las escribimos. Utiliza una tokenización por subunidades, lo que le permite manejar vocabularios grandes y palabras poco frecuentes de forma más flexible.
Esto tiene ventajas importantes en NLP real, porque evita depender de un vocabulario cerrado de palabras enteras y permite descomponer términos desconocidos en fragmentos útiles.
Como muchos modelos basados en Transformers, BERT tiene un límite en la longitud de secuencia que puede procesar de forma directa. En aplicaciones prácticas eso obliga a recortar textos, dividir documentos o usar estrategias especiales para secuencias largas.
En clasificación de textos breves o medianos esto suele ser manejable, pero en documentos extensos requiere decisiones de diseño adicionales.
Un pipeline típico para clasificación con BERT suele incluir los siguientes pasos:
La gran diferencia respecto de enfoques clásicos es que la representación del texto ya no se diseña manualmente, sino que surge del propio modelo preentrenado.
En comparación con enfoques como Bag of Words o TF-IDF, BERT aporta representaciones mucho más sensibles al contexto. La misma palabra puede adquirir vectores distintos según la oración donde aparezca.
Eso le permite manejar mejor ambigüedad, relaciones a larga distancia y matices que modelos más superficiales suelen perder.
Incluso frente a embeddings clásicos como Word2Vec o GloVe, BERT ofrece una diferencia importante: sus representaciones son contextuales. No asigna un único vector fijo a cada palabra, sino que ajusta la representación según el entorno.
Esta propiedad es especialmente útil en clasificación, porque el sentido relevante depende muchas veces del contexto completo del documento.
No necesariamente. BERT suele dar muy buenos resultados, pero también implica más costo computacional, más complejidad y más requisitos de infraestructura que un clasificador clásico.
En algunos problemas pequeños, con textos breves y restricciones fuertes de tiempo o hardware, una solución clásica puede seguir siendo más razonable. Elegir bien depende del contexto del proyecto.
Aunque BERT ya venga preentrenado, el ajuste para clasificación sigue dependiendo de la calidad de los datos etiquetados. Un conjunto pequeño pero bien definido puede dar buenos resultados; uno ruidoso o inconsistente puede arruinar el potencial del modelo.
El preentrenamiento ayuda mucho, pero no reemplaza el criterio sobre anotación, balance de clases y evaluación.
Como BERT tiene muchísimos parámetros, existe riesgo de sobreajuste si el dataset de ajuste es muy pequeño o si el entrenamiento no se controla bien. Por eso importa elegir hiperparámetros razonables y validar cuidadosamente.
El hecho de partir de un modelo fuerte no elimina la necesidad de buenas prácticas experimentales.
Cuando BERT clasifica un texto, el resultado final suele ser muy bueno, pero no necesariamente fácil de explicar. El modelo construye representaciones distribuidas complejas y toma decisiones a partir de muchas interacciones internas.
Esto obliga a complementar el uso del sistema con análisis de errores, ejemplos límite y evaluación fuera de muestra.
BERT se ha usado en muchas tareas de clasificación:
La razón es simple: en todos esos problemas importa entender el contenido global del texto con bastante sensibilidad contextual.
En la práctica, BERT suele usarse mediante bibliotecas como transformers. Esto permite descargar modelos ya preparados, tokenizadores compatibles y clases específicas para clasificación con relativamente poco código.
Gracias a ese ecosistema, un modelo que internamente es muy complejo se vuelve accesible para experimentación y desarrollo aplicado.
| Enfoque | Representación del texto | Fortaleza principal | Limitación principal |
|---|---|---|---|
| TF-IDF + clasificador | Rasgos dispersos basados en términos. | Simpleza, velocidad e interpretabilidad relativa. | Poca sensibilidad contextual. |
| Embeddings estáticos + red | Vectores fijos por palabra. | Mejor semántica que conteos simples. | No adaptan bien el significado al contexto. |
| BERT + fine-tuning | Representaciones contextuales bidireccionales. | Muy buen rendimiento en comprensión y clasificación. | Mayor costo y complejidad. |
Antes de ejecutar el ejemplo, necesitamos instalar las bibliotecas transformers y torch con el comando pip install transformers torch.
Este ejemplo usa un pipeline ya preparado para clasificación de sentimiento. Aunque internamente el sistema es complejo, desde el punto de vista del usuario el flujo de trabajo resulta muy directo.
from transformers import pipeline
clasificador = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment"
)
textos = [
"La película fue excelente y muy emocionante.",
"El producto llegó tarde y funciona mal."
]
resultados = clasificador(textos)
for texto, resultado in zip(textos, resultados):
print(texto)
print(resultado)
print("-" * 40)
Lo importante de este ejemplo no es el nombre exacto del modelo, sino la lógica general: reutilizamos una arquitectura Transformer preentrenada y la aplicamos a una tarea de clasificación con muy poco código adicional.
BERT mostró de manera muy concreta cómo un modelo preentrenado podía transformar una tarea clásica como la clasificación de texto. Su fuerza proviene de combinar una arquitectura poderosa con una etapa previa de aprendizaje lingüístico muy amplia.
Gracias a eso, la clasificación deja de apoyarse solo en rasgos superficiales y pasa a aprovechar representaciones contextuales mucho más ricas.
En el próximo tema estudiaremos la generación de texto con modelos de lenguaje, donde el foco ya no estará en comprender y etiquetar documentos, sino en producir nuevas secuencias de texto automáticamente.