Cosine similarity et tf-idf

je suis déconcerté par le commentaire suivant au sujet de TF-IDF et Cosinus Similar.

j'étais en train de lire sur les deux et puis sur wiki sous Cosine Similarity je trouve cette phrase "en cas de recherche d'information, la similarité cosine de deux documents va varier de 0 à 1, puisque le terme fréquences (TF-idf pondérations) ne peut pas être négatif. L'angle entre les vecteurs de fréquence à deux termes ne peut pas être supérieur à 90."

maintenant je suis demander....ne sont-ils pas 2 choses différentes?

est-ce que tf-idf est déjà dans la similarité cosinus? Si oui, alors que diable - Je ne peux voir les produits de point intérieur et les longueurs euclidienne.

j'ai pensé tf-idf a quelque chose que vous pourriez faire avant exécution de similarité cosinus sur les textes. Ai-je raté quelque chose?

26
demandé sur smci 2011-06-06 21:36:21

5 réponses

Tf-idf est une transformation à appliquer aux textes d'obtenir deux valeurs réelles des vecteurs. Vous pouvez alors obtenir la similitude cosinus de n'importe quelle paire de vecteurs en prenant leur produit de point et en divisant cela par le produit de leurs normes. Qui donne le cosinus de l'angle entre les vecteurs.

Si d2 et q existe-tf-idf vecteurs, puis

enter image description here

θ est l'angle entre l' vecteur. θ varie de 0 à 90 degrés, cos θ varie de 1 à 0. θ ne varie que de 0 à 90 degrés, parce que les vecteurs TF-idf sont non négatifs.

il n'y a pas de lien particulièrement étroit entre TF-idf et le modèle cosine similarity/vector space; tf-idf ne fonctionne que très bien avec les matrices de terme de document. Il a des utilisations en dehors de ce domaine, cependant, et en principe, vous pouvez substituer un autre transformation en VSM.

(formule tirée de la Wikipédia, d'où le d2.)

30
répondu Fred Foo 2014-11-03 17:47:00

TF-IDF est juste un moyen de mesurer l'importance des jetons dans le texte; c'est juste une façon très courante de transformer un document en une liste de Nombres (Le Vecteur De terme qui fournit un bord de l'angle dont vous obtenez le cosinus).

pour calculer la similitude cosinus, vous avez besoin de deux vecteurs de document; les vecteurs représentent chaque terme unique avec un index, et la valeur à cet index est une certaine mesure de l'importance de ce terme est au document et au concept général de document similarité en général.

Vous pouvez simplement compter le nombre de fois que chaque terme s'est produite dans le document ( T erm F requency), et utilisez ce résultat entier pour le score du terme dans le vecteur, mais les résultats ne seraient pas très bons. Des termes extrêmement courants (tels que "Est", "et", et "le") feraient apparaître de nombreux documents similaires. (Ces exemples particuliers peuvent être traités en utilisant un liste de mots vides, mais d'autres termes communs ce n'est pas assez général pour être considéré comme un mot d'ordre. Sur Stackoverflow, le mot "question" pourrait tomber dans cette catégorie. Si tu analysais des recettes de cuisine, tu aurais probablement des problèmes avec le mot "œuf".)

TF-IDF ajuste la fréquence des termes bruts en tenant compte de la fréquence de chaque terme en général (la D ocument Ffréquence). Inverse D ocument Ffréquence est généralement le log du nombre de documents, divisé par le nombre de documents, le terme se produit (image Wikipedia):

IDF, credit to wikipedia

pensez au 'journal' comme à une nuance mineure qui aide les choses à s'arranger à long terme -- il croît quand son argument croît, donc si le terme est rare, L'IDF sera élevé (beaucoup de documents divisés par Très peu de documents), si le terme est commun, L'IDF sera faible (beaucoup de documents divisés par beaucoup de documents). documents ~= 1).

dites que vous avez 100 recettes, et que toutes sauf une exigent des oeufs, maintenant vous avez trois documents de plus qui contiennent tous le mot "oeuf", une fois dans le premier document, deux fois dans le deuxième document et une fois dans le troisième document. Le terme fréquence pour " egg " dans chaque document est 1 ou 2, et la fréquence de document est 99 (ou, sans doute, 102, si vous comptez les nouveaux documents. Restons-en au 99).

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

ce sont tous des assez petits nombres; en revanche, regardons un autre mot qui ne se produit que dans 9 de votre corpus de 100 recettes: "roquette". Il se produit deux fois dans le premier doc, trois fois dans la seconde, et ne se produit pas dans le troisième document.

Le TF-IDF pour la "roquette" est:

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

la "roquette" est vraiment important pour le document 2, au moins comparé à "egg". Qui se soucie combien de fois l'œuf se produit? Tout contient des œufs! Ces vecteurs sont beaucoup plus il s'ensuit que les documents 1 et 2 sont beaucoup plus rapprochés (en ce qui concerne le document 3) qu'ils ne le seraient si l'on utilisait des termes simples. Dans ce cas, le même résultat se produirait probablement (Hé! nous n'avons ici que deux termes), mais la différence serait moindre.

le fait est que TF-IDF génère des mesures plus utiles d'un terme dans un document, de sorte que vous ne vous concentrez pas sur les Termes vraiment communs (mot d'arrêt, "oeuf"), et perdre de vue le les termes importants ('roquette').

32
répondu rcreswick 2016-11-30 17:20:29

la procédure mathématique complète pour la similarité des cosinus est expliquée dans ces tutoriels

supposons que si vous voulez calculer la similitude cosinus entre deux documents, la première étape sera de calculer les vecteurs TF-idf des deux documents. et puis de trouver le produit scalaire de ces deux vecteurs. Ces tutoriels vont vous aider :)

6
répondu Gunjan 2015-01-20 11:59:16

la pondération TF / idf comporte certains cas où elle échoue et génère une erreur de code NaN lors du calcul. Il est très important de lire ce: http://www.p-value.info/2013/02/when-tfidf-and-cosine-similarity-fail.html

-1
répondu Jack Twain 2013-06-07 22:43:18

TF-idf est juste utilisé pour trouver les vecteurs des documents basés sur la fréquence du terme tf - qui est utilisé pour trouver combien de fois le terme apparaît dans le document et inverser la fréquence du document - qui donne la mesure de combien de fois le terme apparaît dans l'ensemble de la collection.

alors vous pouvez trouver la similitude cosinus entre les documents.

-1
répondu Abhinav Bhatt 2016-06-20 17:18:49