Maison  >  Article  >  développement back-end  >  Comment mesurer la similarité du texte à l'aide de TF-IDF et de la similarité cosinus ?

Comment mesurer la similarité du texte à l'aide de TF-IDF et de la similarité cosinus ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 06:53:30329parcourir

How to Measure Text Similarity using TF-IDF and Cosine Similarity?

Mesurer la similarité textuelle avec TF-IDF et la similarité cosinus

Déterminer la similarité entre deux documents texte est une tâche cruciale dans l'exploration de texte et l'information récupération. Une approche populaire consiste à utiliser la TF-IDF (Term Frequency-Inverse Document Frequency) et la similitude cosinus.

TF-IDF attribue un poids à chaque mot d'un document en fonction de sa fréquence dans ce document et de sa rareté dans le corpus de documents. Les documents avec des modèles de mots similaires partageront des vecteurs TF-IDF plus élevés.

La similarité cosinus mesure l'angle entre deux vecteurs, fournissant une valeur comprise entre 0 (pas de similarité) et 1 (similitude parfaite). Dans notre cas, les vecteurs TF-IDF des deux documents forment ces vecteurs, et la similarité cosinus quantifie leur angle.

Implémentation Python

En Python, en utilisant le scikit-learn et Gensim, le calcul des similitudes par paires est simple :

<code class="python">from sklearn.feature_extraction.text import TfidfVectorizer

documents = [open(f).read() for f in text_files]
tfidf = TfidfVectorizer().fit_transform(documents)
pairwise_similarity = tfidf * tfidf.T</code>

Alternativement, si les documents sont déjà des chaînes, utilisez :

<code class="python">corpus = ["I'd like an apple", "An apple a day keeps the doctor away", "..."]
vect = TfidfVectorizer(min_df=1, stop_words="english")
tfidf = vect.fit_transform(corpus)
pairwise_similarity = tfidf * tfidf.T</code>

Interprétation des résultats

pairwise_similarity est une matrice clairsemée représentant la similarité entre chaque paire de documents. Pour trouver le document le plus similaire à un document spécifique, masquez la similarité du document avec lui-même (définissez-le sur NaN) et recherchez la valeur maximale dans sa ligne en utilisant np.nanargmax() :

<code class="python">import numpy as np

arr = pairwise_similarity.toarray()
np.fill_diagonal(arr, np.nan)
input_doc = "The scikit-learn docs are Orange and Blue"
input_idx = corpus.index(input_doc)
result_idx = np.nanargmax(arr[input_idx])
similar_doc = corpus[result_idx]</code>

Autres considérations

Pour les corpus et vocabulaires volumineux, l'utilisation d'une matrice clairsemée est plus efficace que la conversion en tableaux NumPy.

En ajustant les paramètres dans TfidfVectorizer, tels que min_df pour un document minimum fréquence, le calcul TF-IDF peut être personnalisé pour répondre à des exigences spécifiques.

Ressources supplémentaires

  • [Introduction à la recherche d'informations](http://infolab .stanford.edu/~backrub/classes/2002/cs276/handouts/04-tfidf.pdf)
  • [Calcul des similarités par paires avec Gensim](https://stackoverflow.com/questions/23752770/computing- similarités-par paires-avec-gensim)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn