Agrupación de texto no estructurado con incrustaciones LLM y HDBSCAN

En este artículo, aprenderá a crear un canal de agrupación de texto combinando incrustaciones de modelos de lenguaje grandes con HDBSCAN, un algoritmo de agrupación basado en densidad, para descubrir automáticamente temas en datos de texto sin etiquetar.

Los temas que cubriremos incluyen:

Cómo generar incrustaciones de texto para documentos sin formato utilizando un modelo de transformadores de oraciones previamente entrenado. Cómo reducir la dimensionalidad de esas incorporaciones con UMAP para prepararlas para la agrupación. Cómo aplicar HDBSCAN para descubrir automáticamente grupos de temas y visualizar los resultados.

Agrupación de texto no estructurado con incrustaciones LLM y HDBSCAN

Introducción

La era actual de la IA generativa parece centrarse principalmente en las interfaces y mensajes de chat, pero la gama de aplicaciones de los grandes modelos de lenguaje, o LLM para abreviar, no se limita solo a eso. De hecho, una de sus capacidades posteriores más poderosas consiste en convertir texto crudo, desordenado y desestructurado en representaciones matemáticas semánticamente ricas llamadas incrustaciones. Una vez hecho esto, podemos usar estas representaciones de texto para una variedad de casos de uso de aprendizaje automático, y la agrupación en clústeres no es una excepción.

En particular, las incrustaciones se pueden combinar con técnicas avanzadas de agrupamiento basadas en densidad como HDBSCAN, lo que permite como resultado el descubrimiento de temas, patrones o categorías ocultos en su colección de documentos de texto: todo sin la necesidad de un etiquetado previo.

Este artículo muestra cómo construir una canalización de agrupación en clústeres basada en texto desde cero. Usaremos un conjunto de datos disponible gratuitamente que contiene instancias de texto, así como un LLM de código abierto que ha sido capacitado para generar incrustaciones, es decir, el llamado modelo de incrustación. La guinda del pastel: utilizaremos bibliotecas de Python modernas, prácticas y gratuitas que proporcionan implementaciones de algoritmos de agrupación en clústeres como HDBSCAN.

Tutorial paso a paso

Primero, comencemos instalando las bibliotecas clave de Python que necesitaremos:

Transformadores de oraciones, para cargar un LLM previamente entrenado para la generación integrada desde Hugging Face; necesitará una clave API de Hugging Face, también llamada token de acceso, para poder cargar el modelo. Umap-learn, para aplicar un algoritmo para reducir la dimensionalidad de las incrustaciones.

Del mismo modo, si está trabajando en un IDE local en lugar de un entorno de portátil en la nube y no tiene scikit-learn y pandas, es posible que también deba instalarlos.

Ahora comenzamos la parte de codificación obteniendo algunos datos nuevos. La función fetch_20newsgroups, que recupera un conjunto de datos que contiene textos de artículos de noticias categorizados, será suficiente. Tenga en cuenta que, aunque el conjunto de datos contiene etiquetas, las omitiremos, ya que pretendemos no conocer esta información con el fin de agrupar estas instancias de datos en grupos según la similitud. Además, tomamos una muestra del conjunto de datos a 150 instancias, lo que será lo suficientemente representativo para nuestro ejemplo.

Producción:

El siguiente paso es obtener las incrustaciones a partir de textos sin formato. Para hacer esto, cargamos all-MiniLM-L6-v2 de la biblioteca de transformadores de oraciones de Hugging Face. Se trata de un modelo ligero pero eficaz para obtener incrustaciones rápidamente.

Dado que la dimensión de incrustación es originalmente demasiado alta para fines de agrupación, ahora aplicamos una técnica de reducción de dimensionalidad utilizando el algoritmo UMAP de la biblioteca homónima instalada anteriormente:

Ahora nuestros vectores de incrustación numéricos asociados con artículos de noticias constan únicamente de cinco dimensiones (atributos). Veamos si esta representación compacta es lo suficientemente significativa como para obtener una agrupación detallada aplicando el algoritmo HDBSCAN, que es un enfoque de agrupación basado en densidad:

Importante: los resultados de la agrupación están parcialmente influenciados por la configuración de hiperparámetros que definimos para HDBSCAN. Le recomiendo que pruebe otras configuraciones para el tamaño mínimo del clúster y otros hiperparámetros para explorar cómo esto afecta los resultados.

Resultado:

Parece que HDBSCAN detectó dos grupos asociados con regiones de alta densidad en el espacio de datos. ¿Habría también puntos ruidosos que no estuvieran asignados a ninguno de estos dos grupos? Comprobemos:

Producción:

Parece que todos los puntos de datos de la muestra de 150 se asignaron a cualquiera de los dos grupos identificados, lo que da a entender que los artículos de noticias podrían separarse fácilmente según el tema.

Para obtener información adicional, podemos mostrar algunas visualizaciones de clústeres con la ayuda del código complementario que se proporciona a continuación, que muestra un diagrama de dispersión para cada combinación por pares de los cinco componentes existentes que describen cada punto de datos:

Resultado:

Visualizaciones agrupadas

Al probar diferentes configuraciones para HDBSCAN, es posible que encuentre resultados en los que la cantidad de clústeres identificados podría ser diferente de dos. ¡Pruébalo!

Concluyendo

Una vez que hayamos pasado por el proceso de construcción del proceso de agrupación en clústeres basado en texto, vale la pena concluir señalando las razones clave por las que vale la pena integrar incrustaciones de LLM con HDBSCAN. Estos incluyen la capacidad de retener y capturar, hasta cierto punto, el verdadero significado semántico y los matices lingüísticos del texto original, gracias a las propiedades inherentes a las incrustaciones obtenidas mediante transformadores de oraciones. Además, HDBSCAN determina automáticamente una cantidad óptima de grupos y es capaz de detectar puntos periféricos que podrían ser ruido o valores atípicos que distorsionarían las estadísticas a nivel de grupo.