Je suis confus par le commentaire suivant sur TF-IDF et Similitude cosinus.
Je lisais les deux, puis sur le wiki sous Similitude cosinusique, je trouve cette phrase "En cas de recherche d'informations, la similitude cosinusoïdale de deux documents variera de 0 à 1, car le terme fréquences (poids tf-idf) ne peut pas être négatif. L'angle entre deux vecteurs de fréquence de terme ne peut pas être supérieur à 90. "
Maintenant je me demande .... ne sont-ils pas 2 choses différentes?
Tf-idf est-il déjà dans la similitude cosinus? Si oui, alors que diable - je ne peux voir que les produits scalaires intérieurs et les longueurs euclidiennes.
Je pensais que tf-idf était quelque chose que vous pouviez faire avant d'exécuter la similitude cosinus sur les textes. Ai-je oublié quelque chose?
Tf-idf est une transformation que vous appliquez aux textes pour obtenir deux vecteurs à valeur réelle. Vous pouvez ensuite obtenir la similitude en cosinus de n'importe quelle paire de vecteurs en prenant leur produit scalaire et en le divisant par le produit de leurs normes. Cela donne le cosinus de l'angle entre les vecteurs.
Si d 2 et q sont des vecteurs tf-idf, alors
où θ est l'angle entre les vecteurs. Comme θ varie de 0 à 90 degrés, cos θ varie de 1 à 0. θ peut ne va que de 0 à 90 degrés, car les vecteurs tf-idf ne sont pas négatifs.
Il n'y a pas de lien particulièrement profond entre tf-idf et le modèle de similitude cosinus/espace vectoriel; tf-idf fonctionne très bien avec les matrices de termes de document. Cependant, il a des utilisations en dehors de ce domaine, et en principe, vous pouvez remplacer une autre transformation dans un VSM.
(Formule tirée du Wikipedia , d'où le d 2.)
TF-IDF n'est qu'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 terme vecteur qui fournit un bord de l'angle dont vous obtenez le cosinus).
Pour calculer la similitude du cosinus, vous avez besoin de deux vecteurs de document; les vecteurs représentent chaque terme unique avec un indice, et la valeur à cet indice est une mesure de l'importance de ce terme pour le document et pour le concept général de similitude de document en général.
Vous pouvez simplement compter le nombre de fois que chaque terme s'est produit dans le document ( [~ # ~] t [~ # ~] erm [~ # ~] f [~ # ~] requency), et utilisez ce résultat entier pour le terme score 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 courants qui ne sont pas assez généraux pour être considérés comme un mot vident provoquent le même type de problème. Sur Stackoverflow, le mot "question" peut Si vous analysez des recettes de cuisine, vous rencontrerez 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 (le [~ # ~] d [~ # ~] ocument [~ # ~] f [~ # ~] exigence). [~ # ~] i [~ # ~] inverse [~ # ~] d [~ # ~] ocument [~ # ~] f [~ # ~] la réquence est généralement le journal du nombre de documents divisés par le nombre de documents dans lesquels le terme apparaît (image de Wikipedia):
Considérez le `` journal '' comme une nuance mineure qui aide les choses à fonctionner à long terme - il augmente lorsque l'argument se développe, 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, Tsahal sera faible (beaucoup de documents divisés par beaucoup de documents ~ = 1).
Supposons que vous ayez 100 recettes et que toutes sauf une nécessitent des œufs, vous avez maintenant trois autres documents qui contiennent tous le mot "œuf", une fois dans le premier document, deux fois dans le deuxième document et une fois dans le troisième document. La fréquence du terme pour "Egg" dans chaque document est 1 ou 2, et la fréquence du document est 99 (ou, sans doute, 102, si vous comptez les nouveaux documents. Restons avec 99).
Le TF-IDF de 'Egg' est:
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 de très petits nombres; en revanche, regardons un autre mot qui n'apparaît que dans 9 de vos 100 corpus de recettes: "roquette". Il se produit deux fois dans le premier document, trois fois dans le second et ne se produit pas dans le troisième document.
Le TF-IDF pour '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
'roquette' est vraiment important pour le document 2, au moins par rapport à 'Egg'. Qui se soucie combien de fois l'oeuf se produit? Tout contient de l'oeuf! Ces vecteurs de termes sont beaucoup plus informatifs que les dénombrements simples, et ils se traduiront par des documents 1 et 2 beaucoup plus proches (par rapport au document 3) qu'ils ne le seraient si des dénombrements de termes simples étaient utilisés. Dans ce cas, le même résultat se produirait probablement (hé! Nous n'avons que deux termes ici), mais la différence serait plus petite.
Le retentissement ici 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 des termes vraiment courants (mots vides, 'Egg'), et perdez de vue les termes importants ('roquette' ).
La procédure mathématique complète pour la similitude cosinus est expliquée dans ces tutoriels
Supposons que si vous souhaitez calculer la similitude cosinus entre deux documents, la première étape sera de calculer les vecteurs tf-idf des deux documents. puis trouver le produit scalaire de ces deux vecteurs. Ces tutoriels vous aideront :)