Moteur de recherche
L'approche traditionnelle pour la génération de candidats à l'aide de la recherche k-NN (k-nearest voisin) est précise mais très lente, en particulier pour les systèmes à grande échelle où une très faible latence est requise.
La recherche ANN (voisin le plus proche) utilise des outils qui restructurent les index plus efficacement et réduisent la dimensionnalité des vecteurs recherchables. L'utilisation de cette approche est un compromis entre précision et faible latence. En utilisant ANN avec k-NN, les moteurs de recherche peuvent approcher les voisins les plus proches de documents de requête spécifiques et extraire les candidats pertinents avec une très faible latence, ce qui améliore la latence de recherche pour les ensembles de données volumineux. OpenSearch 2.11 prend en charge les moteurs de recherche NMSLIB, FAISS et LUCENE, qui implémentent tous ANN. Pour plus d'informations, voir k-NN rechercher avec des filtres.
Lucene Engine
Le filtre Lucene K-NN utilise le graphique HNSW dans l'implémentation.
L'exemple suivant illustre la création d'un index à l'aide du moteur Lucene :
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
}
}
}
}
}
}
Pour utiliser un pipeline d'inclusion sur l'index, ajoutez le pipeline dans l'appel d'API, en vous assurant que le modèle déployé sur le pipeline d'inclusion a la même dimensionnalité que le vecteur KNN indiqué dans l'appel d'API, comme suit :
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
}
}
}
}
}
}
Moteur Faiss
Pour le moteur Faiss, vous pouvez utiliser l'algorithme HNSW ou l'algorithme IVF pour implémenter le filtre ANN. Pour plus d'informations sur les paramètres de configuration de Faiss, reportez-vous à la section Faiss k-NN filter Implementation.
Les exemples suivants montrent comment créer un index à l'aide du moteur Faiss.
Sans pipeline d'inclusion
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"
}
}
}
}
}
Avec un pipeline d'inclusion
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"
}
}
}
}
}
Moteur NMSLIB
L'exemple suivant montre comment créer un index à l'aide du moteur nmslib :
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"
}
}
}
}
Espaces
Chacun des moteurs pris en charge utilise une certaine heuristique pour comparer l'intégration de documents et récupérer les documents les plus pertinents en mesurant la similarité. Vous avez le choix entre plusieurs métriques d'objectif à utiliser. Les mesures que vous choisissez dépendent du cas d'utilisation, du modèle et des données personnalisés. Pour plus d'informations, notamment un tableau présentant les options disponibles parmi lesquelles choisir, reportez-vous à Espaces.