Cómo procesar datos textuales usando TF-IDF en Python

Las computadoras son buenas con los números, pero no tanto con los datos textuales. Una de las técnicas más utilizadas para procesar datos textuales es TF-IDF. En este artículo, aprenderemos cómo funciona y cuáles son sus características.

Desde nuestra intuición, creemos que las palabras que aparecen con más frecuencia deberían tener un mayor peso en el análisis de datos textuales, pero ese no es siempre el caso. Las palabras como "el", "voluntad" y "usted", llamadas palabras vacías, aparecen más en un corpus de texto, pero tienen muy poca importancia. En cambio, las palabras que son raras son las que realmente ayudan a distinguir entre los datos y tienen más peso.

Una introducción a TF-IDF

TF-IDF significa "Frecuencia de término - Frecuencia de datos inversa". Primero, aprenderemos qué significa matemáticamente este término.

Término Frecuencia (tf): nos da la frecuencia de la palabra en cada documento del corpus. Es la proporción del número de veces que la palabra aparece en un documento en comparación con el número total de palabras en ese documento. Aumenta a medida que aumenta el número de apariciones de esa palabra en el documento. Cada documento tiene su propio tf.

Frecuencia de datos inversa (idf): se utiliza para calcular el peso de las palabras raras en todos los documentos del corpus. Las palabras que ocurren raramente en el corpus tienen un puntaje IDF alto. Está dada por la siguiente ecuación.

Combinando estos dos, obtenemos la puntuación TF-IDF (w) para una palabra en un documento en el corpus. Es el producto de tf e idf:

Tomemos un ejemplo para obtener una comprensión más clara.

Oración 1: El auto es conducido en la carretera.

Oración 2: El camión es conducido en la carretera.

En este ejemplo, cada oración es un documento separado.

Ahora calcularemos el TF-IDF para los dos documentos anteriores, que representan nuestro corpus.

De la tabla anterior, podemos ver que TF-IDF de palabras comunes era cero, lo que muestra que no son significativas. Por otro lado, el TF-IDF de "automóvil", "camión", "carretera" y "autopista" no son cero. Estas palabras tienen más significado.

Usando Python para calcular TF-IDF

Ahora codifiquemos TF-IDF en Python desde cero. Después de eso, veremos cómo podemos usar sklearn para automatizar el proceso.

La función computeTF calcula el puntaje TF para cada palabra en el corpus, por documento.

La función computeIDF calcula la puntuación IDF de cada palabra en el corpus.

La siguiente función computeTFIDF calcula la puntuación TF-IDF para cada palabra, multiplicando las puntuaciones TF e IDF.

La salida producida por el código anterior para el conjunto de documentos D1 y D2 es la misma que calculamos manualmente anteriormente en la tabla.

Puede consultar este enlace para la implementación completa.

sklearn

Ahora veremos cómo podemos implementar esto usando sklearn en Python.

Primero, importaremos TfidfVectorizer desde sklearn.feature_extraction.text:

Ahora inicializaremos el vectorizador y luego llamaremos a fit y lo transformaremos para calcular la puntuación TF-IDF para el texto.

Debajo del capó, el sklearn fit_transform ejecuta las siguientes funciones de ajuste y transformación. Estos se pueden encontrar en la biblioteca oficial de sklearn en GitHub.

Una cosa a tener en cuenta en el código anterior es que, en lugar de solo el registro de n_samples, se ha agregado 1 a n_samples para calcular la puntuación IDF. Esto garantiza que las palabras con un puntaje IDF de cero no se supriman por completo.

La salida obtenida tiene la forma de una matriz sesgada, que se normaliza para obtener el siguiente resultado.

Por lo tanto, vimos cómo podemos codificar fácilmente TF-IDF en solo 4 líneas usando sklearn. Ahora entendemos cuán poderoso es TF-IDF como herramienta para procesar datos textuales de un corpus. Para obtener más información sobre sklearn TF-IDF, puede usar este enlace.

¡Feliz codificación!

Gracias por leer este artículo. Asegúrese de aplaudir y recomendar este artículo si lo encuentra útil.

Para más información sobre programación, puedes seguirme, para que te notifiquen cada vez que se me ocurra una nueva publicación.

¡Salud!

Además, conectemos en Twitter, Linkedin, Github y Facebook.