Hola, me llamo Luis y aquí les traigo otro nuevo artículo.
Índice
Extrayendo palabras informativas por clase
En una de mis publicaciones anteriores, hablé de modelado de temas con BERT que involucró un versión basada en clases de TF-IDF. Esta versión de TF-IDF me permitió extraer temas interesantes de un conjunto de documentos.
¡Pensé que sería interesante profundizar un poco más en el método, ya que se puede usar para muchas más aplicaciones además del modelado de temas!
Una descripción general de las posibles aplicaciones:
- Palabras informativas por clase: ¿Qué palabras hacen que una clase se destaque en comparación con todas las demás?
- Reducción de clase: Usando c-TF-IDF para reducir el número de clases
- Modelado semi-supervisado: Predecir la clase de documentos invisibles utilizando solo similitud de coseno y c-TF-IDF
Este artículo se centrará principalmente en las aplicaciones de c-TF-IDF
pero también se darán algunos antecedentes sobre el modelo.
Si desea omitir todo eso e ir directamente a la código puedes comenzar desde el repositorio aquí.
TF-IDF basado en clases
Antes de entrar en las posibilidades de este TF-IDF basado en clases, veamos primero cómo funciona TF-IDF y los pasos que debemos seguir para transformarlo en c-TF-IDF.
TF-IDF
TF-IDF es un método para generar características a partir de documentos textuales que es el resultado de multiplicar dos métodos:
- Frecuencia de término (TF)
- Frecuencia de documento inverso (IDF)
El término frecuencia es simplemente el recuento sin procesar de palabras dentro de un documento donde cada recuento de palabras se considera una característica.
La frecuencia inversa del documento extrae cómo informativo ciertas palabras se calculan mediante el cálculo de la frecuencia de una palabra en un documento en comparación con su frecuencia en todos los demás documentos.
Puedes imaginar que palabras como the
, and
, I
, etc. son palabras bastante comunes pero contienen muy poca información, ya que aparecen en casi todos los documentos. La frecuencia inversa de los documentos castiga las palabras que son demasiado comunes.
El resultado es una matriz de características dispersas que se puede utilizar para la extracción de características, el modelado predictivo y la similitud de documentos.
Transforma TF-IDF en c-TF-IDF
El objetivo del TF-IDF basado en clases es proporcionar todos los documentos dentro de una sola clase con el mismo vector de clase. Para hacerlo, tenemos que empezar a mirar TF-IDF desde un punto de vista basado en clases en lugar de documentos individuales.
Si los documentos no son individuos, sino parte de un colectivo más amplio, entonces podría ser interesante considerarlos como tales por uniendo todos los documentos en una clase juntos.
El resultado sería un documento muy largo que por sí solo no es realmente legible. Imagínese leer un documento que consta de 10000 páginas!
Sin embargo, esto nos permite comenzar a mirar TF-IDF desde una perspectiva basada en clases.
Entonces, en lugar de aplicar TF-IDF a los documentos largos recién creados, tenemos que tener en cuenta que TF-IDF tomará el número de clases en lugar del número de documentos desde que fusionamos documentos.
Todos estos cambios en TF-IDF dan como resultado la siguiente fórmula:
Donde el frecuencia de cada palabra t
se extrae para cada clase i
y dividido por el número total de palabras w
. Esta acción puede verse como una forma de regularización de palabras frecuentes en la clase. A continuación, el número total, no unido, de documentos m
se divide por la frecuencia total de palabras t
en todas las clases n
.
Código
Cuando introduje c-TF-IDF en el modelado de temas con la publicación BERT, utilicé un método ineficaz para calcular c-TF-IDF.
Desde entonces, he creado una versión de c-TF-IDF que no solo permite una mayor aceleración pero también hace uso de TFidfTransformer en Scikit-Learn lo que nos permite utilizar la estabilidad que Scikit-Learn tiene para ofrecer.
Como puede ver, partimos de TfidfTransformer
y adoptar solo los métodos de ajuste y transformación para convertirlo en el CtfidfVectorizer
. El vectorizador toma una matriz dispersa que contiene los datos de recuento sin procesar.
El ejemplo más básico para crear la matriz c-TF-IDF es el siguiente:
Nos aseguramos de que todos los documentos de la clase se fusionen antes de pasarlos por CountVectorizer para calcular los datos de recuento sin procesar que finalmente se transfieren a CTFIDFVectorizer.
NOTA: Los n_samples
pasó por el CTFIDFVectorizer
es el número total de desacoplado documentos. Esto es necesario ya que los valores IDF se vuelven demasiado pequeños si en su lugar se pasa el número de documentos unidos ..
Aplicaciones
Como se mencionó anteriormente, hay aproximadamente tres casos de uso en los que c-TF-IDF podría ser interesante de usar:
- ¿Qué palabras son típicas de una clase específica en comparación con todas las demás?
- ¿Cómo podemos reducir el número de clases usando c-TF-IDF?
- ¿Cómo podemos utilizar c-TF-IDF en el modelado predictivo?
Palabras informativas por clase
Lo que hace que c-TF-IDF sea único en comparación con TF-IDF es que podemos adoptarlo de manera que podamos buscar palabras que componen ciertas clases.
Si tuviéramos una clase marcada como espacio, entonces esperaríamos encontrar palabras relacionadas con el espacio, ¿verdad?
Para hacer esto, simplemente extraemos la matriz c-TF-IDF y encontramos los valores más altos en cada clase:
Como era de esperar, las palabras representan muy bien la clase a la que pertenecen. Puede ver este procedimiento c-TF-IDF como un resumen de lo que implica la clase.
Reducción de clase
A veces, tener muchas clases puede ser perjudicial para los análisis claros. Es posible que desee una descripción general más general para tener una idea de las principales clases de datos.
Afortunadamente, podemos usar c-TF-IDF para reducir el número de clases al valor que esté buscando.
Podemos hacer esto comparando los vectores c-TF-IDF de todas las clases entre sí para fusionar las clases más similares:
¡El uso de la similitud de coseno en los vectores c-TF-IDF parece haber funcionado! Encontramos correctamente que las clases atheism
y christian
puede fusionarse en lo que podemos llamar religion
. Encontramos resultados similares para autos
y motorcycles
que se pueden combinar entre sí.
Con este método, podemos seleccionar las clases más similares y combinarlas siempre que sean lo suficientemente similares.
Modelado semi-supervisado
Usando c-TF-IDF incluso podemos realizar modelado semi-supervisado directamente sin la necesidad de un modelo predictivo.
Comenzamos creando una matriz c-TF-IDF para los datos del tren. El resultado es un vector por clase que debe representar el contenido de esa clase. Finalmente, verificamos, para datos nunca antes vistos, qué tan similar es ese vector al de todas las categorías:
Aunque podemos ver que los resultados no son nada del otro mundo con una precisión de aproximadamente 50%… La precisión es mucho mejor que adivinar aleatoriamente la clase que es 5%.
Sin ningún modelo predictivo complejo, logramos obtener una precisión decente con un modelo rápido y relativamente simple. ¡Ni siquiera preprocesamos los datos!
Añadir comentario