Suchmaschinen
Der traditionelle Ansatz für die Kandidatengenerierung mit k-NN-Suche (k-nächste Nachbarn) ist genau, aber sehr langsam, insbesondere für Großsysteme, bei denen eine sehr geringe Latenz erforderlich ist.
Bei der ANN-Suche (ca. nächster Nachbar) werden Tools verwendet, mit denen Indizes effizienter umstrukturiert und die Dimensionalität durchsuchbarer Vektoren reduziert werden kann. Die Verwendung dieses Ansatzes ist ein Kompromiss zwischen Genauigkeit und geringer Latenz. Durch die Nutzung von ANN mit k-NN können Suchmaschinen die nächsten Nachbarn bestimmter Abfragedokumente annähern und relevante Kandidaten mit sehr geringer Latenz abrufen, wodurch die Suchlatenz für große Datensätze verbessert wird. OpenSearch 2.11 unterstützt die NMSLIB-, FAISS- und LUCENE-Suchmaschinen, die alle ANN implementieren. Weitere Informationen finden Sie unter k-NN-Suche mit Filtern.
Lucene Engine
Der Lucene K-NN-Filter verwendet das HNSW-Diagramm in der Implementierung.
Das folgende Beispiel zeigt das Erstellen eines Index mit der Lucene-Engine:
PUT /test-index
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100,
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"properties": {
"location": {
"type": "knn_vector",
"dimension": 2,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "lucene",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
Um eine Aufnahmepipeline für den Index zu verwenden, fügen Sie die Pipeline im API-Aufruf hinzu, und stellen Sie sicher, dass das in der Aufnahmepipeline bereitgestellte Modell dieselbe Dimensionalität wie der im API-Aufruf angegebene KNN-Vektor aufweist:
PUT /test-lucene-index
{
"settings": {
"default_pipeline": "test-nlp-pipeline",
"index": {
"knn": true,
"knn.algo_param.ef_search": 100,
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"properties": {
"location": {
"type": "knn_vector",
"dimension": 2,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "lucene",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
Faiss-Engine
Für die Faiss-Engine können Sie den HNSW-Algorithmus oder den IVF-Algorithmus verwenden, um den ANN-Filter zu implementieren. Einzelheiten zu den Faiss-Konfigurationsparametern finden Sie unter Faiss k-NN-Filterimplementierung.
Die folgenden Beispiele zeigen, wie Sie mit der Faiss-Engine einen Index erstellen.
Ohne Aufnahmepipeline
PUT /test-faiss-index
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"item_vector": {
"type": "knn_vector",
"dimension": 3,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "faiss"
}
}
}
}
}
Mit einer Aufnahme-Pipeline
PUT /test-faiss-index
{
"settings": {
"index": {
"knn": true
},
"default_pipeline": "test-nlp-pipeline"
},
"mappings": {
"properties": {
"item_vector": {
"type": "knn_vector",
"dimension": 3,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "faiss"
}
}
}
}
}
NMSLIB-Engine
Das folgende Beispiel zeigt, wie Sie einen Index mit der nmslib-Engine erstellen:
PUT /nmslib-index
{
"settings": {
"index.knn": true,
"default_pipeline": "test-nlp-pipeline"
},
"mappings": {
"properties": {
"passage_embedding": {
"type": "knn_vector",
"dimension": 1024,
"method": {
"name":"hnsw",
"engine":"nmslib",
"space_type": "cosinesimil"
}
},
"passage_text": {
"type": "text"
}
}
}
}
Räume
Jedes der unterstützten Engines verwendet einige Heuristiken, um die Einbettung von Dokumenten zu vergleichen und die relevantesten Dokumente abzurufen, indem die Ähnlichkeit gemessen wird. Sie können mehrere Zielkennzahlen verwenden. Die ausgewählten Metriken hängen vom benutzerdefinierten Anwendungsfall, Modell und den Daten ab. Weitere Informationen, einschließlich einer Tabelle mit den verfügbaren Optionen, finden Sie unter Bereiche.