information-retrieval vsm cosine-similarity tf-idf

information retrieval - Similitud de coseno y tf-idf



information-retrieval vsm (5)

Estoy confundido por el siguiente comentario sobre TF-IDF y Cosine Similarity .

Estaba leyendo en ambos y luego en wiki bajo Cosine Similarity. Encuentro esta frase "En el caso de recuperación de información, la similitud de coseno de dos documentos variará de 0 a 1, ya que el término frecuencias (tf-idf pesos) no puede ser negativo. El ángulo entre dos vectores de frecuencia de término no puede ser mayor que 90. "

Ahora me pregunto ... ¿no son 2 cosas diferentes?

¿Tf-idf ya está dentro de la similitud del coseno? Si es así, entonces qué diablos, solo puedo ver los productos de puntos internos y las longitudes euclidianas.

Pensé que tf-idf era algo que podías hacer antes de ejecutar una similitud de coseno en los textos. ¿Me he perdido algo?


El procedimiento matemático completo para la similitud de coseno se explica en estos tutoriales.

Supongamos que si desea calcular la similitud de coseno entre dos documentos, el primer paso será calcular los vectores tf-idf de los dos documentos. y luego encontrar el producto punto de estos dos vectores. Esos tutoriales te ayudarán :)



TF-IDF es solo una forma de medir la importancia de los tokens en el texto; es solo una forma muy común de convertir un documento en una lista de números (el término vector que proporciona un borde del ángulo del que obtienes el coseno).

Para calcular la similitud de coseno, necesita dos vectores de documento; los vectores representan cada término único con un índice, y el valor en ese índice es una medida de cuán importante es ese término para el documento y para el concepto general de similitud de documento en general.

Simplemente puede contar el número de veces que ocurrió cada término en el documento ( T erm F rencia), y usar ese resultado entero para el término puntaje en el vector, pero los resultados no serían muy buenos. Los términos extremadamente comunes (como "es", "y", y "el") harían que muchos documentos parecieran similares entre sí. (Esos ejemplos particulares pueden manejarse usando una lista de palabras de parada , pero otros términos comunes que no son lo suficientemente generales como para ser considerados como palabras de parada causan el mismo tipo de problema. En , la palabra "pregunta" podría caer en esta categoría. Si si estuvieras analizando recetas de cocina, probablemente te encontrarías con la palabra "huevo".)

TF-IDF ajusta la frecuencia del término en bruto teniendo en cuenta la frecuencia con la que cada término ocurre en general (el requisito del documento F ). La repetición del documento es generalmente el registro del número de documentos dividido por el número de documentos en los que aparece el término (imagen de Wikipedia):

Piense en el ''registro'' como un matiz menor que ayuda a que las cosas funcionen a largo plazo. Crece cuando su argumento crece, por lo que si el término es raro, el IDF será alto (muchos documentos divididos por muy pocos documentos) , si el término es común, el IDF será bajo (muchos documentos se dividen por muchos documentos ~ = 1).

Digamos que tiene 100 recetas, y todas menos una requieren huevos, ahora tiene tres documentos más que contienen la palabra "huevo", una vez en el primer documento, dos veces en el segundo documento y una vez en el tercer documento. El término frecuencia para "huevo" en cada documento es 1 o 2, y la frecuencia del documento es 99 (o, posiblemente, 102, si cuenta los documentos nuevos. Sigamos con 99).

El TF-IDF de ''huevo'' es:

1 * log (100/99) = 0.01 # document 1 2 * log (100/99) = 0.02 # document 2 1 * log (100/99) = 0.01 # document 3

Todos estos son números bastante pequeños; en contraste, veamos otra palabra que solo aparece en 9 de sus 100 recetas: "rúcula". Ocurre dos veces en el primer documento, tres veces en el segundo, y no ocurre en el tercer documento.

El TF-IDF para ''rúcula'' es:

1 * log (100/9) = 2.40 # document 1 2 * log (100/9) = 4.81 # document 2 0 * log (100/9) = 0 # document 3

''rúcula'' es realmente importante para el documento 2, al menos en comparación con ''huevo''. ¿A quién le importa cuántas veces se produce el huevo? ¡Todo contiene huevo! Estos vectores de términos son mucho más informativos que los recuentos simples, y darán como resultado que los documentos 1 y 2 estén mucho más juntos (con respecto al documento 3) de lo que serían si se usaran los recuentos de términos simples. En este caso, probablemente surgiría el mismo resultado (¡oye! Aquí solo tenemos dos términos), pero la diferencia sería menor.

El punto de partida aquí es que TF-IDF genera medidas más útiles de un término en un documento, por lo que no se enfoca en términos realmente comunes (palabras clave, ''huevo''), y pierde de vista los términos importantes (''rúcula'' ).


Tf-idf es una transformación que se aplica a los textos para obtener dos vectores de valores reales. Luego, puede obtener la similitud de coseno de cualquier par de vectores tomando su producto puntual y dividiéndolo por el producto de sus normas. Eso produce el coseno del ángulo entre los vectores.

Si d 2 y q son vectores tf-idf, entonces

donde θ es el ángulo entre los vectores. Como θ varía de 0 a 90 grados, cos θ varía de 1 a 0. θ solo puede variar de 0 a 90 grados, porque los vectores tf-idf no son negativos.

No hay una conexión particularmente profunda entre tf-idf y el modelo de similitud de coseno / espacio vectorial; tf-idf simplemente funciona bastante bien con matrices de términos de documentos. Sin embargo, tiene usos fuera de ese dominio y, en principio, podría sustituir otra transformación en un VSM.

(Fórmula tomada de la Wikipedia , de ahí el d 2. )


Tf-idf solo se usa para encontrar los vectores de los documentos basados ​​en tf - Frecuencia de término - que se usa para determinar cuántas veces aparece el término en el documento y la frecuencia de documento inversa - lo que da la medida de cuántas veces aparece el término En toda la colección.

Luego puedes encontrar la similitud del coseno entre los documentos.