Wie können Sie die Kosinusähnlichkeit zwischen zwei Sätzen ohne externe Bibliotheken berechnen?

DDD
Freigeben: 2024-11-01 13:14:02
Original
753 Leute haben es durchsucht

How Can You Calculate Cosine Similarity Between Two Sentences Without External Libraries?

Berechnung der Kosinusähnlichkeit zwischen zwei Satzzeichenfolgen ohne externe Bibliotheken

Im Kontext der Verarbeitung natürlicher Sprache ist die Berechnung der Kosinusähnlichkeit von wesentlicher Bedeutung für die Messung der Textähnlichkeit zwischen Dokumenten. Während externe Bibliotheken wie tf-idf-cosine diese Aufgabe erleichtern können, ist es auch möglich, die Kosinusähnlichkeit manuell zu berechnen, ohne auf solche Abhängigkeiten angewiesen zu sein.

Kosinusähnlichkeitsübersicht

Kosinus Ähnlichkeit quantifiziert den Winkel zwischen zwei Vektoren, die die Texte darstellen. Eine höhere Kosinusähnlichkeit weist auf einen kleineren Winkel hin, was eine größere Ähnlichkeit zwischen den Texten impliziert. Sie wird anhand des Skalarprodukts der normalisierten Vektoren dividiert durch ihre Größen berechnet.

Kosinusähnlichkeit manuell implementieren

Um die Kosinusähnlichkeit manuell zu berechnen, definieren wir die folgenden Schritte:

  1. Tokenisierung: Teilen Sie die Sätze in einzelne Wörter auf.
  2. Vektorisierung: Erstellen Sie für jedes Wort in jedem Satz einen Zähler, der darstellt seine Häufigkeit (Termhäufigkeit).
  3. Normalisierung: Normalisieren Sie die Vektoren, indem Sie jedes Element durch die Quadratwurzel der Summe der Quadrate seiner Elemente dividieren (L2-Norm).
  4. Kosinusberechnung: Berechnen Sie das Skalarprodukt der normalisierten Vektoren und dividieren Sie es durch ihre Größen.

Code-Implementierung

Unten ist eine Python-Implementierung der manuellen Kosinus-Ähnlichkeitsberechnung:

<code class="python">import math
import re
from collections import Counter

WORD = re.compile(r"\w+")

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])
    
    sum1 = sum([vec1[x] ** 2 for x in vec1])
    sum2 = sum([vec2[x] ** 2 for x in vec2])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)
    
    if not denominator:
        return 0.0
    else:
        return numerator / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)

text1 = "This is a foo bar sentence ."
text2 = "This sentence is similar to a foo bar sentence ."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>
Nach dem Login kopieren

Ergebnis

Dieser Code wird wie folgt ausgeführt:

Cosine: 0.861640436855
Nach dem Login kopieren

Dieser Wert gibt an eine hohe Kosinus-Ähnlichkeit zwischen den beiden Sätzen, was bestätigt, dass sie textlich ähnlich sind.

Weitere Überlegungen

Dieser manuelle Ansatz bietet zwar eine grundlegende Implementierung, kann jedoch durch erweitert werden :

  • Einbindung von Stemming oder Lemmatisierung für eine verbesserte Wortnormalisierung.
  • Implementierung eines ausgefeilteren Tokenisierungsschemas.
  • Hinzufügen von Gewichtungen wie TF-IDF für genauere Ähnlichkeitsberechnungen.

Das obige ist der detaillierte Inhalt vonWie können Sie die Kosinusähnlichkeit zwischen zwei Sätzen ohne externe Bibliotheken berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!