Textähnlichkeit mit TF-IDF und Kosinusähnlichkeit messen
Die Bestimmung der Ähnlichkeit zwischen zwei Textdokumenten ist eine entscheidende Aufgabe beim Text Mining und bei der Informationsgewinnung Abruf. Ein beliebter Ansatz besteht darin, TF-IDF (Term Frequency-Inverse Document Frequency) und Kosinusähnlichkeit zu verwenden.
TF-IDF weist eine Gewichtung zu zu jedem Wort in einem Dokument basierend auf seiner Häufigkeit in diesem Dokument und seiner Seltenheit im gesamten Dokumentkorpus. Dokumente mit ähnlichen Wortmustern teilen sich höhere TF-IDF-Vektoren.
Kosinus-Ähnlichkeit misst den Winkel zwischen zwei Vektoren und liefert einen Wert zwischen 0 (keine Ähnlichkeit) und 1 (perfekte Ähnlichkeit). In unserem Fall bilden die TF-IDF-Vektoren der beiden Dokumente diese Vektoren, und die Kosinusähnlichkeit quantifiziert ihren Winkel.
Python-Implementierung
In Python wird mit dem scikit-learn und Gensim-Pakete ist die Berechnung paarweiser Ähnlichkeiten unkompliziert:
<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>
Alternativ, wenn die Dokumente bereits Zeichenfolgen sind, verwenden Sie:
<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>
Ergebnisse interpretieren
pairwise_similarity ist eine dünn besetzte Matrix, die die Ähnlichkeit zwischen jedem Dokumentpaar darstellt. Um das Dokument zu finden, das einem bestimmten Dokument am ähnlichsten ist, maskieren Sie die Ähnlichkeit des Dokuments mit sich selbst (setzen Sie es auf NaN) und ermitteln Sie den Maximalwert in seiner Zeile mit 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>
Andere Überlegungen
Bei großen Korpora und Vokabularien ist die Verwendung einer Sparse-Matrix effizienter als die Konvertierung in NumPy-Arrays.
Durch Anpassen der Parameter in TfidfVectorizer, z. B. min_df für das Mindestdokument Häufigkeit kann die TF-IDF-Berechnung an spezifische Anforderungen angepasst werden.
Zusätzliche Ressourcen
Das obige ist der detaillierte Inhalt vonWie misst man Textähnlichkeit mithilfe von TF-IDF und Kosinusähnlichkeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!