Maison > développement back-end > Tutoriel Python > Comment calculer la similarité entre des documents texte à l'aide de TF-IDF et de la similarité cosinus ?

Comment calculer la similarité entre des documents texte à l'aide de TF-IDF et de la similarité cosinus ?

Mary-Kate Olsen
Libérer: 2024-10-23 06:47:02
original
433 Les gens l'ont consulté

How to Calculate Similarity Between Text Documents Using TF-IDF and Cosine Similarity?

Comment calculer la similarité d'un document texte

Calcul des similarités par paires

La méthode la plus courante pour déterminer la similarité entre deux documents texte consiste à les convertir en TF-IDF (Term Frequency-Inverse Document Frequency), puis utilisez la similarité cosinus pour les comparer. Cette approche est abordée dans les manuels sur la recherche d'informations et détaillée dans « Introduction à la recherche d'informations ».

Les bibliothèques Python comme Gensim et scikit-learn fournissent des implémentations de conversions TF-IDF et de calculs de similarité cosinus. Avec scikit-learn, l'extrait de code suivant effectue des calculs de similarité cosinus :

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

# Extract documents from text files
documents = [open(f).read() for f in text_files]

# Create a TF-IDF vectorizer
tfidf = TfidfVectorizer().fit_transform(documents)

# Calculate pairwise cosine similarity
pairwise_similarity = tfidf * tfidf.T</code>
Copier après la connexion

Alternativement, pour les documents en texte brut :

<code class="python">corpus = ["I'd like an apple", 
           "An apple a day keeps the doctor away", 
           "Never compare an apple to an orange", 
           "I prefer scikit-learn to Orange", 
           "The scikit-learn docs are Orange and Blue"]                                                                                                                                                                                                   

# Create a TF-IDF vectorizer with minimum frequency and exclusion of stop words
vect = TfidfVectorizer(min_df=1, stop_words="english")                                                                                                                                                                                                   

# Apply TF-IDF transformation
tfidf = vect.fit_transform(corpus)                                                                                                                                                                                                                       

# Calculate pairwise cosine similarity
pairwise_similarity = tfidf * tfidf.T </code>
Copier après la connexion

Interprétation des résultats

pairwise_similarity est une matrice clairsemée où chaque ligne et colonne représente un document dans le corpus. La conversion de la matrice clairsemée en tableau NumPy révèle que chaque cellule représente la similitude entre les deux documents correspondants.

Par exemple, pour déterminer le document le plus similaire à « Les documents scikit-learn sont Orange et Bleu », localisez son index dans le corpus puis appliquez np.nanargmax à la ligne correspondante après avoir masqué la diagonale (représentant l'autosimilarité) avec np.fill_diagonal() :

<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])                                                                                                                                                                                                                
print(corpus[result_idx])</code>
Copier après la connexion

Notez que pour les grands ensembles de données, en utilisant un la matrice clairsemée conserve la mémoire. Vous pouvez également envisager d'utiliser pairwise_similarity.shape pour masquer directement l'autosimilarité et argmax() :

<code class="python">n, _ = pairwise_similarity.shape                                                                                                                                                                                                                         
pairwise_similarity[np.arange(n), np.arange(n)] = -1.0
pairwise_similarity[input_idx].argmax()  </code>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal