Maison > Article > développement back-end > Comment mesurer la similarité du texte à l'aide de TF-IDF et de la similarité cosinus ?
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
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!