Heim >Backend-Entwicklung >Python-Tutorial >Wie berechnet man die Ähnlichkeit zwischen Textdokumenten mithilfe von TF-IDF und Kosinusähnlichkeit?
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>
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>
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>
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>
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!