Calculadora de similitud coseno TF-IDF — puntúa dos textos de 0 a 1
Pega dos textos y obtén la similitud coseno de sus vectores TF-IDF suavizados (N=2) en una escala de 0 a 1. El vocabulario total, el número de términos comunes y la norma de cada vector se muestran en un solo panel, con conmutadores para ignorar mayúsculas y para el TF sublineal. Hasta 20 000 caracteres por documento.
💡 Sobre esta herramienta
Al implementar el ranking de un buscador o al revisar si dos artículos se solapan, suele convenir comprobar a mano si dos pasajes realmente se parecen por cómo se cruzan sus palabras. Antes de recurrir a un modelo de embeddings, a menudo quieres primero la similitud léxica simple: eso es lo que ofrece esta calculadora.
TF-IDF pondera cada término multiplicando su frecuencia en el documento (TF) por su rareza entre documentos (IDF). Las palabras frecuentes y distintivas pesan más, mientras que las que aparecen en ambos documentos se descuentan. La herramienta trata tus dos entradas como dos documentos, construye el vocabulario compartido, forma los vectores TF-IDF y devuelve la similitud coseno con cuatro decimales.
Con solo dos documentos, la IDF cruda de una palabra compartida se anula, así que se usa la misma fórmula suavizada que scikit-learn: IDF = ln((N+1)/(df+1)) + 1. Eso asigna un peso de 1,0 a los términos comunes y unos 1,405 a los que aparecen en un solo documento. El vocabulario total, el número de términos comunes y las normas se muestran al lado para que puedas seguir cómo se formó el número.
🧐 Preguntas frecuentes
¿Cómo leo el valor coseno? Cuanto más cerca de 1, más alineados están los vectores y más se parecen los textos (ángulo 0°); 0 significa que no hay términos comunes y son ortogonales (ángulo 90°). Alrededor de 0,5 indica un solapamiento parcial de vocabulario.
¿Por qué hay un suavizado de +1 en la IDF? Con solo dos documentos, una palabra que aparece en ambos tendría una IDF cruda de cero y perdería todo su peso. El suavizado por defecto de scikit-learn (+1 en numerador y denominador, +1 al final) mantiene un peso de 1,0 en los términos comunes para que el cálculo no se rompa.
¿Qué cambia al activar el TF sublineal? En vez del recuento bruto, la frecuencia pasa a ser 1 + ln(tf), lo que atenúa el efecto de una palabra repetida muchas veces. Importa en textos largos donde un término se repite mucho; coincide con la opción por defecto de scikit-learn.
¿Cómo se segmentan el CJK y otros sistemas de escritura? Los caracteres CJK (chino, kana japonés, coreano) se tratan como un token por carácter. Las secuencias de letras, dígitos, apóstrofo, guion y subrayado forman una sola palabra. No se aplica análisis morfológico, así que úsalo como medida léxica de cercanía, de tipo bolsa de palabras.
¿A qué afecta la normalización de mayúsculas? Si está activa, las letras ASCII se pasan a minúscula, de modo que "Cosine" y "cosine" cuentan como el mismo término. El CJK no se ve afectado. Desactívala cuando necesites distinguir nombres propios con mayúscula.
📚 Apuntes sobre TF-IDF y coseno
Desde que se propuso en los años 70, TF-IDF sigue siendo un cimiento del scoring en búsqueda de texto completo. La puntuación por defecto de Elasticsearch y Lucene es BM25, una evolución de TF-IDF, pero la idea de fondo —frecuencia por rareza— es la misma. Examinar a mano un coseno TF-IDF simple ayuda a entender por qué un ranking de búsqueda sale en cierto orden.
La similitud coseno ignora la longitud del vector y solo mira la dirección porque el objetivo es comparar la "dirección" del vocabulario sin que la longitud de cada texto distorsione el resultado. Un documento largo y uno corto pueden puntuar alto si la composición de sus palabras es similar. La herramienta también muestra la norma A y la norma B, así que ves a la vez la magnitud del vector TF-IDF de cada documento: la acumulación de sus términos y pesos.