Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Vektorsuche für Amazon DocumentDB
Die Vektorsuche ist eine Methode, die beim maschinellen Lernen verwendet wird, um ähnliche Datenpunkte zu einem bestimmten Datenpunkt zu finden, indem ihre Vektordarstellungen mithilfe von Entfernungs- oder Ähnlichkeitsmetriken verglichen werden. Je näher sich die beiden Vektoren im Vektorraum befinden, desto ähnlicher werden die zugrunde liegenden Elemente betrachtet. Diese Technik hilft dabei, die semantische Bedeutung der Daten zu erfassen. Dieser Ansatz ist in verschiedenen Anwendungen nützlich, z. B. in Empfehlungssystemen, bei der Verarbeitung natürlicher Sprache und bei der Bilderkennung.
Die Vektorsuche für Amazon DocumentDB kombiniert die Flexibilität und die umfassenden Abfragefunktionen einer JSON-based Dokumentendatenbank mit der Leistungsfähigkeit der Vektorsuche. Wenn Sie Ihre vorhandenen Amazon DocumentDB-Daten oder eine flexible Dokumentdatenstruktur verwenden möchten, um Anwendungsfälle für maschinelles Lernen und generative KI zu erstellen, wie z. B. semantische Suchfunktionen, Produktempfehlungen, Personalisierung, Chatbots, Betrugserkennung und Anomalieerkennung, dann ist die Vektorsuche für Amazon DocumentDB die ideale Wahl für Sie. Die Vektorsuche ist in instanzbasierten Amazon DocumentDB 5.0-Clustern verfügbar.
Topics
Vektoren einfügen
Um Vektoren in Ihre Amazon DocumentDB-Datenbank einzufügen, können Sie die vorhandenen Einfügemethoden verwenden:
Beispiel
Im folgenden Beispiel wird eine Sammlung von fünf Dokumenten in einer Testdatenbank erstellt. Jedes Dokument enthält zwei Felder: den Produktnamen und die entsprechende Vektoreinbettung.
db.collection.insertMany([ {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]}, {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]}, {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]}, {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]}, {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]} ]);
Einen Vektorindex erstellen
Amazon DocumentDB unterstützt sowohl die Indexierung von Hierarchical Navigable Small World (HNSW) als auch die Indexierungsmethoden Inverted File with Flat Compression (IVFflat). Ein IVFFlat-Index unterteilt Vektoren in Listen und durchsucht anschließend eine ausgewählte Teilmenge der Listen, die dem Abfragevektor am nächsten sind. Andererseits organisiert ein HNSW-Index die Vektordaten in einem vielschichtigen Diagramm. HNSW hat zwar im Vergleich zu IVFflat langsamere Erstellungszeiten, bietet aber eine bessere Abfrageleistung und einen besseren Abruf. Im Gegensatz zu IVFflat ist bei HNSW kein Trainingsschritt erforderlich, sodass der Index ohne anfängliches Laden der Daten generiert werden kann. Verwenden Sie für die meisten Anwendungsfälle den HNSW-Indextyp für die Vektorsuche.
Wenn Sie keinen Vektorindex erstellen, führt Amazon DocumentDB eine exakte Suche nach dem nächsten Nachbarn durch und gewährleistet so einen perfekten Abruf. In Produktionsszenarien ist Geschwindigkeit jedoch entscheidend. Verwenden Sie Vektorindizes, die einen gewissen Rückruf gegen eine höhere Geschwindigkeit eintauschen könnten. Es ist wichtig zu beachten, dass das Hinzufügen eines Vektorindexes zu unterschiedlichen Abfrageergebnissen führen kann.
Vorlagen
Sie können Folgendes createIndex oder runCommand Vorlagen verwenden, um einen Vektorindex für ein Vektorfeld zu erstellen:
| Parameter | Anforderung | Datentyp | Description | Wert (e) |
|---|---|---|---|---|
|
|
optional |
Zeichenfolge |
Gibt den Namen des Indexes an. |
Alphanumerisch |
|
|
optional |
Gibt den Indextyp an. |
Unterstützt: hnsw oder ivfflat Standard: HNSW (Engine-Patch 3.0.4574 ab) |
|
|
|
Erforderlich |
Ganzzahl |
Gibt die Anzahl der Dimensionen in den Vektordaten an. |
Maximal 2.000 Dimensionen. |
|
|
Erforderlich |
Zeichenfolge |
Gibt die Entfernungsmetrik an, die für die Ähnlichkeitsberechnung verwendet wird. |
|
|
|
erforderlich für IVFflat |
Ganzzahl |
Gibt die Anzahl der Cluster an, die der IVFFlat-Index verwendet, um die Vektordaten zu gruppieren. Die empfohlene Einstellung ist # von documents/1000 für bis zu 1 Million Dokumente und |
Minimum: 1 Maximum: Weitere Informationen finden Sie in der Tabelle für die einzelnen Instanztypen Funktionen und Einschränkungen unten. |
|
|
optional |
Ganzzahl |
Gibt die maximale Anzahl von Verbindungen für einen HNSW-Index an |
Standard: 16 Bereich [2, 100] |
|
|
optional |
Ganzzahl |
Gibt die Größe der dynamischen Kandidatenliste für die Erstellung des Diagramms für den HNSW-Index an.
|
Standard: 64 Bereich [4, 1000] |
Es ist wichtig, dass Sie den Wert von Unterparametern wie lists für ivfFlat m und efConstruction für HNSW entsprechend festlegen accuracy/recall, da sich dies auf die Erstellungszeit und die Leistung Ihrer Suche auswirkt. Ein höherer Listenwert erhöht die Geschwindigkeit der Abfrage, da dadurch die Anzahl der Vektoren in jeder Liste reduziert wird, was zu kleineren Regionen führt. Eine kleinere Regionsgröße kann jedoch zu mehr Abruffehlern führen, was zu einer geringeren Genauigkeit führt. Bei HNSW erhöht eine Erhöhung des Werts von m und die Genauigkeit, efConstruction erhöht aber auch die Zeit und Größe der Indexerstellung. Im Folgenden sind einige Beispiele aufgeführt:
Beispiele
Eine Indexdefinition abrufen
Sie können die Details Ihrer Indizes, einschließlich Vektorindizes, mit dem getIndexes folgenden Befehl anzeigen:
Beispiel
db.collection.getIndexes()
Beispielausgabe
[
{
"v" : 4,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.collection"
},
{
"v" : 4,
"key" : {
"vectorEmbedding" : "vector"
},
"name" : "myIndex",
"vectorOptions" : {
"type" : "ivfflat",
"dimensions" : 3,
"similarity" : "euclidean",
"lists" : 1
},
"ns" : "test.collection"
}
]
Abfragen von Vektoren
Amazon DocumentDB unterstützt zwei Vektor-Suchoperatoren für die Abfrage von Vektoren:
Klassischer Vektor-Suchoperator
Verwenden Sie die folgende Vorlage, um einen Vektor abzufragen:
db.collection.aggregate([ { $search: { "vectorSearch": { "vector": <query vector>, "path": "<vectorField>", "similarity": "<distance metric>", "k": <number of results>, "probes":<number of probes> [applicable for IVFFlat], "efSearch":<size of the dynamic list during search> [applicable for HNSW] } } } ]);
| Parameter | Anforderung | Typ | Description | Wert (e) |
|---|---|---|---|---|
|
|
Erforderlich |
operator |
Wird im $search-Befehl verwendet, um die Vektoren abzufragen. |
|
|
|
Erforderlich |
Array |
Gibt den Abfragevektor an, der verwendet wird, um ähnliche Vektoren zu finden. |
|
|
|
Erforderlich |
Zeichenfolge |
Definiert den Namen des Vektorfeldes. |
|
|
|
Erforderlich |
Ganzzahl |
Gibt die Anzahl der Ergebnisse an, die die Suche zurückgibt. |
|
|
|
Erforderlich |
Zeichenfolge |
Gibt die Entfernungsmetrik an, die für die Ähnlichkeitsberechnung verwendet wird. |
|
|
|
optional |
Ganzzahl |
Die Anzahl der Cluster, die von der Vektorsuche untersucht werden sollen. Ein höherer Wert ermöglicht einen besseren Abruf auf Kosten der Geschwindigkeit. Er kann auf die Anzahl der Listen für die genaue Suche nach dem nächsten Nachbarn gesetzt werden (ab diesem Zeitpunkt verwendet der Planer den Index nicht mehr). Die empfohlene Einstellung, um mit der Feinabstimmung zu beginnen, ist |
Standard: 1 |
|
|
optional |
Ganzzahl |
Gibt die Größe der dynamischen Kandidatenliste an, die der HNSW-Index bei der Suche verwendet. Ein höherer Wert von |
Standard: 40 Bereich [1, 1000] |
Es ist wichtig, den Wert von efSearch (HNSW) oder probes (IVFflat) genau einzustellen, um die gewünschte Leistung und Genauigkeit zu erzielen. Sehen Sie sich die folgenden Beispieloperationen an:
Beispielausgabe
Die Ausgabe dieser Operation sieht in etwa wie folgt aus:
{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] }
{ "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }
$VectorSearch-Operator (ab Amazon DocumentDB 8.0 verfügbar)
Verwenden Sie die folgende Vorlage, um einen Vektor abzufragen:
db.collection.aggregate([ { "$vectorSearch": { "exact": true | false, "index": "<index-name>" [supports only HNSW index], "limit": <number-of-results> [same as k], "path": "<vector field-to-search>", "queryVector": <array-of-numbers>, "numCandidates": <number-of-candidates> [same as efSearch], } }])
Funktionen und Einschränkungen
Versionskompatibilität
Die Vektorsuche für Amazon DocumentDB ist nur in instanzbasierten Clustern von Amazon DocumentDB 5.0+ verfügbar.
Vektoren
Amazon DocumentDB kann Vektoren mit bis zu 2.000 Dimensionen indizieren. Bis zu 16.000 Dimensionen können jedoch ohne Index gespeichert werden.
Indizes
-
Für die Erstellung eines IVFFlat-Indexes ist die empfohlene Einstellung für den Parameter Listen die Anzahl von documents/1000 für bis zu 1 Million Dokumente und
sqrt(# of documents)für über 1 Million Dokumente. Aufgrund einer Arbeitsspeicherbeschränkung unterstützt Amazon DocumentDB je nach Anzahl der Dimensionen einen bestimmten Maximalwert des Listenparameters. Zu Ihrer Information enthält die folgende Tabelle die Maximalwerte der Listenparameter für Vektoren mit 500, 1000 und 2.000 Dimensionen:Instance-Typ Listen mit 500 Dimensionen Listen mit 1000 Dimensionen Listen mit 2000 Dimensionen t3.med
372
257
150
r5l
915
741
511
r 5, xl
1.393
1.196
901
r5,2xl
5.460
5.230
4.788
r5,4xl
7.842
7.599
7.138
r 5,8 xl
11.220
10.974
10.498
r5,12xl
13.774
13.526
13.044
r5,16xl
15.943
15.694
15.208
r5,24xl
19.585
19.335
18.845
Bei Vektorindizes
partialwerden keine anderen Indexoptionen wiecompound,sparseoder unterstützt.Die parallele Indexerstellung wird für den HNSW-Index in Amazon DocumentDB 5.0 nicht unterstützt.
Vektor-Abfrage
Bei einer Vektor-Suchanfrage ist es wichtig, die Parameter genau abzustimmen, z.
probesB.efSearchfür optimale Ergebnisse. Je höher der Wert vonprobesoder derefSearchParameter, desto höher der Abruf und desto niedriger die Geschwindigkeit. Die empfohlene Einstellung, um mit der Feinabstimmung der Sondenparameter zu beginnen, istsqrt(# of lists).
Bewährte Methoden
Erfahren Sie mehr über bewährte Methoden für die Arbeit mit der Vektorsuche in Amazon DocumentDB. Dieser Abschnitt wird fortlaufend aktualisiert, wenn neue bewährte Methoden identifiziert werden.
-
Die Indexerstellung von Inverted File with Flat Compression (IVFflat) beinhaltet das Clustern und Organisieren der Datenpunkte auf der Grundlage von Ähnlichkeiten. Damit ein Index effektiver ist, laden Sie einige Daten, bevor Sie den Index erstellen.
-
Bei Vektor-Suchanfragen ist es wichtig, die Parameter wie „
probesoder“ genau abzustimmen, umefSearchoptimale Ergebnisse zu erzielen. Je höher der Wert desefSearchParametersprobesoder, desto höher ist der Abruf und desto niedriger ist die Geschwindigkeit. Die empfohlene Einstellung, um mit der Feinabstimmung desprobesParameters zu beginnen, istsqrt(lists).
Ressourcen