<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Valentin Crettaz - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Valentin Crettaz - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/author/valentin-crettaz</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/author/valentin-crettaz</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/author/valentin-crettaz.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Wed, 23 Sep 2026 01:48:39 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Eine kurze Einführung in die Vektorsuche]]></title>
    <description><![CDATA[Dieser Artikel ist der erste einer dreiteiligen Reihe, die sich mit den Feinheiten der Vektorsuche, auch semantische Suche genannt, und ihrer Implementierung in Elasticsearch befasst.]]></description>
    <content:encoded><![CDATA[<p>Dieser Artikel ist der erste einer dreiteiligen Reihe, die sich mit den Feinheiten der Vektorsuche, auch semantische Suche genannt, und ihrer Implementierung in Elasticsearch befasst.</p><p>Dieser erste Teil konzentriert sich auf die allgemeine Einführung in die Grundlagen der Vektoreinbettung und die Funktionsweise der Vektorsuche im Detail.</p><p>Mit dem im ersten Artikel erworbenen Wissen ausgestattet, führt Sie der <a href="https://www.elastic.co/search-labs/blog/vector-search-set-up-elasticsearch">zweite Teil</a> durch die verschlungenen Pfade der Einrichtung der Vektorsuche in Elasticsearch.</p><p>Im <a href="https://www.elastic.co/search-labs/blog/hybrid-search-elasticsearch">dritten Teil</a> werden wir das in den ersten beiden Teilen Gelernte nutzen, darauf aufbauen und uns damit beschäftigen, wie man leistungsstarke hybride Suchanfragen in Elasticsearch erstellt.</p><p>Bevor wir uns dem eigentlichen Thema dieses Artikels zuwenden, werfen wir einen Blick zurück in die Geschichte der Vektoren, einem zentralen Konzept der semantischen Suche.</p><h2>Vektoren sind nicht neu</h2><p>Ich bin mir ziemlich sicher, dass jeder zustimmen würde, dass seit dem Aufkommen von ChatGPT im November 2022 kein einziger Tag vergeht, an dem man nicht von „Vektorsuche“ hört oder liest. Sie ist allgegenwärtig und so weit verbreitet, dass wir oft den Eindruck gewinnen, es handele sich um eine neue, hochmoderne Technologie, die gerade erst auf den Markt gekommen ist. Doch in Wahrheit gibt es diese Technologie schon seit mehr als sechs Jahrzehnten! Die Forschung zu diesem Thema begann Mitte der 1960er Jahre, und die ersten Forschungsarbeiten wurden 1978 von Gerard Salton, einem Experten für Informationswiedergewinnung, und seinen Kollegen an der Cornell University veröffentlicht. Saltons Arbeiten über dichte und dünnbesetzte Vektormodelle bilden die Grundlage der modernen Vektorsuchtechnologie.</p><p>In den letzten 20 Jahren wurden viele verschiedene <a href="https://db-engines.com/en/ranking/vector+dbms/all">Vektordatenbanksysteme</a> auf der Grundlage seiner Forschung entwickelt und auf den Markt gebracht. Dazu gehört Elasticsearch, das auf dem Apache Lucene-Projekt basiert und seit 2019 <a href="https://issues.apache.org/jira/browse/LUCENE-9004">an der Vektorsuche arbeitet</a> .</p><p>Vektoren sind heutzutage allgegenwärtig und so durchdringend, dass es wichtig ist, zunächst ein gutes Verständnis ihrer zugrunde liegenden Theorie und Funktionsweise zu erlangen, bevor man mit ihnen arbeitet. Bevor wir darauf näher eingehen, wollen wir kurz die Unterschiede zwischen lexikalischer Suche und Vektorsuche wiederholen, um besser zu verstehen, wie sie sich unterscheiden und wie sie sich ergänzen können.</p><h2>Vektorsuche vs. lexikalische Suche</h2><p>Eine einfache Möglichkeit, die Vektorsuche einzuführen, besteht darin, sie mit der herkömmlichen lexikalischen Suche zu vergleichen, die Ihnen wahrscheinlich bekannt ist. Vektorsuche, auch bekannt als semantische Suche, und lexikalische Suche funktionieren sehr unterschiedlich. Die lexikalische Suche ist die Art von Suche, die wir alle schon seit Jahren in Elasticsearch verwenden. Zusammengefasst versucht es nicht, die eigentliche Bedeutung der indizierten und abgefragten Daten zu verstehen, sondern bemüht sich vielmehr, die Literale der vom Benutzer in einer Suchanfrage eingegebenen Wörter oder deren Varianten (z. B. Stemming, Synonyme usw.) mithilfe von Ähnlichkeitsalgorithmen wie TF-IDF <strong>lexikalisch</strong> mit allen zuvor in der Datenbank indizierten Literalen abzugleichen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfbb8e150865a5ec8/6a17e0c725daab50f408a16e/a4f3eba19599e5330e9b0d29ecdbbeac211cdab0-1600x583.png" alt="Beispiel für eine lexikalische Suche" /><p>Wie wir sehen können, werden die drei Dokumente oben links tokenisiert und analysiert. Anschließend werden die resultierenden Begriffe in einem invertierten Index indexiert, der die analysierten Begriffe einfach den Dokument-IDs zuordnet, die sie enthalten. Beachten Sie, dass alle Begriffe nur einmal vorkommen und keiner von ihnen in mehreren Dokumenten verwendet wird. Die Suche nach „netter Deutschlehrer“ liefert alle drei Dokumente mit unterschiedlichen Trefferzahlen, obwohl keines von ihnen die eigentliche Bedeutung der Suchanfrage erfasst.</p><p>Wie aus Abbildung 2 unten ersichtlich, wird es noch komplizierter bei Polysemie oder Homographen, d. h. Wörtern, die gleich geschrieben werden, aber <strong>unterschiedliche Bedeutungen</strong> haben (rechts, Palme, Fledermaus, gemein usw.). Nehmen wir das Wort „rechts“, das drei verschiedene Bedeutungen haben kann, und sehen wir, was passiert.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltea0cc829ff2c8029/6a17e0c92f4a5c8107fa8811/ebb9cc1be03475bbf68269a8dcea5f08bcda0b64-1594x754.png" alt="Suche nach Homographen mit lexikalischer Suche" /><p>Die Suche nach <em>„Ich habe nicht Recht“</em> liefert ein Dokument, das genau die gegenteilige Bedeutung des ersten Suchergebnisses hat. Wenn Sie nach genau denselben Begriffen suchen, diese aber in einer anderen Reihenfolge eingeben, um eine andere Bedeutung zu erhalten, z. B. <em>„rechts abbiegen“</em> und <em>„rechts abbiegen“,</em> erhalten Sie genau dasselbe Ergebnis (d. h. das dritte Dokument „Take a right turn“). Zugegeben, unsere Suchanfragen sind stark vereinfacht und nutzen keine fortgeschritteneren Suchmethoden wie die Phrasensuche, aber dies verdeutlicht, dass die lexikalische Suche die wahre Bedeutung hinter dem, was indexiert und was gesucht wird, nicht versteht. Falls das noch nicht klar ist, keine Sorge, wir werden dieses Beispiel im dritten Artikel noch einmal aufgreifen, um zu sehen, wie die Vektorsuche in diesem Fall helfen kann.</p><p>Um der lexikalischen Suche gerecht zu werden: Wenn man die Kontrolle darüber hat, wie man seine <strong>strukturierten</strong> Daten indexiert (z. B. Mappings, Textanalyse, Datenaufnahmepipelines usw.) und wie man seine Abfragen gestaltet (z. B. geschickt formulierte DSL-Abfragen, Abfragetermanalyse usw.), kann man mit lexikalischen Suchmaschinen wahre Wunder vollbringen, daran besteht kein Zweifel! Die Erfolgsbilanz von Elasticsearch hinsichtlich seiner lexikalischen Suchfunktionen ist einfach erstaunlich. Was es erreicht hat und wie sehr es das Gebiet der lexikalischen Suche in den letzten Jahren popularisiert und verbessert hat, ist wirklich bemerkenswert.</p><p>Wenn es jedoch darum geht, Unterstützung für die Abfrage <a href="https://www.elastic.co/what-is/unstructured-data"><strong>unstrukturierter</strong></a><a href="https://www.elastic.co/what-is/unstructured-data"> Daten</a> (z. B. Bilder, Videos, Audiodateien, Rohtexte usw.) für Benutzer bereitzustellen, die Freitextfragen stellen müssen, stößt die lexikalische Suche an ihre Grenzen. Darüber hinaus besteht die Suchanfrage manchmal nicht einmal aus Text, sondern kann beispielsweise ein Bild sein, wie wir gleich sehen werden. Der Hauptgrund, warum die lexikalische Suche in solchen Situationen unzureichend ist, liegt darin, dass unstrukturierte Daten weder indiziert noch auf die gleiche Weise abgefragt werden können wie strukturierte Daten. Bei der Verarbeitung unstrukturierter Daten kommt <strong>die Semantik</strong> ins Spiel. Was bedeutet Semantik? Ganz einfach, die Bedeutung!</p><p>Nehmen wir das einfache Beispiel einer Bildsuchmaschine (z. B. Google Bildersuche oder Lens). Sie ziehen ein Bild per Drag &amp; Drop in das Fenster, und die semantische Suchmaschine von Google findet und liefert die ähnlichsten Bilder zu Ihrer Suchanfrage. In Abbildung 3 unten sehen wir auf der linken Seite das Bild eines Deutschen Schäferhundes und auf der rechten Seite alle ähnlichen Bilder, die abgerufen wurden, wobei das erste Ergebnis das gleiche Bild wie das bereitgestellte ist (d. h. das ähnlichste).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3e0a0fb3c300537a/6a17e0cbe8fbce69d13a185d/c0dff24d4379141abd1038c9c4b5577fd2dca802-1600x657.png" alt="Beispiel für eine semantische Suche: Suche nach einem Bild" /><p>Auch wenn das für uns Menschen einfach und logisch klingt, ist es für Computer eine ganz andere Geschichte. Genau das ermöglicht und trägt die Vektorsuche dazu bei, es zu erreichen. Die durch die Vektorsuche freigesetzten Möglichkeiten sind enorm, wie die Welt in jüngster Zeit erfahren musste. Nun wollen wir die Motorhaube öffnen und entdecken, was sich darunter verbirgt.</p><h2>Einbettungsvektoren</h2><p>Wie wir bereits gesehen haben, können mit lexikalischen Suchmaschinen strukturierte Daten wie Texte leicht in Begriffe tokenisiert werden, die zum Zeitpunkt der Suche gefunden werden können, unabhängig von der wahren Bedeutung der Begriffe. Unstrukturierte Daten können jedoch verschiedene Formen annehmen, wie zum Beispiel große Binärobjekte (Bilder, Videos, Audiodateien usw.), und eignen sich überhaupt nicht für den gleichen Tokenisierungsprozess. Darüber hinaus besteht der gesamte Zweck der semantischen Suche darin, Daten so zu indexieren, dass sie anhand der Bedeutung, die sie repräsentieren, durchsucht werden können. Wie erreichen wir das? Die Antwort liegt in zwei Worten: <strong>Maschinelles Lernen</strong>! Oder genauer gesagt: Deep Learning!</p><p><strong>Deep Learning</strong> ist ein spezielles Gebiet des maschinellen Lernens, das auf Modellen basiert, die auf künstlichen neuronalen Netzen mit mehreren Verarbeitungsschichten beruhen und schrittweise die wahre Bedeutung der Daten extrahieren können. Die Funktionsweise dieser neuronalen Netzwerkmodelle ist stark vom menschlichen Gehirn inspiriert. Abbildung 4 unten zeigt, wie ein neuronales Netzwerk mit seinen Eingabe- und Ausgabeschichten sowie mehreren verborgenen Schichten aussieht:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8ca5fd8f0e61d939/6a17e0cd7f6f152a67c09a53/aeea3bab3c29e1c591a9c9082f2e73e7d3990ef1-1600x1116.png" alt="Neuronale Netzwerkschichten in der Vektorsuche" /><p>Die eigentliche Leistung neuronaler Netze besteht darin, dass sie in der Lage sind, ein einzelnes Stück unstrukturierter Daten in eine Folge von Gleitkommawerten umzuwandeln, die als <strong>Einbettungsvektoren</strong> oder einfach <strong>Einbettungen</strong> bekannt sind. Als Menschen können wir Vektoren recht gut verstehen, solange wir sie uns in einem zwei- oder dreidimensionalen Raum vorstellen. Jede Komponente des Vektors repräsentiert eine Koordinate in einer 2D xy-Ebene oder einem 3D xyz-Raum.</p><p>Allerdings können die Einbettungsvektoren, auf denen neuronale Netzwerkmodelle basieren, mehrere hundert oder sogar tausende Dimensionen aufweisen und lediglich einen Punkt in einem mehrdimensionalen Raum darstellen. Jede Vektordimension repräsentiert ein <strong>Merkmal</strong> oder eine Charakteristik der unstrukturierten Daten. Lassen Sie uns dies anhand eines Deep-Learning-Modells veranschaulichen, das Bilder in Einbettungsvektoren mit 2048 Dimensionen umwandelt. Dieses Modell würde das in Abbildung 3 verwendete Bild des Deutschen Schäferhundes in den in der folgenden Tabelle dargestellten Einbettungsvektor umwandeln. Beachten Sie, dass wir nur die ersten und letzten drei Elemente anzeigen, die Tabelle aber noch 2.042 weitere Spalten/Dimensionen enthalten würde.</p><p></p><p>ist_rot</p><p>ist_Hund</p><p>blauer Himmel</p><p>…</p><p>kein Gras</p><p>Deutscher Schäferhund</p><p>ist_Baum</p><p>Deutscher Schäferhund Einbettungen</p><p>0,0121</p><p>0,9572</p><p>0,8735</p><p>…</p><p>0,1198</p><p>0,9712</p><p>0,0512</p><p>Jede Spalte stellt eine Dimension des Modells dar und repräsentiert ein Merkmal oder eine Eigenschaft, die das zugrunde liegende neuronale Netzwerk zu modellieren versucht. Jeder dem Modell zugeführte Input wird danach charakterisiert, wie ähnlich dieser Input jeder der 2048 Dimensionen ist. Daher gibt der Wert jedes Elements im Einbettungsvektor die <strong>Ähnlichkeit</strong> des jeweiligen Eingangs mit einer bestimmten Dimension an. In diesem Beispiel können wir sehen, dass das Modell eine hohe Ähnlichkeit zwischen Hunden und Deutschen Schäferhunden sowie das Vorhandensein von blauem Himmel festgestellt hat.</p><p>Im Gegensatz zur lexikalischen Suche, bei der ein Begriff entweder gefunden wird oder nicht, ermöglicht die Vektorsuche eine viel bessere Einschätzung darüber, wie <em>ähnlich</em> ein unstrukturiertes Datenelement den einzelnen Dimensionen des Modells ist. Als solche dienen Einbettungsvektoren als hervorragende semantische Repräsentation unstrukturierter Daten.</p><h2>Die geheime Soße</h2><p>Nachdem wir nun wissen, wie unstrukturierte Daten von neuronalen Netzen des Deep Learning in Einbettungsvektoren zerlegt werden, die die Ähnlichkeit der Daten über eine hohe Anzahl von Dimensionen erfassen, müssen wir verstehen, wie der Abgleich dieser Vektoren funktioniert. Es stellt sich heraus, dass die Antwort ziemlich einfach ist. <strong>Nahe</strong> beieinander liegende Einbettungsvektoren repräsentieren <strong>semantisch ähnliche</strong> Datenteile. Wenn wir also eine Vektordatenbank abfragen, wird die Suchanfrage (Bild, Text usw.) zunächst mithilfe desselben Modells, das zur Indizierung aller unstrukturierten Daten verwendet wurde, in einen Einbettungsvektor umgewandelt. Das letztendliche Ziel ist es, die <strong>nächstgelegenen Nachbarvektoren</strong> zu diesem Anfragevektor zu finden. Daher müssen wir lediglich herausfinden, wie wir die „Distanz“ oder „Ähnlichkeit“ zwischen dem Abfragevektor und allen in der Datenbank indizierten Vektoren messen können, das ist im Prinzip alles.</p><h3>Distanz und Ähnlichkeit</h3><p>Zum Glück für uns ist die Messung des Abstands zwischen zwei Vektoren dank der Vektorarithmetik ein leicht zu lösendes Problem. Schauen wir uns also die gängigsten Distanz- und Ähnlichkeitsfunktionen an, die von modernen Vektorsuchdatenbanken wie Elasticsearch unterstützt werden. Achtung, es folgen mathematische Berechnungen!</p><h4>L1-Distanz</h4><p>Die L1-Distanz, auch Manhattan-Distanz genannt, zweier Vektoren x und y wird gemessen, indem die paarweise absolute Differenz aller ihrer Elemente summiert wird. Offensichtlich gilt: Je kleiner der Abstand d, desto näher liegen die beiden Vektoren beieinander. Die Formel ist recht einfach, wie unten ersichtlich:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2df2e9bc20883491/6a17e0ce033c8d006a6bb0bf/2b17bcedfbedde61117a3e7970af55bc62318c6c-312x102.png" alt="L1-Distanzformel bei der Vektorsuche" /><p>Visuell lässt sich der L1-Abstand wie in Abbildung 5 unten dargestellt veranschaulichen:</p><p></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb90a33e6b1cbe00b/6a17e0d0414c64eb76945096/52075441892151536ed216081817a8e852566daa-474x464.png" alt="Visualisierung des L1-Abstands zwischen zwei Vektoren" /><p>Nehmen wir zwei Vektoren x und y, etwa x = (1, 2) und y = (4, 3), dann wäre der L1-Abstand beider Vektoren | 1 - 4 | + | 2 - 3 | = 4.</p><h4>L2-Abstand</h4><p>Die L2-Distanz, auch euklidische Distanz genannt, zweier Vektoren x und y wird gemessen, indem man zuerst die Quadrate der paarweisen Differenzen aller ihrer Elemente aufsummiert und dann die Quadratwurzel des Ergebnisses zieht. Es handelt sich im Grunde um den kürzesten Weg zwischen zwei Punkten (auch Hypotenuse genannt). Ähnlich wie bei L1 gilt: Je kleiner der Abstand d, desto näher liegen die beiden Vektoren beieinander.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltae9b63fb593ae225/6a17e0d1af47b68379cddea8/b7675aa41f4f381e954c21dacd23a51a2dde6780-384x112.png" alt="L2-Distanz bei der Vektorsuche" /><p>Der Abstand L2 ist in Abbildung 6 unten dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt32d913b46e07e79d/6a17e0d27f6f1582f7c09a57/bac99d08d6cf8a3a387a8acdc2e8f67357dad235-448x456.png" alt="Visualisierung des L2-Abstands zwischen zwei Vektoren" /><p>Wir verwenden dieselben beiden Beispielvektoren x und y, die wir bereits für die L1-Distanz verwendet haben, und können nun die L2-Distanz wie folgt berechnen . Die Quadratwurzel aus 10 ergibt 3,16.</p><p></p><h4>Linf-Distanz</h4><p>Der Linf-Abstand (für L unendlich), auch Tschebyscheff- oder Schachbrettabstand genannt, zweier Vektoren x und y ist einfach definiert als der größte Abstand zwischen je zwei ihrer Elemente oder der größte Abstand, gemessen entlang einer der Achsen/Dimensionen. Die Formel ist sehr einfach und wird unten dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt863411e15de16fa3/6a17e0d4505ac30939ad8a48/179ea6c6520a59acd97638313a2fb1b105e2ffed-436x82.png" alt="Linf-Distanzformel bei der Vektorsuche" /><p>Eine Darstellung der Linf-Distanz ist in Abbildung 7 unten zu sehen:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt863ee7b51fd5fc15/6a17e0d56864a4772db686af/b75540d793cdc0645244d77dc36da9d5734ccbac-548x560.png" alt="Linf-Abstand zwischen zwei Vektoren" /><p>Nimmt man erneut die gleichen beiden Beispielvektoren x und y, so kann man den Abstand L unendlich berechnen als max ( | 1 - 4 | , | 2 - 3 | ) = max (3, 1) = 3.</p><h4>Kosinusähnlichkeit</h4><p>Im Gegensatz zu L1, L2 und Linf misst die Kosinusähnlichkeit nicht den Abstand zwischen zwei Vektoren x und y, sondern ihren relativen Winkel, d. h. ob sie beide ungefähr in die gleiche Richtung zeigen. Je höher die Ähnlichkeit s, desto „näher“ sind die beiden Vektoren beieinander. Die Formel ist wiederum sehr einfach und wird im Folgenden dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt61d55341a6457ab7/6a17e0d7e9ea872b4ea9c4e2/931b6b90f0ee83e63a66496d06d6b4cef3affddd-304x72.png" alt="Kosinusähnlichkeitsformel bei der Vektorsuche" /><p>Eine Möglichkeit zur Darstellung der Kosinusähnlichkeit zwischen zwei Vektoren ist in Abbildung 8 unten dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt50eb6399510b5380/6a17e0d83e9e45302cba139a/52092e8b5d366178e50a35f8c954ee8eaca76965-582x586.png" alt="Kosinusähnlichkeit zwischen zwei Vektoren" /><p>Da Kosinuswerte immer im Intervall [-1, 1] liegen, bedeutet -1 entgegengesetzte Ähnlichkeit (d. h. ein Winkel von 180° zwischen den beiden Vektoren), 0 bedeutet unverwandte Ähnlichkeit (d. h. ein Winkel von 90°) und 1 bedeutet identisch (d. h. ein Winkel von 0°), wie in Abbildung 9 unten dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt785e195c75a5089e/6a17e0da1d1b8355bc93e398/fd2690a845b89b69ff202bd04192893638538aec-1600x456.png" alt="Das Kosinusähnlichkeitsspektrum in der Vektorsuche" /><p>
Nehmen wir noch einmal die gleichen Beispielvektoren x und y und berechnen die Kosinusähnlichkeit mit der obigen Formel. Zunächst können wir das Skalarprodukt beider Vektoren berechnen: . Dann multiplizieren wir die Länge (auch Betrag genannt) beider Vektoren:  Schließlich dividieren wir das Skalarprodukt durch die multiplizierte Länge 10 / 11,18034 = 0,894427 (d. h. ein Winkel von 26°), was recht nahe an 1 liegt, sodass beide Vektoren als ziemlich ähnlich betrachtet werden können.</p><h4>Ähnlichkeit des Skalarprodukts</h4><p>Ein Nachteil der Kosinusähnlichkeit besteht darin, dass sie nur den Winkel zwischen zwei Vektoren berücksichtigt, nicht aber deren Betrag (d. h. Länge). Das bedeutet, dass, wenn zwei Vektoren ungefähr in die gleiche Richtung zeigen, einer aber viel länger ist als der andere, beide trotzdem als ähnlich gelten. Die Ähnlichkeit mittels des Punktprodukts, auch Skalarprodukt oder inneres Produkt genannt, verbessert dies, indem sie sowohl den Winkel als auch die Länge der Vektoren berücksichtigt, was zu einer wesentlich genaueren Ähnlichkeitsmetrik führt.</p><p>Zur Berechnung der Ähnlichkeit des Skalarprodukts werden zwei äquivalente Formeln verwendet. Der erste ist derselbe, den wir bereits im Zähler der Kosinusähnlichkeit gesehen haben:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7f1c3369f8628457/6a17e0db1d1b832a1893e39c/52e2723926ab27cd96b688e805fae15f607073c8-482x104.png" alt="Ähnlichkeitsformel für das Skalarprodukt bei der Vektorsuche" /><p>Die zweite Formel multipliziert einfach die Länge beider Vektoren mit dem Kosinus des Winkels zwischen ihnen:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt136dd2a749c2398a/6a17e0dc6df73108a80a0e1f/dc9b11fc67dd748d9f1f29b735f4726138cb7d39-452x70.png" alt="Ähnlichkeitsformel für das Skalarprodukt vereinfacht in der Vektorsuche" /><p>Die Ähnlichkeit des Skalarprodukts wird in Abbildung 10 unten visualisiert:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb2c095e1c1948752/6a17e0dd6df731e30b0a0e23/1bda38cf82a1e1037f44b6e9657602c9efe1c0a6-558x574.png" alt="Skalarproduktähnlichkeit zwischen zwei Vektoren" /><p>Zum letzten Mal nehmen wir die Beispielvektoren x und y und berechnen ihre Skalarproduktähnlichkeit mit der ersten Formel, wie wir es zuvor für die Kosinusähnlichkeit getan haben, als (1 4) + (2 3) = 10.</p><p>Mit der zweiten Formel multiplizieren wir die Längen beider Vektoren:  und multiplizieren das mit dem Kosinus des 26°-Winkels zwischen den beiden Vektoren, und wir erhalten 11,18034 cos(26°) = 10.</p><p>Eine wichtige Anmerkung: Wenn alle Vektoren vorher <strong>normalisiert</strong> werden (d. h. ihre Länge 1 beträgt), dann ist die Ähnlichkeit des Skalarprodukts genau gleich der Ähnlichkeit des Kosinus (weil |x| |y| = 1), d. h. dem Kosinus des Winkels zwischen den beiden Vektoren. Wie wir später sehen werden, ist die Normalisierung von Vektoren eine gute Vorgehensweise, um die Länge des Vektors irrelevant zu machen, sodass sich die Ähnlichkeit nur noch auf den Winkel konzentriert. Außerdem beschleunigt es die Distanzberechnung bei der Indizierung und Abfrage, was bei der Verarbeitung von Milliarden von Vektoren ein großes Problem darstellen kann.</p><h3>Kurze Zusammenfassung</h3><p>Wow, wir haben bisher eine Menge Informationen durchgearbeitet, also lasst uns kurz innehalten und eine kurze Zusammenfassung des aktuellen Stands geben. Wir haben gelernt, dass…</p><ul><li><p>Die semantische Suche basiert auf Deep-Learning-Neuronalnetzwerkmodellen, die sich durch ihre Fähigkeit auszeichnen, unstrukturierte Daten in mehrdimensionale Einbettungsvektoren umzuwandeln.</p></li><li><p>…jede Dimension des Modells repräsentiert ein Merkmal oder eine Eigenschaft der unstrukturierten Daten.</p></li><li><p>…ein Einbettungsvektor ist eine Sequenz von Ähnlichkeitswerten (einer für jede Dimension), die darstellen, wie ähnlich ein gegebenes Stück unstrukturierter Daten zu jeder Dimension ist.</p></li><li><p>Je „näher“ zwei Vektoren beieinander liegen (d. h. je näher sie beieinander liegen), desto mehr repräsentieren sie semantisch ähnliche Konzepte.</p></li><li><p>…Distanzfunktionen (L1, L2, Linf) ermöglichen es uns, zu messen, wie nahe zwei Vektoren beieinander liegen.</p></li><li><p>…Ähnlichkeitsfunktionen (Kosinus und Skalarprodukt) ermöglichen es uns zu messen, wie stark zwei Vektoren in die gleiche Richtung zeigen.</p></li></ul><p></p><p>Nun müssen wir uns als letztes noch mit der Vektorsuchmaschine selbst befassen. Wenn eine Anfrage eingeht, wird diese zunächst vektorisiert, und anschließend findet die Vektorsuchmaschine die nächstgelegenen Nachbarvektoren zu diesem Anfragevektor. Der Ansatz, bei dem man die Distanz oder Ähnlichkeit zwischen dem Abfragevektor und allen Vektoren in der Datenbank misst, funktioniert zwar bei kleinen Datensätzen, stößt aber schnell an seine Grenzen, wenn die Anzahl der Vektoren zunimmt. Anders formuliert: Wie können wir Millionen, Milliarden oder sogar Billionen von Vektoren indizieren und die nächsten Nachbarn des Anfragevektors in angemessener Zeit finden? Hier müssen wir clever vorgehen und optimale Wege finden, Vektoren zu indizieren, damit wir die nächsten Nachbarn so schnell wie möglich finden können, ohne die Genauigkeit zu sehr zu beeinträchtigen.</p><h3>Vektorsuchalgorithmen und -techniken</h3><p>Über die Jahre haben viele verschiedene Forschungsteams viel Mühe in die Entwicklung sehr ausgeklügelter Vektorsuchalgorithmen investiert. Hier werden wir die wichtigsten kurz vorstellen. Je nach Anwendungsfall eignen sich manche besser als andere.</p><h4>Lineare Suche</h4><p>Wir haben die lineare Suche bzw. die flache Indizierung bereits kurz angesprochen, als wir den Brute-Force-Ansatz erwähnten, bei dem der Abfragevektor mit allen in der Datenbank vorhandenen Vektoren verglichen wird. Während es bei kleinen Datensätzen gut funktionieren mag, nimmt die Leistung rapide ab, wenn die Anzahl der Vektoren und Dimensionen zunimmt (O(n)-Komplexität).</p><p>Zum Glück gibt es effizientere Ansätze, die als <strong>approximative Nächste-Nachbarn-Verfahren</strong> (ANN) bezeichnet werden. Dabei werden die Distanzen zwischen den Einbettungsvektoren vorab berechnet und ähnliche Vektoren so gespeichert und organisiert, dass sie nahe beieinander liegen, beispielsweise mithilfe von Clustern, Bäumen, Hashes oder Graphen. Solche Ansätze werden als „approximativ“ bezeichnet, weil sie in der Regel keine hundertprozentige Genauigkeit garantieren. Das ultimative Ziel ist es, entweder <strong>den Suchbereich so weit und so schnell wie möglich zu reduzieren</strong> , um sich nur auf Bereiche zu konzentrieren, die mit hoher Wahrscheinlichkeit ähnliche Vektoren enthalten, oder <strong>die Dimensionalität der Vektoren zu reduzieren</strong>.</p><h4>K-dimensionale Bäume</h4><p>Ein K-dimensionaler Baum, oder KD-Baum, ist eine Verallgemeinerung eines binären Suchbaums, der Punkte in einem k-dimensionalen Raum speichert und durch kontinuierliche Halbierung des Suchraums in kleinere linke und rechte Bäume funktioniert, in denen die Vektoren indiziert sind. Zum Zeitpunkt der Suche muss der Algorithmus lediglich einige Zweige des Baums um den Anfragevektor (den roten Punkt in Abbildung 11) besuchen, um den nächsten Nachbarn (den grünen Punkt in Abbildung 11) zu finden. Werden mehr als k Nachbarn angefordert, wird der gelbe Bereich so lange erweitert, bis der Algorithmus weitere Nachbarn findet.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt55e01707cd9fca57/6a17e0dfbe60866a90004653/e21af2d613112279089b6fa2166359233b10019d-829x860.png" alt="KD-Baum-Algorithmus bei der Vektorsuche" /><p>Der größte Vorteil des KD-Baum-Algorithmus besteht darin, dass er es uns ermöglicht, uns schnell nur auf einige lokalisierte Zweige des Baums zu konzentrieren und somit die meisten Vektoren aus der Betrachtung auszuschließen. Allerdings nimmt die Effizienz dieses Algorithmus mit zunehmender Dimensionalität ab, da im Vergleich zu niedrigerdimensionalen Räumen viel mehr Zweige besucht werden müssen.</p><h4>Invertierter Dateiindex</h4><p>Der Ansatz des invertierten Dateiindex (IVF) ist ebenfalls ein Algorithmus <strong>zur Raumpartitionierung</strong> , der Vektoren, die nahe beieinander liegen, ihrem gemeinsamen Schwerpunkt zuordnet. Im zweidimensionalen Raum lässt sich dies am besten mit einem Voronoi-Diagramm veranschaulichen, wie in Abbildung 12 dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7b7e4fe6deff5ef3/6a17e0e17b54f940eb8b381c/33ddaaa818ab2f2a5fc87982c82c2a34cb849e33-640x640.png" alt="Voronoi-Darstellung eines invertierten Dateiindex im 2D-Raum " /><p>Wir können sehen, dass der obige 2D-Raum in 20 Cluster unterteilt ist, deren Schwerpunkte jeweils als schwarze Punkte dargestellt sind. Alle Einbettungsvektoren im Raum werden dem Cluster zugeordnet, dessen Schwerpunkt ihnen am nächsten liegt. Bei der Suche ermittelt der Algorithmus zunächst den Cluster, auf den er sich konzentrieren soll, indem er den Schwerpunkt findet, der dem Abfragevektor am nächsten liegt. Anschließend kann er sich einfach auf diesen Bereich und gegebenenfalls auch auf die umliegenden Bereiche konzentrieren, um die nächsten Nachbarn zu finden.</p><p>Dieser Algorithmus leidet unter dem gleichen Problem wie KD-Bäume, wenn er in hochdimensionalen Räumen verwendet wird. Dies wird als Fluch der Dimensionalität bezeichnet und tritt auf, wenn das Volumen des Raums so stark zunimmt, dass alle Daten spärlich erscheinen und die Datenmenge, die für genauere Ergebnisse erforderlich wäre, exponentiell wächst. Bei spärlichen Daten wird es für diese Raumpartitionierungsalgorithmen schwieriger, die Daten in Cluster zu organisieren. Zum Glück gibt es andere Algorithmen und Techniken, die dieses Problem mindern, wie im Folgenden detailliert beschrieben.</p><h4>Quantisierung</h4><p>Bei der Quantisierung handelt es sich um einen <strong>kompressionsbasierten</strong>Ansatz, der es uns ermöglicht, die Gesamtgröße der Datenbank zu reduzieren, indem die Präzision der Einbettungsvektoren verringert wird. Dies kann durch <strong>Skalarquantisierung (SQ)</strong> erreicht werden, indem die Gleitkomma-Vektorwerte in Ganzzahlwerte umgewandelt werden. Dadurch wird nicht nur die Größe der Datenbank um den Faktor 8 reduziert, sondern auch der Speicherverbrauch verringert und die Distanzberechnung zwischen Vektoren zur Suchzeit beschleunigt.</p><p>Eine weitere Technik ist die sogenannte <strong>Produktquantisierung (PQ).</strong> Dabei wird der Raum zunächst in niedrigdimensionale Unterräume unterteilt, und anschließend werden in jedem Unterraum Vektoren, die nahe beieinander liegen, mithilfe eines Clustering-Algorithmus (ähnlich wie bei k-Means) gruppiert.</p><p>Beachten Sie, dass sich die Quantisierung von <strong>der Dimensionsreduktion</strong> unterscheidet, bei der die Anzahl der Dimensionen reduziert wird, d. h. die Vektoren einfach kürzer werden.</p><h4>Hierarchische navigierbare kleine Welten (HNSW)</h4><p>Wenn es schon beim Lesen des Namens kompliziert aussieht, keine Sorge, es ist gar nicht so kompliziert! Kurz gesagt, Hierarchical Navigable Small Worlds ist ein mehrschichtiger, graphenbasierter Algorithmus, der sehr beliebt und effizient ist. Es wird von vielen verschiedenen Vektordatenbanken verwendet, darunter Apache Lucene. Eine konzeptionelle Darstellung von HNSW ist in Abbildung 13 unten zu sehen.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7f4f4a8e393c8d53/6a17e0e3e8fbcefa193a1861/189ef9a8bec476e379222c454644ba4c1f952085-1400x840.png" alt="Hierarchische navigierbare kleine Welten (HNSW)" /><p>Auf der obersten Ebene sehen wir einen Graphen von sehr wenigen Vektoren, die die längsten Verbindungen untereinander aufweisen, d. h. einen Graphen von verbundenen Vektoren mit der geringsten Ähnlichkeit. Je tiefer wir in die unteren Schichten vordringen, desto mehr Vektoren finden wir und desto dichter wird der Graph, mit immer mehr Vektoren, die näher beieinander liegen. In der untersten Schicht können wir alle Vektoren finden, wobei die ähnlichsten Vektoren am nächsten beieinander liegen.</p><p>Bei der Suche beginnt der Algorithmus in der obersten Ebene an einem beliebigen Einstiegspunkt und findet den Vektor, der dem Abfragevektor (dargestellt durch den grauen Punkt) am nächsten liegt. Dann geht es eine Ebene tiefer und wiederholt den gleichen Vorgang, ausgehend vom gleichen Vektor, den es in der darüber liegenden Ebene hinterlassen hat, und so weiter, Ebene für Ebene, bis es die unterste Ebene erreicht und den nächsten Nachbarn zum Anfragevektor findet.</p><h4>Locality-Sensitive Hashing (LSH)</h4><p>In ähnlicher Weise wie alle anderen bisher vorgestellten Ansätze zielt das lokalitätssensitive Hashing darauf ab, den Suchraum drastisch zu reduzieren, um die Abrufgeschwindigkeit zu erhöhen. Bei dieser Technik werden Einbettungsvektoren in Hashwerte umgewandelt, wobei die Ähnlichkeitsinformationen erhalten bleiben, sodass der Suchraum letztendlich zu einer einfachen Hashtabelle wird, die nachgeschlagen werden kann, anstatt zu einem Graphen oder Baum, der durchlaufen werden muss. Der Hauptvorteil von Hash-basierten Methoden besteht darin, dass Vektoren mit einer beliebigen (großen) Anzahl von Dimensionen auf Hashes fester Größe abgebildet werden können, was die Abrufzeit enorm beschleunigt, ohne dabei zu viel Genauigkeit einzubüßen.</p><p>Es gibt viele verschiedene Möglichkeiten, Daten im Allgemeinen und Vektoren im Besonderen zu hashen, aber dieser Artikel wird nicht auf die Details jeder einzelnen eingehen. Konventionelle Hash-Methoden erzeugen üblicherweise sehr unterschiedliche Hashwerte für Daten, die sich sehr ähnlich erscheinen. Da Einbettungsvektoren aus Gleitkommazahlen bestehen, nehmen wir zwei Gleitkommazahlen als Beispiel, die in der Vektorarithmetik als sehr nahe beieinander liegen (z. B. 0,73 und 0,74), und wenden einige gängige Hash-Funktionen darauf an. Anhand der unten stehenden Ergebnisse wird deutlich, dass gängige Hash-Funktionen die Ähnlichkeit zwischen den Eingaben nicht erhalten.</p><p>Hashfunktion</p><p>0,73</p><p>0,74</p><p>MD5</p><p>1342129d04cd2924dd06cead4cf0a3ca</p><p>0aec1b15371bd979cfa66b0a50ebecc5</p><p>SHA1</p><p>49d2c3e0e44bff838e1db571a121be5ea874e8d9</p><p>a534e76482ade9d9fe4bff3035a7f31f2f363d77</p><p>SHA256</p><p>99d03fc3771fe6848d675339fc49eeb1cb8d99a12e6358173336b99a2ec530ea</p><p>5ecbc825ba5c16856edfdaf0abc5c6c41d0d8a9c508e34188239521dc7645663</p><p>Während herkömmliche Hash-Methoden versuchen, <em>Hash-Kollisionen zwischen ähnlichen Datenteilen zu minimieren</em> , ist das Hauptziel des lokalitätssensitiven Hashings genau das Gegenteil, d. h. <em>Hash-Kollisionen zu maximieren,</em> damit ähnliche Daten mit hoher Wahrscheinlichkeit im selben Bucket landen. Dadurch werden Einbettungsvektoren, die in einem mehrdimensionalen Raum nahe beieinander liegen, zu einem Wert fester Größe gehasht, der in denselben Bucket fällt. Da LSH es ermöglicht, dass die gehashten Vektoren ihre Nähe zueinander beibehalten, ist diese Technik sehr nützlich für Datenclustering und Nächste-Nachbar-Suchen.</p><p>Die eigentliche Arbeit findet beim Indizieren statt, wenn die Hashwerte berechnet werden müssen. Bei der Suche hingegen müssen wir nur den Abfragevektor hashen, um den Bucket zu finden, der die nächstgelegenen Einbettungsvektoren enthält. Sobald der geeignete Kandidaten-Bucket gefunden ist, findet üblicherweise eine zweite Runde statt, um die nächstgelegenen Nachbarvektoren zum Anfragevektor zu ermitteln.</p><h2>Lasst uns abschließen</h2><p>Um die Vektorsuche einzuführen, mussten wir in diesem Artikel einiges an Stoff behandeln. Nach dem Vergleich der Unterschiede zwischen lexikalischer Suche und Vektorsuche haben wir gelernt, wie neuronale Netzwerkmodelle des Deep Learning die Semantik unstrukturierter Daten erfassen und deren Bedeutung in hochdimensionale Einbettungsvektoren transkodieren, eine Folge von Gleitkommazahlen, die die Ähnlichkeit der Daten entlang jeder Dimension des Modells darstellen. Es ist außerdem erwähnenswert, dass Vektorsuche und lexikalische Suche keine konkurrierenden, sondern sich ergänzende Information-Retrieval-Techniken sind (wie wir im dritten Teil dieser Reihe sehen werden, wenn wir uns mit der hybriden Suche befassen).</p><p>Anschließend stellten wir einen grundlegenden Baustein der Vektorsuche vor, nämlich die Distanz- (und Ähnlichkeits-) Funktionen, die es uns ermöglichen, die Nähe zweier Vektoren zu messen und die Ähnlichkeit der von ihnen repräsentierten Konzepte zu beurteilen.</p><p>Abschließend haben wir verschiedene Varianten der beliebtesten Vektorsuchalgorithmen und -techniken betrachtet, die auf Bäumen, Graphen, Clustern oder Hashes basieren und deren Ziel es ist, schnell einen bestimmten Bereich des mehrdimensionalen Raums einzugrenzen, um die nächsten Nachbarn zu finden, ohne den gesamten Raum durchsuchen zu müssen, wie es bei einer linearen Brute-Force-Suche der Fall wäre.</p><p>Wenn Ihnen gefällt, was Sie lesen, sollten Sie unbedingt auch die anderen Teile dieser Serie lesen:</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/vector-search-set-up-elasticsearch">Teil 2: So richten Sie die Vektorsuche in Elasticsearch ein</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/hybrid-search-elasticsearch">Teil 3: Hybride Suche mit Elasticsearch</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/introduction-to-vector-search</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/introduction-to-vector-search</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <dc:creator><![CDATA[Valentin Crettaz]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt70da374b8dc0c490/6a17e0e46864a473aab686b3/63eea8ea95b49e7241e539f65bf5aa3bb8823fff-1200x628.png" length="0" type="image/png"/>
    <pubDate>Thu, 06 Feb 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Vektorähnlichkeitsmaße und Bewertung]]></title>
    <description><![CDATA[Erkunden Sie Vektorähnlichkeitsmaße und Bewertungsmethoden in Elasticsearch, einschließlich L1- und L2-Distanz, Kosinusähnlichkeit, Skalarproduktähnlichkeit und maximaler Skalarproduktähnlichkeit.]]></description>
    <content:encoded><![CDATA[<p>Wenn die Suche nach freiem Text erforderlich ist und Strg+F bzw. Cmd+F nicht mehr ausreicht, ist die Verwendung einer lexikalischen Suchmaschine normalerweise die nächste logische Wahl, die einem in den Sinn kommt. Lexikalische Suchmaschinen zeichnen sich durch die Analyse und Tokenisierung des zu durchsuchenden Textes in Begriffe aus, die zum Suchzeitpunkt abgeglichen werden können. Allerdings versagen sie in der Regel, wenn es darum geht, die wahre Bedeutung des indizierten und durchsuchten Textes zu verstehen und zu erschließen.</p><p>Genau hier glänzen Vektorsuchmaschinen. Sie können denselben Text so indizieren, dass er sowohl auf der Grundlage der dargestellten Bedeutung als auch seiner Beziehungen zu anderen Konzepten mit ähnlicher oder verwandter Bedeutung durchsucht werden kann.</p><p>In diesem Blog werden wir kurz darauf eingehen, warum Vektoren ein großartiges mathematisches Konzept sind, um die Bedeutung von Text zu vermitteln. Anschließend werden wir uns eingehender mit den verschiedenen Ähnlichkeitstechniken befassen, die von Elasticsearch bei der Suche nach benachbarten Vektoren unterstützt werden, d. h. bei der Suche nach Vektoren mit ähnlicher Bedeutung, und wie diese bewertet werden.</p><h2>Was sind Vektoreinbettungen?</h2><p>Dieser Artikel geht nicht näher auf die Feinheiten von Vektoreinbettungen ein. Wenn Sie dieses Thema weiter vertiefen möchten oder eine Einführung benötigen, bevor Sie fortfahren, empfehlen wir Ihnen, sich den <a href="https://www.elastic.co/de/what-is/vector-embedding">folgenden Leitfaden</a> anzusehen.</p><p>Kurz gesagt, Vektoreinbettungen werden durch einen maschinellen Lernprozess erhalten (z. B. Deep-Learning-Neuronale Netzwerke), die jede Art unstrukturierter Eingabedaten (z. B. Rohtext, Bild, Video, Ton usw.) in numerische Daten umwandeln, die deren Bedeutung und Beziehungen enthalten. Verschiedene Arten unstrukturierter Daten erfordern unterschiedliche Arten von maschinellen Lernmodellen, die darauf trainiert wurden, jeden Datentyp zu „verstehen“.</p><p>Jeder Vektor lokalisiert ein bestimmtes Datenelement als Punkt in einem mehrdimensionalen Raum und dieser Ort stellt eine Reihe von Merkmalen dar, die das Modell zur Charakterisierung der Daten verwendet. Die Anzahl der Dimensionen hängt vom Modell des maschinellen Lernens ab, liegt aber normalerweise zwischen einigen Hundert und einigen Tausend. Beispielsweise verfügen <a href="https://platform.openai.com/docs/guides/embeddings">OpenAI Embeddings-Modelle</a> über 1536 Dimensionen, während <a href="https://docs.cohere.com/reference/embed">Cohere Embeddings-Modelle</a> zwischen 382 und 4096 Dimensionen umfassen können. Der Elasticsearch-Feldtyp „dense_vector“ unterstützt ab der neuesten Version bis zu 4096 Dimensionen.</p><p>Die wahre Leistung von Vektoreinbettungen besteht darin, dass Datenpunkte mit ähnlicher Bedeutung im Raum nahe beieinander liegen. Ein weiterer interessanter Aspekt ist, dass Vektoreinbettungen auch dabei helfen, Beziehungen zwischen Datenpunkten zu erfassen.</p><h2>Wie vergleichen wir Vektoren?</h2><p>Da wir wissen, dass unstrukturierte Daten von Modellen des maschinellen Lernens in Vektoreinbettungen zerlegt und gewürfelt werden, die die Ähnlichkeit der Daten entlang einer großen Anzahl von Dimensionen erfassen, müssen wir nun verstehen, wie das Zuordnen dieser Vektoren funktioniert. Es stellt sich heraus, dass die Antwort ziemlich einfach ist.</p><p><strong>Nahe</strong> beieinander liegende Vektoreinbettungen stellen <strong>semantisch ähnliche</strong> Datenstücke dar. Wenn wir also eine Vektordatenbank abfragen, wird die Sucheingabe (Bild, Text usw.) zunächst mithilfe desselben maschinellen Lernmodells, das zum Indizieren aller unstrukturierten Daten verwendet wurde, in Vektoreinbettungen umgewandelt. Das ultimative Ziel besteht darin, die <strong>nächstgelegenen Nachbarvektoren</strong> zu diesem Abfragevektor zu finden. Daher müssen wir nur herausfinden, wie wir die „Distanz“ oder „Ähnlichkeit“ zwischen dem Abfragevektor und allen vorhandenen, in der Datenbank indizierten Vektoren messen können – so einfach ist das.</p><h2>Distanz, Ähnlichkeit und Wertung</h2><p>Glücklicherweise ist das Messen der Distanz oder Ähnlichkeit zwischen zwei Vektoren dank der Vektorarithmetik ein leicht zu lösendes Problem. Sehen wir uns also die beliebtesten Distanz- und Ähnlichkeitsfunktionen an, die von Elasticsearch unterstützt werden. Achtung, Mathematik voraus!</p><p>Bevor wir eintauchen, werfen wir einen kurzen Blick auf die Wertung. Tatsächlich lässt Lucene nur positive Ergebnisse zu. Alle Distanz- und Ähnlichkeitsfunktionen, die wir in Kürze vorstellen werden, liefern ein Maß dafür, wie nahe oder ähnlich zwei Vektoren beieinander liegen. Diese Rohwerte eignen sich jedoch selten als Bewertung, da sie negativ sein können. Aus diesem Grund muss die endgültige Punktzahl aus dem Distanz- oder Ähnlichkeitswert so abgeleitet werden, dass sichergestellt ist, dass die Punktzahl positiv ist und eine höhere Punktzahl einer höheren Rangfolge entspricht (d. h. näheren Vektoren).</p><h3>L1-Abstand</h3><p>Die L1-Distanz, auch Manhattan-Distanz genannt, zweier Vektoren  und  wird durch Summieren der paarweisen absoluten Differenz aller ihrer Elemente gemessen. Offensichtlich ist es so, dass die beiden Vektoren umso näher beieinander liegen, je kleiner der Abstand  ist. Die L1-Distanzformel (1) ist ziemlich einfach, wie unten zu sehen ist:</p><p>Visuell kann der L1-Abstand wie im folgenden Bild (in Rot) dargestellt dargestellt werden:</p><p>Die Berechnung der L1-Distanz der folgenden beiden Vektoren  und  würde ergeben </p><p><strong>Wichtig:</strong> Es ist zu beachten, dass die L1-Distanzfunktion nur für die <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/current/query-dsl-script-score-query.html#vector-functions-l1">exakte Vektorsuche</a> (auch Brute-Force-Suche genannt) mit der <code>script_score</code> DSL-Abfrage unterstützt wird, nicht jedoch für <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.11/dense-vector.html#dense-vector-params">die ungefähre kNN-Suche</a> mit der <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.11/knn-search.html#approximate-knn"><code>knn</code></a><a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/8.11/knn-search.html#approximate-knn"> -Suchoption</a> oder der <a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/current/query-dsl-knn-query.html"><code>knn</code></a><a href="https://www.elastic.co/de/guide/en/elasticsearch/reference/current/query-dsl-knn-query.html"> DSL-Abfrage</a>.</p><h3>L2-Distanz</h3><p>Die L2-Distanz, auch euklidische Distanz genannt, zweier Vektoren  und  wird gemessen, indem zunächst die Quadrate der paarweisen Differenz aller ihrer Elemente summiert und dann die Quadratwurzel aus dem Ergebnis gezogen wird. Es ist im Grunde der kürzeste Weg zwischen zwei Punkten. Ähnlich wie bei L1 gilt: Je kleiner der Abstand , desto näher liegen die beiden Vektoren beieinander:</p><p>Der L2-Abstand ist im folgenden Bild rot dargestellt:</p><p>Lassen Sie uns dieselben beiden Beispielvektoren  und  wiederverwenden, die wir für die  -Distanz verwendet haben, und wir können nun die  -Distanz als  berechnen.</p><p>Was die Bewertung betrifft, gilt: Je kleiner der Abstand zwischen zwei Vektoren ist, desto näher (d. h. desto ähnlicher) sind sie sich. Um also eine Punktzahl abzuleiten, müssen wir das Distanzmaß umkehren, sodass die kleinste Distanz die höchste Punktzahl ergibt. Die Berechnung des Scores bei Verwendung der L2-Distanz sieht wie in der folgenden Formel (3) dargestellt aus:</p><p>Bei erneuter Verwendung der Beispielvektoren aus dem vorherigen Beispiel wäre ihr Ergebnis . Zwei Vektoren, die sehr nahe beieinander liegen, erreichen einen Wert von 1, während der Wert zweier Vektoren, die sehr weit voneinander entfernt sind, gegen 0 tendiert.</p><p>Um die Distanzfunktionen L1 und L2 abzuschließen: Eine gute Analogie zum Vergleich besteht darin, sich A und B als zwei Gebäude in Manhattan, New York, vorzustellen. Ein Taxi, das von A nach B fährt, müsste den Weg L1 (Straßen und Alleen) entlangfahren, während ein Vogel wahrscheinlich den Weg L2 (gerade Linie) benutzen würde.</p><h3>Kosinusähnlichkeit</h3><p>Im Gegensatz zu L1 und L2 misst die Kosinusähnlichkeit nicht den Abstand zwischen zwei Vektoren  und , sondern ihren relativen Winkel, d. h., ob sie beide ungefähr in die gleiche Richtung zeigen. Je höher die Ähnlichkeit , desto kleiner ist der Winkel  zwischen den beiden Vektoren und desto „näher“ sind sie sich und desto „ähnlich“ ist ihre vermittelte Bedeutung.</p><p>Um dies zu veranschaulichen, stellen wir uns zwei Menschen in der Wildnis vor, die in unterschiedliche Richtungen schauen. In der folgenden Abbildung blickt die Person in Blau in die durch den Vektor  symbolisierte Richtung und die Person in Rot in die Richtung des Vektors . Je mehr sie ihren Blick in die gleiche Richtung richten (d. h. je näher ihre Vektoren beieinander liegen), desto mehr überlappen sich ihre Sichtfelder, die durch die blauen und roten Bereiche symbolisiert werden. Wie stark sich ihre Sichtfelder überschneiden, ist ihre Kosinusähnlichkeit. Beachten Sie jedoch, dass Person B weiter weg schaut als Person A (d. h., der Vektor  ist länger). Person B könnte einen Berg weit entfernt am Horizont betrachten, während Person A einen nahegelegenen Baum betrachten könnte. Bei der Kosinusähnlichkeit spielt das keine Rolle, da es nur um den Winkel geht.</p><p>Berechnen wir nun diese Kosinusähnlichkeit. Die Formel (4) ist ziemlich einfach, wobei der Zähler aus dem Skalarprodukt beider Vektoren besteht und der Nenner das Produkt ihrer Beträge (also ihrer Länge) enthält:</p><p>Die Kosinusähnlichkeit zwischen  und  wird im Bild unten als Maß für den Winkel zwischen ihnen (in Rot) dargestellt:</p><p>Machen wir einen kurzen Umweg, um zu erklären, was diese Kosinus-Ähnlichkeitswerte konkret bedeuten. Wie im Bild unten zur Darstellung der Kosinusfunktion zu sehen ist, schwanken die Werte immer im Intervall  .</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc0e4eb98ebb64cf3/6a17da287b54f983818b3783/e31145284b8c27d0bd9e3d2831f811388134fd83-1188x272.png" alt="cos-Funktion" /><p>Denken Sie daran, dass der Winkel zweier Vektoren so spitz wie möglich sein muss, damit sie als ähnlich gelten. Idealerweise sollte er nahe bei  liegen, was auf eine perfekte Ähnlichkeit von  hinauslaufen würde. Mit anderen Worten, wenn Vektoren ...</p><ol><li><p>... nahe beieinander <strong>liegt</strong> , nähert sich der Kosinus ihres Winkels  (d. h. nahe )</p></li></ol><ol><li><p>...<strong>unabhängig</strong>, der Kosinus ihres Winkels nähert sich  (d. h. nahe )</p></li></ol><ol><li><p>...<strong>gegenüberliegend</strong>, der Kosinus ihres Winkels nähert sich  (d. h. nahe )</p></li></ol><p>Da wir nun wissen, wie man die Kosinusähnlichkeit zwischen zwei Vektoren berechnet und eine gute Vorstellung davon haben, wie der resultierende Wert zu interpretieren ist, können wir dieselben Beispielvektoren  und  erneut verwenden und ihre Kosinusähnlichkeit mit der Formel (4) berechnen, die wir zuvor gesehen haben.</p><p>Wir erhalten eine Kosinusähnlichkeit von , die näher bei  als bei  liegt, was bedeutet, dass die beiden Vektoren <strong>einigermaßen ähnlich</strong> sind, d. h. nicht perfekt ähnlich, aber auch nicht völlig unabhängig voneinander und sicherlich nicht gegensätzliche Bedeutungen haben.</p><p>Um aus einem beliebigen Kosinus-Ähnlichkeitswert einen positiven Wert abzuleiten, müssen wir die folgende Formel (5) verwenden, die Kosinus-Ähnlichkeitswerte, die innerhalb des Intervalls  schwanken, in Werte im Intervall  umwandelt:</p><p>Der Score für die Stichprobenvektoren  und  wäre somit: .</p><h3>Skalarproduktähnlichkeit</h3><p>Ein Nachteil der Kosinusähnlichkeit besteht darin, dass sie nur den Winkel zwischen zwei Vektoren berücksichtigt, nicht jedoch deren Betrag. Das bedeutet, dass, wenn zwei Vektoren ungefähr in die gleiche Richtung zeigen, einer jedoch viel länger ist als der andere, beide immer noch als ähnlich betrachtet werden. Die Skalarproduktähnlichkeit, auch Skalarproduktähnlichkeit oder innere Produktähnlichkeit genannt, verbessert dies, indem sie sowohl den Winkel als auch die Größe der Vektoren berücksichtigt, was zu einer genaueren Ähnlichkeitsmetrik führt. Um die Größe der Vektoren irrelevant zu machen, erfordert die Skalarproduktähnlichkeit, dass die Vektoren zuerst normalisiert werden, sodass wir letztendlich nur Vektoren der Einheitslänge 1 vergleichen.</p><p>Versuchen wir, dies noch einmal mit denselben zwei Personen wie zuvor zu veranschaulichen, aber diesmal platzieren wir sie in der Mitte eines runden Raums, sodass ihre Sichtweite genau gleich ist (d. h. der Radius des Raums). Ähnlich wie bei der Kosinusähnlichkeit gilt: Je mehr sie sich in die gleiche Richtung drehen (d. h. je näher ihre Vektoren beieinander liegen), desto stärker überlappen sich ihre Sichtfelder. Im Gegensatz zur Kosinusähnlichkeit haben jedoch beide Vektoren die gleiche Länge und beide Bereiche die gleiche Oberfläche, was bedeutet, dass die beiden Personen genau dasselbe Bild in der gleichen Entfernung betrachten. Wie gut sich diese beiden Bereiche überschneiden, zeigt die Ähnlichkeit ihres Skalarprodukts an.</p><p>Bevor wir die Formel für die Ähnlichkeit von Skalarprodukten vorstellen, wollen wir kurz sehen, wie ein Vektor normalisiert werden kann. Es ist ziemlich einfach und kann in zwei trivialen Schritten durchgeführt werden:</p><ol><li><p>Berechnen Sie die Größe des Vektors</p></li><li><p>Teilen Sie jede Komponente durch die in 1 erhaltene Größe.</p></li></ol><p>Nehmen wir als Beispiel den Vektor . Wir können seinen Betrag  berechnen, wie wir bereits bei der Betrachtung der Kosinusähnlichkeit gesehen haben, d. h. . Wenn wir dann jede Komponente des Vektors durch ihren Betrag dividieren, erhalten wir den folgenden normalisierten Vektor :</p><p>Wenn wir den gleichen Prozess für den zweiten Vektor  durchführen, erhalten wir den folgenden normalisierten Vektor :</p><p>Um die Formel für die Ähnlichkeit des Skalarprodukts abzuleiten, können wir die Kosinusähnlichkeit zwischen unseren normalisierten Vektoren  und  mithilfe der Formel (4) berechnen, wie unten gezeigt:</p><p>Und da der Betrag beider normalisierten Vektoren nun  ist, wird die Skalarprodukt-Ähnlichkeitsformel (6) einfach ... Sie haben es erraten, ein Skalarprodukt beider normalisierten Vektoren:</p><p>Im Bild unten zeigen wir die normalisierten Vektoren  und  und können ihre Skalarproduktähnlichkeit als Projektion eines Vektors auf den anderen (in Rot) veranschaulichen.</p><p>Mit unserer neuen Formel (6) können wir die Skalarproduktähnlichkeit unserer beiden normalisierten Vektoren berechnen, die wenig überraschend genau denselben Ähnlichkeitswert wie der Kosinuswert ergibt:</p><p>Bei der Nutzung der Skalarproduktähnlichkeit wird die Punktzahl unterschiedlich berechnet, je nachdem, ob die Vektoren Gleitkomma- oder Bytewerte enthalten. Im ersten Fall wird der Wert auf die gleiche Weise wie für die Kosinusähnlichkeit berechnet, und zwar mit der folgenden Formel (7):</p><p>Wenn der Vektor jedoch aus Bytewerten besteht, wird die Bewertung etwas anders berechnet, wie in der folgenden Formel (8) gezeigt, wobei  die Anzahl der Dimensionen des Vektors ist:</p><p>Eine weitere Einschränkung zur Erzielung genauer Ergebnisse besteht darin, dass alle Vektoren, einschließlich des Abfragevektors, dieselbe Länge haben müssen, aber nicht unbedingt 1.</p><h3>Maximale innere Produktähnlichkeit</h3><p>Seit Version 8.11 gibt es eine neue Ähnlichkeitsfunktion, die weniger Einschränkungen unterliegt als die Skalarproduktähnlichkeit, da die Vektoren nicht normalisiert werden müssen. Der Hauptgrund hierfür wird im <a href="https://www.elastic.co/de/search-labs/blog/lucene-bringing-maximum-inner-product-to-lucene">folgenden Artikel</a> ausführlich erläutert. Um es jedoch kurz zusammenzufassen: Bestimmte Datensätze sind nicht sehr gut für die Normalisierung ihrer Vektoren geeignet (z. B. <a href="https://www.elastic.co/de/search-labs/blog/elasticsearch-cohere-embeddings-support">Cohere-Einbettungen</a>), und dies kann zu Relevanzproblemen führen.</p><p>Die Formel zur Berechnung der maximalen Ähnlichkeit des inneren Produkts ist genau dieselbe wie die Formel für das Skalarprodukt (6). Was sich ändert, ist die Art und Weise, wie der Score berechnet wird, indem die maximale Ähnlichkeit des inneren Produkts mithilfe einer stückweisen Funktion skaliert wird, deren Formel davon abhängt, ob die Ähnlichkeit positiv oder negativ ist, wie in der folgenden Formel (9) gezeigt:</p><p>Diese stückweise Funktion skaliert alle negativen maximalen Ähnlichkeitswerte des inneren Produkts im Intervall  und alle positiven Werte im Intervall  .</p><h2>Zusammenfassend</h2><p>Das war mathematisch gesehen eine ziemliche Reise, aber hier sind ein paar Erkenntnisse, die Sie vielleicht nützlich finden.</p><p>Welche Ähnlichkeitsfunktion Sie verwenden können, hängt letztendlich davon ab, ob Ihre Vektoreinbettungen normalisiert sind oder nicht. Wenn Ihre Vektoren bereits normalisiert sind oder Ihr Datensatz agnostisch gegenüber der Vektornormalisierung ist (d. h. die Relevanz wird nicht beeinträchtigt), können Sie Ihre Vektoren normalisieren und die Skalarproduktähnlichkeit verwenden, da diese viel schneller zu berechnen ist als die Kosinusähnlichkeit, da die Länge jedes Vektors nicht berechnet werden muss. Beim Vergleich von Millionen von Vektoren können sich diese Berechnungen ziemlich summieren.</p><p>Wenn Ihre Vektoren nicht normalisiert sind, haben Sie zwei Möglichkeiten:</p><ol><li><p>Verwenden Sie die Kosinusähnlichkeit, wenn die Normalisierung Ihrer Vektoren keine Option ist</p></li><li><p>Verwenden Sie die neue maximale Ähnlichkeit des inneren Produkts, wenn die Größe Ihrer Vektoren zur Bewertung beitragen soll, da sie eine Bedeutung haben (z. B. Cohere-Einbettungen).</p></li></ol><p>An diesem Punkt sollte es für Sie Sinn ergeben, die Distanz oder Ähnlichkeit zwischen Vektoreinbettungen zu berechnen und ihre Werte abzuleiten. Wir hoffen, dass dieser Artikel für Sie hilfreich war.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/vector-similarity-measures-and-scoring</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/vector-similarity-measures-and-scoring</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <dc:creator><![CDATA[Valentin Crettaz]]></dc:creator>
    <pubDate>Mon, 13 May 2024 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>