Verstehen Sie die Grundlagen der cosine similarity stechnik, die in verschiedenen Bereichen und Domänen des maschinellen Lernens verwendet wird.
Eine spezielle Projektanforderung erforderte von mir, Methoden zur Quantifizierung der Ähnlichkeit zwischen zwei oder mehr Objekten zu erforschen.
Die Objekte waren zwei Bilder von Menschen, die Posen ausführten. Ziel war es, zu quantifizieren, wie ähnlich sich die Posen auf den Bildern waren.
Der Versuch, dieses Problem zu lösen, führte mich in die Welt der Mathematik, und ich bin kein Fan der Mathematik.
Ich bin auf eine Ähnlichkeitsmessung namens cosine similarity gestoßen. cosine similarity ist eine Messung, die die Ähnlichkeit zwischen zwei oder mehr Vektoren quantifiziert. Die cosine similarity ist der Kosinus des Winkels zwischen Vektoren. Die Vektoren sind normalerweise ungleich Null und befinden sich innerhalb eines inneren Produktraums.
Ich war fasziniert von der Einfachheit dieser Implementierung und, was noch wichtiger ist, sie war leicht zu verstehen.
In diesem Artikel erkläre ich die Grundlagen der cosine similarity. Ich zeige außerdem mehrere Anwendungen und Bereiche, in denen die cosine similarity genutzt wird, und zum Schluss gibt es einen Codeausschnitt des Algorithmus in Swift.
Cosine similarity erklärt
cosine similarity wird mathematisch als Division zwischen dem Skalarprodukt von Vektoren und dem Produkt der euklidischen Normen oder der Größe jedes Vektors beschrieben.
cosine similarity ist eine häufig verwendete Technik zur Ähnlichkeitsmessung, die in Bibliotheken und Tools wie Matlab , SciKit-Learn , TensorFlow usw. zu finden ist.
Nachfolgend finden Sie eine schnelle Implementierung der cosine similarity slogik in Swift .
Die cosine similarity ist ein Wert, der durch einen eingeschränkten Bereich von 0 bis 1 begrenzt ist.
Die Ähnlichkeitsmessung ist ein Maß für den Kosinus des Winkels zwischen den beiden von Null verschiedenen Vektoren A und B.
Angenommen, der Winkel zwischen den beiden Vektoren beträgt 90 Grad. In diesem Fall hat die cosine similarity den Wert 0. Dies bedeutet, dass die beiden Vektoren orthogonal oder senkrecht zueinander sind.
Je näher der Cosinus-Ähnlichkeitswert an 1 heranrückt, desto kleiner wird der Winkel zwischen den beiden Vektoren A und B. Die folgenden Bilder veranschaulichen dies deutlicher.
Anwendungen der cosine similarity
Die cosine similarity hat ihren Platz in zahlreichen Anwendungen und Algorithmen.
Von der Welt der Computervision bis zum Data Mining kann der Vergleich einer Ähnlichkeitsmessung zwischen zwei Vektoren, die in einem höherdimensionalen Raum dargestellt sind, auf viele Arten verwendet werden.
Lassen Sie uns ein paar Szenarien und Anwendungen durchgehen, bei denen das cosine similarity smaß genutzt wird.
1. Dokumentähnlichkeit
Ein Szenario, bei dem die Ähnlichkeit zwischen Dokumentenpaaren ermittelt werden muss, ist ein guter Anwendungsfall für die Nutzung der cosine similarity als Quantifizierung der Ähnlichkeitsmessung zwischen zwei Objekten.
Um die Ähnlichkeit zwischen zwei Dokumenten zu quantifizieren, müssen Sie die Wörter oder Phrasen im Dokument oder Satz in eine vektorisierte Darstellungsform umwandeln .
Die Vektordarstellungen der Dokumente können dann innerhalb der cosine similarity formel verwendet werden, um eine Quantifizierung der Ähnlichkeit zu erhalten.
Im oben beschriebenen Szenario bedeutet eine cosine similarity von 1, dass die beiden Dokumente genau gleich sind, und eine cosine similarity von 0 würde zu der Schlussfolgerung führen, dass zwischen den beiden Dokumenten keine Ähnlichkeiten bestehen.
Beispiel für cosine similarity
- Dokument 1: Deep Learning kann schwierig sein
- Dokument 2: Deep Learning kann einfach sein
Schritt 1: Erhalten Sie eine vektorisierte Darstellung der Texte.
- Dokument 1: [1, 1, 1, 1, 1, 0] nennen wir dies A
- Dokument 2: [1, 1, 1, 1, 0, 1] nennen wir dies B
Oben haben wir zwei Vektoren (A und B), die sich in einem sechsdimensionalen Vektorraum befinden.
Schritt 2: Finden Sie die cosine similarity
cosine similarity (CS) = (A . B) / (||A|| ||B||)
- Berechnen Sie das Skalarprodukt zwischen A und B: 1.1 + 1.1 + 1.1 + 1.1 + 1.0 + 0.1 = 4.
- Berechnen Sie den Betrag des Vektors A: √1² + 1² + 1² + 1² + 1² + 0² = 2.2360679775.
- Berechnen Sie den Betrag des Vektors B: √1² + 1² + 1² + 1² + 0²+ 1² = 2.2360679775.
- Berechnen Sie die cosine similarity: (4) / (2.2360679775*2.2360679775) = 0.80(80 Prozent Ähnlichkeit zwischen den Sätzen in beiden Dokumenten).
Lassen Sie uns eine weitere Anwendung untersuchen, bei der die cosine similarity genutzt werden kann, um ein Ähnlichkeitsmaß zwischen zwei Objekten zu bestimmen.
2. Posen-Anpassung
Beim Pose Matching werden die Posen verglichen, die Schlüsselpunkte der Gelenkpositionen enthalten.
Die Posenschätzung ist eine Aufgabe der Computer Vision und wird typischerweise mithilfe von Deep-Learning-Ansätzen wie Convolutional Pose Machines, Stacked Hourglasses, PoseNet usw. gelöst.
Bei der Posenschätzung handelt es sich um den Vorgang, bei dem die Position und Ausrichtung der lebenswichtigen Körperteile und Gelenke eines Körpers aus einem Bild oder einer Bildfolge abgeleitet werden.
In einem Szenario, in dem die Ähnlichkeit zwischen zwei Posen in Bild A und Bild B quantifiziert werden muss, würde folgendes Verfahren angewendet werden:
- Identifizieren Sie die Pose-Informationen und leiten Sie die Position der wichtigsten Punkte (Gelenke) in Bild A ab.
- Identifizieren Sie die x- und y-Position aller jeweiligen Gelenke, die für den Vergleich erforderlich sind. Eine Deep-Learning-Lösung zur Posenschätzung liefert normalerweise Informationen zur Position der Gelenke innerhalb einer bestimmten Pose sowie einen Schätzvertrauenswert.
- Wiederholen Sie die Schritte eins und zwei für Bild B.
- Platzieren Sie alle x,y-Positionen von Bild A in einem Vektor.
- Platzieren Sie alle x,y-Positionen von Bild B in einem Vektor.
- Stellen Sie sicher, dass die Reihenfolge der x- und y-Positionen jedes Gelenks in beiden Vektoren gleich ist.
- Führen Sie eine cosine similarity berechnung mit beiden Vektoren durch, um eine Zahl zwischen 0 und 1 zu erhalten.
Vorteile der cosine similarity
Es gibt noch andere Anwendungsbereiche, in denen Sie die cosine similarity nutzen können, wie Empfehlungssysteme , Plagiatsdetektoren und Data Mining. Sie kann sogar als Verlustfunktion beim Training neuronaler Netzwerke verwendet werden sentiment analysis.
Die Logik hinter der cosine similarity ist leicht zu verstehen und kann vermutlich in den meisten modernen Programmiersprachen implementiert werden.
Eine Sache, die ich beim Erkunden dieser kleinen Mathematiksegmente gelernt habe, ist, dass die meisten Themen oft als komplex gelten, da es nicht genügend Ressourcen gibt, um das Thema angemessen zu vermitteln. Wenn Sie über die entsprechenden Lernressourcen und Geduld verfügen, ist es möglich, eine große Anzahl mathematischer Themen zu verstehen.