So funktioniert die Kosinusähnlichkeit in Python

Die Kosinus-Ähnlichkeit hat mehrere Anwendungen in der realen Welt, und durch die Verwendung von Embeddings-Vektoren können wir die Bedeutungen der realen Welt programmgesteuert vergleichen. Python ist eine der beliebtesten Sprachen für Data-Science und bietet verschiedene Bibliotheken, um die Kosinus-Ähnlichkeit einfach zu berechnen. In diesem Artikel werden wir diskutieren, wie Sie die Kosinus-Ähnlichkeit in Python mit Hilfe der Scikit-Learn und NumPy Bibliotheken implementieren können. 

Was ist Kosinus-Ähnlichkeit?

Kosinus-Ähnlichkeit ist eine Ähnlichkeitsmessung zwischen zwei von Null verschiedenen Vektoren in einem n-dimensionalen Raum. Sie wird in verschiedenen Anwendungen wie Textanalyse und Empfehlungssystemen verwendet, um zu bestimmen, wie ähnlich zwei Vektoren in Bezug auf ihre Richtung im Vektorraum sind.

Kosinus-Ähnlichkeit-Formel

Die Kosinus-Ähnlichkeit zwischen zwei Vektoren, A und B, wird mit folgender Formel berechnet:

Kosinus-Ähnlichkeit (A, B) = (A · B) / (||A|| * ||B||)

In dieser Formel steht A · B für das Skalarprodukt der Vektoren A und B. Dies wird berechnet, indem die entsprechenden Komponenten der beiden Vektoren multipliziert und die Ergebnisse aufaddiert werden. ||A|| steht für die euklidische Norm (Größe) des Vektors A, die als die Quadratwurzel der Summe der Quadrate seiner Komponenten berechnet wird. Es wird berechnet als ||A|| = √(A₁² + A₂² + … + Aₙ²). ||B|| steht für die euklidische Norm (Größe) des Vektors B, die auf die gleiche Weise wie ||A|| berechnet wird.

Wie man Cosine Similarity berechnet

Um die Cosine Similarity zu berechnen, führen Sie zuerst die Berechnung für das Skalarprodukt der beiden Vektoren durch. Teilen Sie es dann durch das Produkt ihrer Größen. Der resultierende Wert wird im Bereich von -1 bis 1 liegen, wobei:

  • Wenn die Cosine Similarity 1 ist, bedeutet dies, dass die Vektoren die gleiche Richtung haben und vollkommen ähnlich sind.
  • Wenn die Cosine Similarity 0 ist, bedeutet dies, dass die Vektoren senkrecht zueinander stehen und keine Ähnlichkeit haben.
  • Wenn die Cosine Similarity -1 ist, bedeutet dies, dass die Vektoren entgegengesetzte Richtungen haben und vollkommen unähnlich sind.

Bei der Textanalyse wird die Cosine Similarity verwendet, um die Ähnlichkeit zwischen Dokumentenvektoren zu messen, wobei jedes Dokument als Vektor in einem hochdimensionalen Raum dargestellt wird, wobei jede Dimension einem Term oder Wort im Korpus entspricht. Durch Berechnung der Cosine Similarity zwischen Dokumentenvektoren können Sie bestimmen, wie ähnlich oder unähnlich zwei Dokumente zueinander sind.

Bibliotheken zur Berechnung der Cosine Similarity

  • NumPy: Ideal für numerische Operationen und ist auf Geschwindigkeit optimiert.
  • scikit-learn: Bietet verschiedene maschinelle Lernalgorithmen und enthält eine Methode für Kosinusähnlichkeit in seinem Metriken-Paket.

Die folgenden Beispiele zeigen, wie Kosinusähnlichkeit mithilfe von Python berechnet werden kann. Wir werden unsere zwei bereits bekannten Buchrezensionsvektoren [5,3,4] und [4,2,4] verwenden.

Reiner Python

Während wir dies zuvor per Hand berechnet haben, kann natürlich ein Computer das tun! Hier ist, wie Sie Kosinusähnlichkeit mithilfe von Python ohne zusätzliche Bibliotheken berechnen können:

Python

 

A = [5, 3, 4]

B = [4, 2, 4]

# Calculate dot product

dot_product = sum(a*b for a, b in zip(A, B))

# Calculate the magnitude of each vector

magnitude_A = sum(a*a for a in A)**0.5

magnitude_B = sum(b*b for b in B)**0.5

# Compute cosine similarity

cosine_similarity = dot_product / (magnitude_A * magnitude_B)

print(f"Cosine Similarity using standard Python: {cosine_similarity}")

NumPy

Einbettungsvektoren haben typischerweise viele Dimensionen — Hunderte, Tausende, sogar Millionen oder mehr! Mit NumPy können Sie Kosinusähnlichkeit mithilfe von Array-Operationen berechnen, die sehr optimiert sind.

Python

 

import numpy as np

A = np.array([5, 3, 4])

B = np.array([4, 2, 4])

dot_product = np.dot(A, B)

magnitude_A = np.linalg.norm(A)

magnitude_B = np.linalg.norm(B)

cosine_similarity = dot_product / (magnitude_A * magnitude_B)

print(f"Cosine Similarity using NumPy: {cosine_similarity}")

Scikit-Learn

Die cosine_similarity-Funktion von scikit-learn ermöglicht es, Kosinusähnlichkeitsoperationen noch einfacher und hochoptimiert zu berechnen:

Python

 

from sklearn.metrics.pairwise import cosine_similarity

A = np.array([[5, 3, 4]])

B = np.array([[4, 2, 4]])

cosine_similarity_result = cosine_similarity(A, B)

print(f"Cosine Similarity using scikit-learn: {cosine_similarity_result[0][0]}")

Tipps zur Optimierung von Kosinusähnlichkeitsberechnungen in Python

Wenn Sie Python verwenden, um Kosinusähnlichkeit direkt zu berechnen, sind einige Dinge zu beachten:

  • Verwenden Sie optimierte Bibliotheken wie NumPy oder scikit-learn:Diese Bibliotheken sind für Leistung optimiert und sind im Allgemeinen schneller als reines Python.
  • Verwenden Sie Numba:Numba ist ein Open-Source-JIT-Compiler für Python und NumPy-Code, der speziell zur Optimierung von wissenschaftlichen Berechnungsfunktionen entwickelt wurde.
  • Verwenden von GPUs: Wenn Sie Zugang zu einer GPU haben, verwenden Sie Python-Bibliotheken wie Tensorflow, die für die Verwendung auf einer GPU optimiert wurden.
  • Parallelisierung von Berechnungen: Wenn Sie die Hardware-Kapazitäten haben, sollten Sie die Parallelisierung Ihrer Berechnungen in Betracht ziehen, um sie zu beschleunigen.

Suche nach großen Vektorzahlen mit Vektorsuche in AstraDB

Wenn Sie große Mengen an Vektoren durchsuchen müssen, könnte es effizienter und skalierbarer sein, eine Vektor-Datenbank wie die Vektorsuche-Funktion von DataStax Astra zu verwenden. Die Vektorsuche in Astra DB bietet eine leistungsstarke Plattform, um Vektorsuchen mit integrierten Kosinusähnlichkeitsberechnungen durchzuführen, damit Sie mehr Erkenntnisse aus Ihren Daten erhalten können.

Source:
https://dzone.com/articles/how-to-implement-cosine-similarity-in-python