🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI
  • Home
  • Blog
  • Matroschka-Einbettungen: Details in verschiedenen Maßstäben

Matroschka-Einbettungen: Details in verschiedenen Maßstäben

  • Engineering
October 30, 2024
Stefan Webb, David Wang

Was sind Matryoshka-Embeddings?

Bei der Entwicklung effizienter Vektorsuchsysteme besteht eine der größten Herausforderungen darin, die Speicherkosten zu verwalten und gleichzeitig eine akzeptable Latenzzeit und Wiederauffindbarkeit zu gewährleisten. Moderne Einbettungsmodelle geben Vektoren mit Hunderten oder Tausenden von Dimensionen aus, was zu einem erheblichen Speicher- und Rechenaufwand für den Rohvektor und den Index führt.

Traditionell wird der Speicherbedarf durch die Anwendung einer Quantisierungs- oder Dimensionalitätsreduzierungsmethode unmittelbar vor dem Aufbau des Index reduziert. Wir können beispielsweise Speicherplatz einsparen, indem wir die Genauigkeit mithilfe der Produktquantisierung (PQ) oder die Anzahl der Dimensionen mithilfe der Hauptkomponentenanalyse (PCA) verringern. Diese Methoden analysieren die gesamte Vektormenge, um eine kompaktere Menge zu finden, die die semantischen Beziehungen zwischen den Vektoren beibehält.

Diese Standardansätze sind zwar effektiv, aber sie reduzieren die Präzision oder Dimensionalität nur einmal und auf einer einzigen Ebene. Aber was wäre, wenn wir mehrere Detailschichten gleichzeitig beibehalten könnten, wie eine Pyramide von immer präziseren Darstellungen?

Das ist die Matrjoschka-Einbettung. Diese cleveren Konstrukte, die nach den russischen Schachtelpuppen benannt sind (siehe Abbildung), betten mehrere Darstellungsebenen in einen einzigen Vektor ein. Im Gegensatz zu herkömmlichen Nachbearbeitungsmethoden erlernen Matryoshka-Einbettungen diese Multiskalenstruktur während des anfänglichen Trainingsprozesses. Das Ergebnis ist bemerkenswert: Die vollständige Einbettung erfasst nicht nur die Semantik der Eingabe, sondern jedes verschachtelte Untergruppenpräfix (erste Hälfte, erstes Viertel usw.) liefert eine kohärente, wenn auch weniger detaillierte Darstellung.

Figure: Visualization of Matryoshka embeddings with multiple layers of detail Abbildung: Visualisierung von Matrjoschka-Einbettungen mit mehreren Detailschichten

Abbildung: Visualisierung von Matrjoschka-Einbettungen mit mehreren Detailschichten

Dieser Ansatz steht in scharfem Kontrast zu herkömmlichen Einbettungen, bei denen die Verwendung beliebiger Teilmengen der Vektordimensionen in der Regel die semantische Bedeutung zerstört. Mit Matryoshka-Einbettungen können Sie die Granularität wählen, die ein optimales Gleichgewicht zwischen der Präzision Ihrer spezifischen Aufgabe und den Rechenkosten herstellt.

Sie brauchen eine schnelle, ungefähre Suche? Verwenden Sie die kleinste "Puppe". Benötigen Sie maximale Genauigkeit? Verwenden Sie die vollständige Einbettung. Diese Flexibilität macht sie besonders wertvoll für Systeme, die sich an unterschiedliche Leistungsanforderungen oder Ressourcenbeschränkungen anpassen müssen.

Inferenz

Eine wertvolle Anwendung von Matryoshka-Einbettungen ist die Beschleunigung von Ähnlichkeitssuchen ohne Einbußen bei der Wiedererkennung. Durch die Nutzung kleinerer Teilmengen von Abfrage- und Datenbankeinbettungen - wie z. B. die ersten 1/32 ihrer Dimensionen - können wir einen Index über diesen reduzierten Raum erstellen, der immer noch einen Großteil der Ähnlichkeitsinformationen beibehält. Die ersten Ergebnisse aus diesem kleineren Einbettungsraum können direkt verwendet werden. Es gibt jedoch auch eine Technik, mit der die Wiederauffindbarkeit erhöht und jede geringfügige Verringerung durch die Dimensionsreduzierung berücksichtigt werden kann, wodurch dieser Ansatz sowohl effizient als auch effektiv für Ähnlichkeitssuchaufgaben ist.

Figure: How the funnel search works with Matryoshka embeddings Abbildung: Wie die Trichtersuche mit Matryoshka-Einbettungen funktioniert

Abbildung: Funktionsweise der Trichtersuche mit Matryoshka-Einbettungen

Um die Ähnlichkeitssuche effizient zu beschleunigen und gleichzeitig die Genauigkeit beizubehalten, können wir einen "Trichtersuchansatz" verwenden. Zunächst führen wir eine anfängliche Ähnlichkeitssuche durch, bei der nur die ersten 1/32 der Einbettungsdimensionen verwendet werden, wodurch ein breiter Pool von Kandidaten entsteht. Anschließend werden diese Kandidaten auf der Grundlage ihrer Ähnlichkeit mit der Abfrage unter Verwendung der ersten 1/16 der Dimensionen neu eingestuft, wodurch ein Teil der Liste beschnitten wird. Dieser Prozess wird iterativ fortgesetzt, wobei das Reranking und Pruning mit immer größeren Teilmengen der Einbettungsdimensionen durchgeführt wird - 1/8, 1/4 und so weiter. Wichtig ist, dass wir nur eine anfängliche Ähnlichkeitssuche in diesem niedrigdimensionalen Raum durchführen und die Einbettung der Suchanfrage in einem einzigen Durchlauf des Einbettungsmodells berechnet wird. Dieser Trichterprozess grenzt die Kandidaten bei jedem Schritt ein und ist schneller und effizienter als die direkte Suche im volldimensionalen Raum. Das Ziehen vieler Übereinstimmungen aus dem 1/32-dimensionalen Raum und deren Verfeinerung durch die Trichtersuche kann die Ähnlichkeitssuche erheblich beschleunigen und gleichzeitig eine hohe Trefferquote beibehalten.

Ausbildung

Gehen wir nun auf einige technische Details ein. Die Methode ist sehr einfach zu handhaben. Betrachten wir den Kontext der Feinabstimmung eines BERT-Modells für die Satzeinbettung. Um ein BERT-Modell, das zuvor auf den Verlust von maskierten Token trainiert wurde, in ein Satzeinbettungsmodell umzuwandeln, bilden wir die Satzeinbettung als Durchschnitt der letzten Schicht, d. h. den Durchschnitt der kontextualisierten Einbettungen pro Token.

Eine Wahl des Trainingsziels ist der Cosinus-Satz-Verlust (CoSENT), L(u,v;s)L(u, v; s) L v s . Es gibt ein Paar von Satzeinbettungen ein, u,vu,v u v, und ihren gewünschten Ähnlichkeitswert, ss s (siehe den Link oben für die Formel). Um nun Matryoshka-Einbettungen zu lernen, nehmen wir eine kleine Änderung am Trainingsziel vor:

LM(u,v)=w0L(u1:d,v1:d)+w1L(u1:d/2,v1:d/2)+w2L(u1:d/4,v1:d/4)+⋯L_M(u, v) = w_0L(u_{1:d}, v_{1:d}) + w_1L(u_{1:d/2}, v_{1:d/2}) + w_2L(u_{1:d/4}, v_{1:d/4}) + \cdots L v = w L1, v 1) + w L1, v 1) + w L1, v

wobei die Summe fortgesetzt wird, indem der Verlust auf der Hälfte der Eingabe des vorherigen Terms berechnet wird, bis ein Informationsengpass erreicht wird. Die Autoren schlagen vor, Folgendes festzulegen

w0=w1=⋯=1w_0=w_1=\cdots=1 w=

Einfach ausgedrückt, ist der Matryoshka-Verlust eine gewichtete Summe des ursprünglichen Verlusts über rekursive Teilmengen der Eingabe.

Eine wichtige Erkenntnis aus der obigen Gleichung ist, dass der Matryoshka-Verlust ein effizientes Lernen von Repräsentationen auf mehreren Skalen ermöglicht, indem Gewichte über die Einbettungsmodelle hinweg geteilt werden (dasselbe Modell wird z. B. für die Kodierung von u1 verwendet :du_{1:d} u und u1:d/2u_{1:d/2} u ) und die gemeinsame Nutzung von Dimensionen über Skalen hinweg(u1:d/2u_{1:d/2} u ist eine Teilmenge von uu u).

Matrjoschka-Einbettungen und Milvus

Milvus unterstützt nahtlos jedes Matryoshka-Einbettungsmodell, das über Standardbibliotheken wie pymilvus.model, sentence-transformers oder andere ähnliche Werkzeuge geladen werden kann. Aus Sicht des Systems gibt es keinen funktionalen Unterschied zwischen einem normalen Einbettungsmodell und einem speziell für die Erzeugung von Matryoshka-Einbettungen trainierten Modell.

Beliebte Matryoshka-Einbettungsmodelle sind unter anderem:

Eine vollständige Anleitung zur Verwendung von Matryoshka-Einbettungen mit Milvus finden Sie im Notizbuch Funnel Search with Matryoshka Embeddings.

Zusammenfassung

Mit Matryoshka-Embedding können Entwickler verkürzte Embeddings erstellen, ohne die semantische Integrität zu opfern, was sie ideal für eine effizientere Suche und Speicherung macht. Sie können ein bestehendes Modell modifizieren, aber es stehen auch bereits trainierte Optionen zur Verfügung, z. B. die von OpenAI und Hugging Face.

Eine aktuelle Einschränkung ist jedoch die Knappheit an quelloffenen Matryoshka-Einbettungen, von denen nur wenige auf dem Hugging Face Hub verfügbar sind. Außerdem sind diese Modelle oft nicht explizit als "Matryoshka" gekennzeichnet, was ihre Auffindbarkeit erschwert. Es bleibt zu hoffen, dass mit wachsendem Interesse bald eine breitere Verfügbarkeit und eine klarere Kennzeichnung folgen werden.

Sind Sie bereit, Ihre Suchfunktionen zu optimieren? Starten Sie noch heute mit Milvus + Matrjoschka-Einbettungen!

Ressourcen

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Weiterlesen