En este artículo exploraremos uno de los usos más potentes que podemos darle a los Grandes Modelos de Lenguaje: el desarrollo de aplicaciones para la clasificación de texto.
Esta tarea consiste esencialmente en asignar una categoría a un texto dependiendo de su contenido y, de hecho, es una de las principales aplicaciones de los LLMs en el campo del Procesamiento del Lenguaje Natural.
Así que veremos en detalle las diferentes alternativas que existen para realizar la clasificación de texto usando LLMs, abordando enfoques tanto generativos como no generativos. Además, analizaremos a profundidad las ventajas y desventajas de cada uno de estos enfoques.
¿Qué es la clasificación de texto?
Esencialmente, la clasificación de texto es una aplicación donde lo que se busca es asignar categorías específicas a un segmento de texto con base en su contenido y semántica. Esta técnica funciona eficientemente tanto para textos cortos como para documentos relativamente extensos.
Para entender esto con mayor claridad, analicemos un ejemplo práctico detallado.
Supongamos que tenemos un texto enviado por una persona que adquirió un producto o servicio de una empresa y que está manifestando una inconformidad. El texto del cliente indica que hace más de 7 días adquirió un producto que le debería haber llegado el día de ayer, pero que hasta el momento no lo ha recibido.
La idea es que el LLM toma ese texto, lo analiza a nivel semántico (es decir de su significado) y le asigna una categoría que ha sido predeterminada por el usuario o desarrollador de la aplicación.
Siguiendo nuestro ejemplo, el modelo podría categorizar este mensaje bajo etiquetas como «Servicio al cliente», «Queja relacionada con un envío» o «Devoluciones». Para este caso particular de inconformidad logística, el modelo debería clasificar el texto asociándolo a la categoría específica de «envíos»:

Principales aplicaciones
La clasificación de texto tiene numerosas aplicaciones en el mundo real:
- Detección de spam: tal vez la aplicación más conocida y muy usada en los clientes de correo electrónico. En este caso el sistema analiza el contenido, la estructura del mensaje y los encabezados para categorizar de forma precisa el texto como «spam» o «no spam».
- Análisis de sentimientos: un negocio puede recolectar los comentarios de los clientes en redes sociales sobre sus productos o servicios. Aplicando clasificación de texto, es posible clasificar cada valoración como «positiva», «negativa» o «neutra» dependiendo del punto de vista del consumidor.
- Soporte al cliente: en este caso la clasificación de texto permite automatizar procesos de atención. Cuando un cliente se comunica mediante un chat, el sistema evalúa el contenido del texto enviado y orienta automáticamente el flujo de soporte hacia la solución o el departamento adecuado.
- Detección de noticias falsas y comentarios abusivos: las plataformas de redes sociales analizan de manera automática las publicaciones y comentarios de los usuarios. Y mediante la clasificación de texto logran detectar si un contenido difunde noticias falsas o si contiene sesgos y lenguaje ofensivo, ayudando a la moderación de contenido en la red.
El panorama de los Grandes Modelos de Lenguaje y las Redes Transformer
Todos los LLMs que existen en la actualidad se basan en la arquitectura de las Redes Transformer, un tipo de Red Neuronal especializada en procesar secuencias (como lo es precisamente el texto).
Para entender la lógica de funcionamiento de estos modelos, repasemos cómo está construida una Red Transformer de manera general:

- El Codificador (encoder): la red Transformer acepta un texto de entrada y lo lleva a un primer bloque de procesamiento. Este bloque, conocido como codificador, es una red neuronal compuesta por muchísimas capas, parámetros y neuronas. Su función principal es tomar el texto (que puede ser muy corto o muy extenso) y generar a su salida un embedding. Un embedding es una representación vectorial del texto; es decir, un listado o vector de números con un tamaño fijo determinado que contiene la esencia y el significado (o semántica) del texto de entrada. Este es el formato que el modelo usa internamente para procesar el lenguaje.
- El Decodificador (decoder): posteriormente, el embedding se dirige a una etapa que realiza el procedimiento inverso. El decodificador toma ese vector de entrada y genera a su salida el texto que estamos esperando.
De hecho, si te interesa aprender en detalle el funcionamiento y la aplicación práctica de estas redes te invito a darle una mirada al curso de Fundamentos de Deep Learning con Python, disponible acá en la Academia Online.
Y lo interesante de esta arquitectura de una Red Transformer es que, dependiendo de qué parte de la red utilicemos (codificador o decodificador) tendremos modelos de clasificación no generativos y generativos.
Veamos en detalle estos dos tipos de clasificadores.
Clasificación de texto con modelos no generativos
Cuando decimos que un modelo es «no generativo», significa que no es capaz de generar texto nuevo como respuesta.
Si recordamos la estructura de la Red Transformer que acabamos de repasar, la porción capaz de generar texto es el decodificador. Por lo tanto, un modelo no generativo es esencialmente un modelo que carece de la etapa de decodificación y únicamente cuenta con el codificador.
Un ejemplo clásico y precursor en este campo es BERT, creado en el año 2018. BERT fue entrenado con masivas cantidades de texto para aprender a generar codificaciones numéricas (embeddings) útiles en múltiples tareas de Procesamiento del Lenguaje Natural.
Originalmente, este modelo incursionó con dos variantes:
- BERT Base: con 110 millones de parámetros (un modelo bastante grande para su época pero realmente pequeño en la actualidad).
- BERT Large: con 340 millones de parámetros (sigue siendo bastante pequeño).
Y en diciembre de 2024 se publicó una versión actualizada llamada ModernBERT. Este modelo mantiene el mismo principio de funcionamiento pero mejorado, ofreciendo una versión pequeña de 149 millones de parámetros y una más grande de 395 millones.
Ventajas de los modelos no generativos
Aunque actualmente se habla menos de ellos frente al auge de herramientas como ChatGPT o Gemini, los modelos no generativos tienen enormes ventajas para tareas específicas como la clasificación de texto:
- Son significativamente más pequeños (menos parámetros) comparados con los modelos de empresas como OpenAI o Google.
- No tienen un costo de uso por token (pues la mayoría de ellos son modelos de acceso gratuito a través de plataformas como Hugging Face)
- Pueden ejecutarse localmente sin requerir capacidades computacionales gigantescas.
Y para implementar la clasificación de texto con estos modelos (donde el objetivo es presentar el texto y que el modelo prediga un número asociado a una categoría, por ejemplo: 0 para «devoluciones», 1 para «envíos»), existen tres estrategias.
Opción 1: modelos pre-entrenados para clasificación

En este caso podemos usar un modelo basado en BERT que ya haya sido entrenado específicamente para la tarea de clasificación que necesitamos.
La arquitectura de este modelo consta del modelo base pre-entrenado al cual se le ha agregado una capa de salida (una pequeña red neuronal, el recuadro rojo en la figura de arriba). Estos dos elementos conforman un único modelo que recibe el texto de entrada y a la salida genera directamente las categorías.
La limitación de este enfoque es que se debe garantizar que las categorías con las que fue entrenado el modelo coincidan perfectamente con las de la aplicación que deseamos desarrollar.
Opción 2: modelos tipo embedding (con capa de clasificación propia)

Si el modelo pre-entrenado no se ajusta a nuestras categorías, lo que podemos hacer es tomar el texto en bruto y luego llevarlo a un modelo tipo embedding.
Este modelo, que es también un modelo tipo BERT (o no generativo), no contiene una capa de salida pre-entrenada para clasificación. Así que, en lugar de clasificar los datos directamente lo que hará será entregar a la salida la representación numérica (embedding) del texto de entrada.
Así que, para lograr clasificar el texto, debemos añadir y afinar una pequeña red neuronal (recuadro azul en la figura de arriba). Esta nueva capa de clasificación tomará las representaciones vectoriales y aprenderá a clasificarlas en nuestras categorías de interés.
En este enfoque, el modelo de embedding generalmente no se entrena (se mantiene congelado), pero sí entrenamos la capa de clasificación. Al ser una red pequeña, el entrenamiento se puede hacer localmente usando un dataset con sus categorías correspondientes (y que sólo debe tener unos cuantos cientos de ejemplos de entrenamiento).
Si el rendimiento no es óptimo, se puede hacer un proceso de afinación, descongelando el modelo de embedding para que, durante algunas iteraciones, tanto el embedding como la capa de clasificación se ajusten a nuestros datos específicos.
Opción 3: clasificación zero-shot (con similitud del coseno)

En este enfoque no realizamos ningún tipo de entrenamiento ni afinación.
En su lugar, implementamos este procedimiento para la clasificación del texto
- Tomamos el modelo de embedding pre-entrenado (por ejemplo, en Español) y le presentamos el texto que queremos clasificar, digamos un review de cine: «la mejor película que he visto». El modelo genera una representación vectorial de esta entrada (en color gris en la figura de arriba).
- Luego, tomamos textos que actúen como «plantillas» de nuestras categorías. Si queremos clasificar entre positivo y negativo, le presentamos al modelo el texto literal: «esto es un comentario negativo». El modelo genera el embedding correspondiente a esta categoría (representado en color rojo en la figura de arriba).
- Hacemos lo mismo para el caso positivo, ingresando el texto: «esto es un comentario positivo» (representado en verde en la figura de arriba). Y también obtenemos su embedding .
La idea detrás de esta técnica es que, si el texto de entrada «la mejor película que he visto» es de naturaleza positiva, su vector gris será matemáticamente más similar al embedding verde (comentario positivo) que al embedding rojo (comentario negativo).
Para cuantificar esto, utilizamos una métrica conocida como la similitud del coseno, que arroja valores entre 0 y 1. Un valor más cercano a 1 indica alta similitud, mientras que uno cercano a 0 indica baja similitud.
En este escenario, al comparar la entrada (embedding gris en la figura de arriba) con el comentario negativo (embedding rojo), la similitud del coseno nos da un valor de 0.7. Sin embargo, al comparar la entrada con el comentario positivo (embedding verde), obtenemos un grado de similitud de 0.9.
Como la comparación con el vector verde arrojó el valor mayor, el sistema clasifica automáticamente el texto de entrada como «positivo».
Esta técnica se denomina zero-shot porque no requiere ejemplos adicionales de entrenamiento para que la red logre clasificar el texto. En su lugar, opera directamente sobre el texto de entrada y sobre las plantillas, realizando la comparación directa de sus embeddings.
Clasificación de texto con modelos generativos
Por otro lado, tenemos los modelos generativos, los cuales son altamente populares hoy en día, siendo la base de aplicaciones como ChatGPT (OpenAI), Gemini (Google) o Claude (Anthropic).
Volviendo a la arquitectura Transformer, un modelo generativo está compuesto exclusivamente por la porción capaz de generar texto: el decodificador. Pero, a diferencia de los cientos de millones de parámetros de los modelos no generativos, estos modelos son gigantescos, pues cuentan con decenas, centenas o incluso miles de miles de millones de parámetros.
Esta escala masiva implica que su uso tiene un costo monetario directo asociado (especialmente para aplicaciones comerciales mediante APIs) y que exigen grandes recursos computacionales, requiriendo siempre ejecución en servidores en la nube provistos por estas empresas.
En este caso la lógica de clasificación cambia drásticamente. No basta con presentarles únicamente el texto, ya que el modelo no sabrá qué hacer con ese texto de entrada: podría intentar continuarlo, resumirlo o extraer información; así que, en su lugar, debemos estructurar un Prompt (una instrucción detallada acompañada del texto):

Por ejemplo, si tenemos el texto «la mejor película que he visto», el prompt debe incluir una directriz clara: «Indica si este texto es un comentario positivo o negativo: ‘la mejor película que he visto'». A la salida, el modelo no entregará un índice numérico, sino texto generado, respondiendo algo como: «Es un comentario positivo».
El hecho de que esta salida se encuentre en lenguaje natural implica que además será necesario implementar una etapa de post-procesamiento del texto generado para extraer la categoría correspondiente. Por ejemplo, si el texto de salida es «es un comentario positivo», debemos implementar un pequeño algoritmo que «limpie» dicha salida y capture únicamente la categoría (es decir, la palabra «positivo»).
Aunque el costo y los requerimientos computacionales aumentan, la implementación a nivel de código se simplifica radicalmente al estar basada enteramente en la ingeniería de prompts (y la pequeña fase de post-procesamiento que acabamos de describir).
Y para implementar este tipo de clasificadores de texto existen diferentes enfoques: zero-shot, one-shot y few-shot. Veamos cada uno de ellos.
1. Clasificación Zero-Shot
En este caso le damos al modelo la instrucción directa y el texto a clasificar, sin mostrarle ejemplos previos (de allí el término «zero-shot»):

Por ejemplo, podríamos darle al modelo el siguiente prompt:
Instrucción: «Clasifique este texto en una de las siguientes categorías: deportes o política.»
Texto: «La nueva temporada de Fórmula 1 comienza en pocas semanas.»
Y, basado en su entrenamiento previo, el modelo generará la respuesta: «deportes».
Sin embargo, se debe tener en cuenta que este enfoque de clasificación podría fallar si el texto usa lenguaje muy especializado, como lenguaje jurídico complejo para el cual no haya sido entrenado el modelo.
2. Clasificación One-Shot
Si el modelo tiene dificultades realizando la clasificación zero-shot, podemos ayudarlo mostrando un único ejemplo resuelto dentro del mismo prompt antes de pedirle la clasificación:

Por ejemplo, el prompt podría ser algo como esto:
«Clasifique este texto en una de las siguientes categorías: deportes o política.
Ejemplo: ‘La final de la Copa Mundial de fútbol estuvo muy reñida’ corresponde a la categoría Deportes.
Ahora clasifique este texto: ‘La nueva temporada de Fórmula 1 comienza en pocas semanas’.»
Con este ejemplo adicional, presentado en el prompt, incrementamos las probabilidades de que el modelo clasifique correctamente el texto de interés.
3. Clasificación Few-Shot
Y desde luego, si queremos incrementar aún más las probabilidades de clasificar correctamente el texto de entrada, podemos presentarle al modelo dos o más ejemplos de clasificación directamente a través del prompt. Este enfoque se conoce como «few-shot»:

Por ejemplo, podríamos tener un prompt como este:
«Clasifique este texto en una de las siguientes categorías: deportes o política.
Ejemplos:
- ‘La final de la Copa Mundial de fútbol estuvo muy reñida’ -> Categoría: Deportes.
- ‘Las elecciones presidenciales serán en dos semanas’ -> Categoría: Política.
Ahora clasifique este texto: ‘La nueva temporada de Fórmula 1 comienza en pocas semanas’.»
Con este contexto robusto, se espera que la tasa de acierto del modelo sea muy alta. Así que, idealmente, el modelo debería ser capaz de clasificar el texto correctamente la mayoría de las veces.
4. Afinación del modelo (Fine-Tuning)
Si los enfoques basados en prompts fallan dada la complejidad del set de datos o el volumen de categorías, se puede recurrir a modificar los parámetros internos del LLM generativo.
Esto implica construir un set de entrenamiento y ejecutar una afinación, usando recursos computacionales en la nube usando los servicios del proveedor (aunque también se podría afinar localmente si el modelo no tiene un elevado número de parámetros).
Desde luego esta es la última alternativa sugerida, pues esto requiere una inversión de tiempo para conformar el set de entrenamiento (que debería tener varios miles de ejemplos) y porque además probablemente requerirá el uso de servicios en la nube.
Conclusión
La elección del algoritmo y del modelo adecuado para la clasificación de texto depende fundamentalmente de los datos y de las restricciones del proyecto. Pero en resumen podemos usar estas alternativas en orden de prioridad:
- Modelos no generativos (tipo BERT): son los más económicos, requieren menor capacidad de cómputo, permiten ejecución local, y ofrecen alta precisión. A cambio, requieren un nivel más alto de desarrollo de código pero suelen entregar muy buenos resultados al momento de la clasificación.
- Modelos generativos (tipo GPT): en este caso el desarrollo del prototipo o de la aplicación es mucho más simple que en el caso anterior, pues se basa esencialmente en la estructuración de un prompt adecuado así como en la implementación de un algoritmo de post-procesamiento del texto generado. A cambio, la mayoría de las veces tendrán un costo monetario asociado, requieren inmensos recursos en la nube y pueden ser excesivos para tareas de categorización simple.
Así que si el objetivo estrictamente es una tarea de clasificación y no de generación de texto, lo más sensato es comenzar desarrollando prototipos con modelos más simples y económicos (modelos no generativos). Una vez evaluado su rendimiento, y solo si la complejidad semántica del texto lo amerita y los modelos base no alcanzan las métricas deseadas, el paso lógico será escalar hacia los modelos generativos.
De hecho, si te interesa aprender a implementar estos dos enfoques de clasificación (usando modelos no generativos y generativos) te invito a dar una mirada al curso Clasificación de Texto con Grandes Modelos de Lenguaje, disponible acá en la Academia Online, donde vemos de manera práctica todos los elementos a tener en cuenta para el desarrollo de este tipo de clasificadores.
