En el tema anterior vimos que Bag of Words convierte un texto en un vector contando o marcando la presencia de palabras. Ese enfoque fue una base muy importante del NLP clásico, pero tiene una limitación evidente: trata todas las palabras del vocabulario con una lógica demasiado uniforme.
En la práctica, no todas las palabras tienen el mismo valor informativo. Algunas aparecen en casi todos los documentos y, por lo tanto, ayudan poco a distinguir unos textos de otros. Otras son menos frecuentes y mucho más representativas del contenido específico de un documento.
Para capturar mejor esa diferencia surge TF-IDF, una representación clásica que no solo considera la presencia de términos, sino también su importancia relativa dentro del corpus.
TF-IDF es la sigla de Term Frequency - Inverse Document Frequency. En español suele traducirse como:
La idea general es combinar dos intuiciones:
TF-IDF intenta equilibrar ambas cosas.
Supongamos que analizamos una colección de noticias deportivas. En casi todos los textos aparecerán palabras muy comunes como el, de, y o incluso partido. En cambio, términos como penal, Messi o semifinal podrían ser más específicos y, por lo tanto, más útiles para distinguir ciertos documentos.
Bag of Words puro solo cuenta apariciones. TF-IDF, en cambio, intenta dar menos peso a términos demasiado comunes y más peso a términos que son relativamente informativos.
El componente TF mide cuántas veces aparece un término dentro de un documento. La intuición es simple: si una palabra aparece varias veces en un texto, probablemente tenga cierta relevancia para ese documento.
Por ejemplo, si en un artículo la palabra vacuna aparece repetidamente, es razonable pensar que el tema del documento está relacionado con ella.
Existen distintas formas de calcular TF, pero la idea básica siempre es medir presencia local del término dentro del documento.
El componente IDF mide qué tan raro o específico es un término dentro del conjunto completo de documentos. Si una palabra aparece en casi todos los textos, entonces su capacidad para distinguir documentos es baja. Si aparece en pocos, su valor discriminativo es mayor.
En consecuencia:
Esta es la parte que hace de TF-IDF una mejora respecto de Bag of Words puro.
Cuando combinamos ambos componentes, obtenemos una idea bastante razonable de importancia textual:
Esto ayuda a resaltar términos representativos sin quedar dominados por palabras demasiado frecuentes.
Imaginemos tres documentos:
el gato duerme en la casael perro duerme en la casael gato corre en el jardínPalabras como el o en aparecen en casi todos los documentos. En cambio, términos como jardín son más raros y, por eso, pueden recibir un peso mayor en el documento donde aparecen.
TF-IDF intenta capturar exactamente esa diferencia.
Bag of Words representa el texto mediante presencia o conteo de palabras. TF-IDF usa esa misma base, pero introduce ponderación. Es decir, ambos parten de un vocabulario y de una matriz documento-término, pero TF-IDF no trata todos los términos igual.
Podemos decir entonces que TF-IDF es una evolución natural de Bag of Words, orientada a destacar palabras más informativas.
El problema principal que intenta resolver TF-IDF es que en Bag of Words las palabras muy frecuentes pueden dominar la representación sin aportar demasiado valor discriminativo.
Por ejemplo, si dos documentos comparten muchas palabras comunes, sus vectores pueden parecer bastante similares aunque hablen de temas diferentes. TF-IDF reduce parte de ese efecto al bajar el peso de los términos demasiado extendidos en el corpus.
Lo importante en TF-IDF no es memorizar fórmulas, sino entender su lógica:
Desde un punto de vista práctico, eso hace que la representación final sea más útil para distinguir documentos.
Una ventaja importante de TF-IDF es que reduce naturalmente el peso de palabras muy frecuentes. Eso significa que, en muchos casos, el problema de las stopwords se atenúa incluso sin eliminarlas explícitamente.
Esto no significa que las stopwords dejen de importar por completo, pero sí que TF-IDF ya corrige parte del sesgo que esas palabras introducían en Bag of Words puro.
En Bag of Words, el vector de un documento contiene presencias o conteos. En TF-IDF, en cambio, cada posición contiene un peso que refleja la importancia del término en ese documento dentro del corpus.
Eso hace que los vectores no sean simplemente conteos enteros, sino valores numéricos ponderados.
El resultado sigue siendo una representación tabular de tamaño fijo, pero con información más refinada.
Al igual que con Bag of Words, cuando trabajamos con varios documentos el resultado puede organizarse como una matriz documento-término. La diferencia es que ahora las celdas contienen pesos TF-IDF en lugar de simples conteos.
Esto mantiene la estructura clásica del NLP basado en vectores, pero con una semántica más informativa para cada dimensión.
TF-IDF tiene varias ventajas importantes:
Aunque mejora respecto de Bag of Words, TF-IDF sigue teniendo varias limitaciones:
Por eso, aunque es una gran mejora dentro del NLP clásico, sigue siendo una representación limitada frente a enfoques más modernos.
Un aspecto importante de TF-IDF es que el valor de IDF depende del corpus de referencia. Esto significa que una palabra puede recibir pesos distintos según la colección de documentos con la que trabajemos.
Una palabra rara en un corpus puede no ser rara en otro. Por eso, TF-IDF no produce un significado absoluto de los términos, sino una importancia relativa al conjunto documental disponible.
TF-IDF fue durante mucho tiempo una de las representaciones favoritas para clasificación de texto con modelos clásicos. Su combinación con algoritmos como regresión logística, Naive Bayes o máquinas de soporte vectorial dio resultados muy sólidos en muchas tareas.
Por ejemplo, puede usarse para:
Otra aplicación clásica de TF-IDF es la recuperación de información. Si consultas y documentos se representan con estos pesos, es posible medir similitud textual de manera más inteligente que con simples conteos.
Esto fue fundamental en muchos sistemas de búsqueda clásicos, donde importaba encontrar documentos relevantes según términos distintivos y no solo según frecuencia bruta.
Uno de los aportes conceptuales más valiosos de TF-IDF es mostrar que una palabra muy frecuente en un documento no necesariamente es importante si también es muy frecuente en todos los demás.
Esta distinción parece simple, pero representa un avance significativo respecto de Bag of Words puro.
TF-IDF sigue siendo muy útil cuando:
En muchos problemas tabulares o de clasificación documental, TF-IDF sigue siendo competitivo y muy práctico.
Más adelante veremos que los embeddings intentan capturar relaciones semánticas y contexto de una forma que TF-IDF no puede. Sin embargo, eso no vuelve inútil a TF-IDF.
TF-IDF sigue teniendo ventajas claras:
Por eso, en muchos proyectos reales sigue siendo una referencia muy valiosa.
Supongamos que en una colección de documentos aparece muchas veces la palabra producto, pero solo en unos pocos aparece garantía. Si un documento contiene varias veces garantía, es razonable que TF-IDF la considere especialmente importante dentro de ese texto.
Ese tipo de ponderación ayuda a que la representación sea más sensible a lo distintivo y menos dependiente de términos generales demasiado frecuentes.
| Aspecto | Bag of Words | TF-IDF |
|---|---|---|
| Valor en cada dimensión | Presencia o conteo. | Peso ponderado por importancia relativa. |
| Tratamiento de términos comunes | Puede sobrevalorarlos. | Les reduce peso. |
| Interpretabilidad | Alta. | Alta. |
| Orden de palabras | No se conserva. | No se conserva. |
| Principal ventaja | Simplicidad. | Mejor ponderación de relevancia. |
Este ejemplo usa noticias cortas de dos dominios y muestra cuáles son las palabras con mayor peso TF-IDF en cada documento. Así se aprecia por qué TF-IDF resalta términos informativos y no solo frecuentes.
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
documentos = [
"river gano el clasico con dos goles en el segundo tiempo",
"el entrenador preparo una defensa muy solida para el partido",
"python acelera el analisis de datos y el entrenamiento del modelo",
"el modelo de lenguaje usa embeddings y atencion",
"el banco central anuncio nuevas medidas para el mercado cambiario",
"el hospital incorporo tecnologia para el diagnostico temprano"
]
vectorizador = TfidfVectorizer()
X = vectorizador.fit_transform(documentos)
terminos = vectorizador.get_feature_names_out()
for i, doc in enumerate(documentos):
fila = X[i].toarray()[0]
top = np.argsort(fila)[-4:][::-1]
print(f"\nDocumento {i + 1}: {doc}")
for j in top:
print(f" {terminos[j]} -> {fila[j]:.3f}")
La aplicación hace lo siguiente:
TfidfVectorizer() construye automáticamente el vocabulario a partir de todos los documentos.fit_transform(documentos) calcula la matriz TF-IDF: cada fila representa un documento y cada columna un término del vocabulario.Los números como 0.329, 0.315 o 0.426 son precisamente esos pesos TF-IDF. No representan probabilidades ni porcentajes. Lo que indican es la importancia relativa de cada término dentro del vector del documento: cuanto más alto el número, más distintiva resulta esa palabra para ese texto en comparación con el resto de los documentos.
Por ejemplo, en el Documento 1 aparecen valores altos para river, clasico, goles y segundo porque son términos bastante característicos de esa noticia deportiva y no se repiten en los otros textos. En cambio, una palabra como el también aparece con peso, pero su valor no domina tanto porque ahora está presente en muchos documentos del corpus y por eso TF-IDF le reduce relevancia global.
En el Documento 3, términos como python y datos destacan porque identifican claramente un texto técnico. En el Documento 4, palabras como embeddings, atencion, lenguaje y usa reciben pesos altos porque ayudan a diferenciar ese documento del resto. Los nuevos documentos también refuerzan la idea central: aunque el siga apareciendo muchas veces, palabras más específicas como banco, cambiario, hospital o diagnostico tenderán a recibir mayor peso porque describen mejor el tema de cada texto.
Lo importante no es el valor absoluto aislado, sino la comparación dentro de cada documento. Si en un texto una palabra tiene un peso mayor que otra, entonces TF-IDF la está considerando más informativa para representar ese documento.
En un corpus como este, palabras como clasico, goles, embeddings o atencion tienden a destacar más que términos demasiado generales. Ese comportamiento hace que TF-IDF sea especialmente útil para clasificación y búsqueda.
TF-IDF representa un paso importante en la evolución de las representaciones clásicas del texto. Mantiene la simplicidad e interpretabilidad de Bag of Words, pero incorpora una idea más rica de relevancia: no todas las palabras merecen el mismo peso.
Gracias a esa ponderación, TF-IDF fue durante muchos años una de las herramientas más efectivas y prácticas para clasificación y recuperación de información, y todavía hoy sigue siendo una excelente baseline.
En el próximo tema comenzaremos con la introducción a embeddings de palabras, donde veremos un cambio conceptual importante: dejar de representar palabras como dimensiones aisladas y empezar a representarlas como vectores densos capaces de capturar similitud semántica.