Mecanismos de pesquisa
A abordagem tradicional para geração de candidatos usando a pesquisa k-NN (vizinhos mais próximos de k) é precisa, mas muito lenta, especialmente para sistemas de grande escala onde a latência muito baixa é necessária.
A pesquisa ANN (aproximadamente vizinho mais próximo) utiliza ferramentas que reestruturam os índices de forma mais eficiente e reduzem a dimensionalidade dos vetores pesquisáveis. O uso dessa abordagem é uma compensação entre precisão e baixa latência. Ao utilizar a ANN com k-NN, os mecanismos de pesquisa podem aproximar os vizinhos mais próximos de documentos de consulta específicos e recuperar candidatos relevantes com latência muito baixa, melhorando a latência de pesquisa para grandes conjuntos de dados. O OpenSearch 2.11 suporta os motores de busca NMSLIB, FAISS e LUCENE, que implementam a ANN. Para obter mais informações, consulte pesquisa k-NN com filtros.
Lucene Engine
O filtro Lucene K-NN usa o gráfico HNSW na implementação.
O exemplo a seguir mostra a criação de um índice usando o mecanismo 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
}
}
}
}
}
}
Para usar um pipeline de ingestão no índice, adicione o pipeline na chamada de API, garantindo que o modelo implantado no pipeline de ingestão tenha a mesma dimensionalidade do vetor KNN especificado na chamada de API, da seguinte forma:
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
}
}
}
}
}
}
Motor Faiss
Para o mecanismo Faiss, você pode usar o algoritmo HNSW ou o algoritmo IVF para implementar o filtro ANN. Consulte Implementação do filtro Faiss k-NN para obter detalhes sobre os parâmetros de configuração do Faiss.
Os exemplos a seguir mostram como criar um índice usando o mecanismo Faiss.
Sem Pipeline de Ingestão
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"
}
}
}
}
}
Com um pipeline de ingestão
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"
}
}
}
}
}
Mecanismo NMSLIB
O exemplo a seguir mostra como criar um índice usando o mecanismo 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"
}
}
}
}
Espaços
Cada um dos motores suportados usa alguma heurística para comparar a incorporação de documentos e recuperar os documentos mais relevantes, medindo a similaridade. Você tem a opção de várias métricas objetivas para usar. As métricas escolhidas dependem do caso de uso personalizado, do modelo e dos dados. Para obter mais informações, incluindo uma tabela mostrando as opções disponíveis para escolha, consulte Espaços.