Heim > Backend-Entwicklung > Python-Tutorial > Wie berechnet man die Ähnlichkeit zwischen Textdokumenten mithilfe von TF-IDF und Kosinusähnlichkeit?

Wie berechnet man die Ähnlichkeit zwischen Textdokumenten mithilfe von TF-IDF und Kosinusähnlichkeit?

Mary-Kate Olsen
Freigeben: 2024-10-23 06:47:02
Original
433 Leute haben es durchsucht

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

So berechnen Sie die Ähnlichkeit von Textdokumenten

Berechnen paarweiser Ähnlichkeiten

Die gebräuchlichste Methode zur Bestimmung der Ähnlichkeit zwischen zwei Textdokumenten ist deren Konvertierung TF-IDF-Vektoren (Term Frequency-Inverse Document Frequency) und verwenden Sie dann die Kosinusähnlichkeit, um sie zu vergleichen. Dieser Ansatz wird in Lehrbüchern zum Informationsabruf behandelt und in „Einführung in den Informationsabruf“ ausführlich beschrieben.

Python-Bibliotheken wie Gensim und scikit-learn bieten Implementierungen von TF-IDF-Konvertierungen und Kosinusähnlichkeitsberechnungen. Mit scikit-learn führt das folgende Code-Snippet Kosinus-Ähnlichkeitsberechnungen durch:

<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>
Nach dem Login kopieren

Alternativ für Klartextdokumente:

<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>
Nach dem Login kopieren

Interpretation der Ergebnisse

pairwise_similarity ist eine dünn besetzte Matrix, in der jede Zeile und Spalte ein Dokument im Korpus darstellt. Das Konvertieren der Sparse-Matrix in ein NumPy-Array zeigt, dass jede Zelle die Ähnlichkeit zwischen den beiden entsprechenden Dokumenten darstellt.

Um beispielsweise das Dokument zu ermitteln, das „Die Scikit-Learn-Dokumente sind Orange und Blau“ am ähnlichsten ist, suchen Sie seinen Index im Korpus und wenden Sie dann np.nanargmax auf die entsprechende Zeile an, nachdem Sie die Diagonale (die Selbstähnlichkeit darstellt) mit np.fill_diagonal() maskiert haben:

<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>
Nach dem Login kopieren

Beachten Sie, dass bei großen Datensätzen die Verwendung von a Eine spärliche Matrix spart Speicher. Alternativ können Sie auch „pairwise_similarity.shape“ verwenden, um Selbstähnlichkeit und argmax() direkt zu maskieren:

<code class="python">n, _ = pairwise_similarity.shape                                                                                                                                                                                                                         
pairwise_similarity[np.arange(n), np.arange(n)] = -1.0
pairwise_similarity[input_idx].argmax()  </code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie berechnet man die Ähnlichkeit zwischen Textdokumenten mithilfe von TF-IDF und Kosinusähnlichkeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage