TF-IDF Vectorizer (Term Frequency-Inverse Document Frequency Vectorizer) es una medida de feature weighting que expresa lo relevante que es una palabra en un documento, el cual forma parte de un corpus. En este artículo veremos más a fondo en qué consiste este término.
¿Cómo funciona el TF-IDF Vectorizer?
El tf idf vectorizer python tiene en cuenta el número de veces que aparece la palabra (o token) en dicho documento, pero también el total de veces que aparece en todo el corpus.
- Los tokens muy frecuentes a nivel de documento y de corpus (posibles stopwords) obtendrán un valor de TF-IDF Vectorizer bajo.
- Los tokens que aparecen solo en ciertos documentos del corpus tendrán un IDF mayor que aquellos que aparecen en mayor número de documentos.
De modo que:
TF-IDF → término x sin documento y
tfx,y = frecuencia de x en y
dfx = número de documentos que contienen x
N = número total de documentos
En un sistema de recuperación de información (information retrieval) sencillo, el módulo de ranking de documentos puede construirse considerando el peso de cada documento como la suma de los TF-IDF de cada palabra que lo componen.
El TF-IDF es una forma de representación muy extendida.
Hasta ahora, siempre hemos estado viendo las representaciones con base en la frecuencia, sin tener en cuenta el número de veces o la cantidad de palabras que tenemos en el corpus.
El algoritmo de TF-IDF lo que hace es asignar un peso respecto a lo relevante que es una palabra en un documento. De este modo, los tokens que son muy frecuentes a nivel de documento y de corpus (por ejemplo, las stopwords) van a tener un TF-IDF muy bajo.
Lo que sucederá con este algoritmo es que nos aplicará un filtrado con todas las palabras que sean stopwords, en el caso de que se repitan un montón de veces a lo largo del documento. Así, para evitar precisamente esta situación en la que tantas stopwords no aportan absolutamente nada al texto, se hace un barrido, una especie de depuración.
Ya no tendríamos que estar buscando parámetros, como hemos hecho con el one-hot encoding, mirando y evaluando cuáles son los más óptimos para evitar las stopwords, quedarnos solo con las que representan más y hacer n-gramas, entre otro largo número de operaciones que podemos ahorrarnos aplicando el algoritmo de TF-IDF Vectorizer.
Si utilizamos el TF-IDF Vectorizer, no tendremos este problema, porque el mismo algoritmo se encarga de asignar una relevancia a las palabras que se repiten, pero no tanto.
Entonces, ¿cuáles son las palabras que tienen mayor peso de IDF en el corpus? Son las que aparecen solo en ciertas partes de forma no muy recurrente respecto a la cantidad de palabras en el corpus.
Todo esto se basa en la fórmula que hemos propuesto anteriormente.
Ejemplo del TF-IDF Vectorizer
Para usar el algoritmo, debes saber que viene incluido en el sklearn como una feature extraction.
Vamos a probarlo y, para ello, lo que haremos es entrenar dos, para sea más fácil evidenciar la comparativa:
#tf idf vectorization python
from sklearn.feature_extraction.text import TfidTransformer
Entonces, vamos a hacer un count vectorizer con los siguientes datos:
- ‘me gustan los perros’
- ‘hay perros y perros’
- ‘hay muchas razas de perros’
Para sacar el nombre de las columnas.
#TF-IDF Vectorizer
#vectorizer = tfidfvectorizer()
vectorizer = CountVectorizer ()
X = vectorizer.fit_ transform (corpus)
Ahora vamos a entrenar un TF-IDF Vectorizer:
#TF-IDF Vectorizer
transformer = TfidfTransformer ()
tf_idf = transformer.fit_ transform (X)
doc_term_matrix = pd.DataFrame (tf_idf.toarray (), columns = vectorizer. get_ feature_names ())
doc_term_matrix
Aquí hemos generado una matriz de representación a partir del algoritmo TF-IDF Vectorizer y vemos, respecto a las probabilidades, cuáles son las palabras que tienen mayor relevancia. En el caso, por ejemplo, de «gustan», tiene un 0.54 de valor.
TF-IDF Vectorizer (manera directa)
#TF-IDF Vectorizer
from sklearn.feature_extraction.text import TfidTransformer
vectorizer = CountVectorizer ()
X = vectorizer.fit_ transform (corpus)
corpus
#TF-IDF Vectorizer
doc_term_matrix = pd.DataFrame (tf_idf.toarray (), columns = vectorizer. get_ feature_names ())
doc_term_matrix
Lo que está pasando aquí es que no usamos el count vectorizer para extraer las features, sino que utilizamos directamente el propio vectorizador.
¿Quieres seguir avanzando?
Si quieres seguir aprendiendo sobre el TF-IDF Vectorizer y otros algoritmos de representación, te invitamos a que sigas nuestra formación. Para poder acceder a las opciones laborales del Big Data, uno de los mercados con mayor demanda y mejores salarios, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva adquirirás los conocimientos tanto teóricos como prácticos imprescindibles para abrirte paso en el mundillo laboral tecnológico en pocos meses. ¡No dudes en dar el paso que transformará tu futuro y entra ya para solicitar más información!