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.