Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Durante a execução da consulta em vetores, o mecanismo de pesquisa procura vetores semelhantes para encontrar os melhores candidatos a serem retornados nos resultados da pesquisa. Dependendo de como você indexou o conteúdo vetorial, a pesquisa por correspondências relevantes é completa ou restrita aos vizinhos mais próximos para processamento mais rápido. Depois que os candidatos são encontrados, as métricas de similaridade são usadas para pontuar cada resultado com base na força da correspondência.
Este artigo explica os algoritmos usados para encontrar correspondências relevantes e as métricas de similaridade usadas para pontuação. Também oferece dicas para aumentar a relevância se os resultados da busca não atenderem às expectativas.
Algoritmos usados na busca em vetores
Os algoritmos de pesquisa de vetor incluem:
KNN (K-Vizinhos Mais Próximos) exaustivo, que executa uma verificação de força bruta de todo o espaço vetor.
HNSW (Hierarchical Navigable Small World), que executa uma pesquisa de ANN (Vizinho Mais Próximo Aproximado).
Somente os campos de vetor marcados como searchable no índice ou searchFields na consulta são usados para pesquisa e pontuação.
Sobre o KNN exaustivo
O KNN exaustivo calcula as distâncias entre todos os pares de pontos de dados e encontra os k vizinhos mais próximos exatos para um ponto de consulta. Como o algoritmo não requer acesso aleatório rápido de pontos de dados, o KNN não consome a cota de tamanho do índice vetor . No entanto, ele fornece o conjunto global dos vizinhos mais próximos.
O KNN exaustivo é computacionalmente intensivo, portanto, use-o para conjuntos de dados pequenos a médios ou quando a necessidade de precisão superar a necessidade de desempenho da consulta. Outro caso de uso é a criação de um conjunto de dados para avaliar o recall de um algoritmo ANN, pois o KNN exaustivo pode ser usado para criar o conjunto de verdades básicas dos vizinhos mais próximos.
Sobre o HNSW
O HNSW é um algoritmo ANN otimizado para aplicativos de alta recuperação e baixa latência com distribuição de dados desconhecida ou volátil. Durante a indexação, o HNSW cria estruturas de dados extras que organizam pontos de dados em um grafo hierárquico. Durante a execução da consulta, o HNSW navega por esse grafo para encontrar as correspondências mais relevantes, permitindo pesquisas de vizinho mais próximas eficientes.
O HNSW requer que todos os pontos de dados residam na memória para acesso aleatório rápido, o que consome a cota de tamanho do índice vetor . Esse design equilibra a precisão da pesquisa com eficiência computacional e torna o HNSW adequado para a maioria dos cenários, especialmente ao pesquisar conjuntos de dados maiores.
O HNSW oferece vários parâmetros de configuração ajustáveis para otimizar a taxa de transferência, a latência e o recall do aplicativo de pesquisa. Por exemplo, os campos que especificam HNSW também dão suporte a KNN exaustivo usando o parâmetro solicitação de consulta"exhaustive": true. No entanto, os campos indexados para exhaustiveKnn não dão suporte a consultas HNSW porque as estruturas de dados extras que habilitam a pesquisa eficiente não existem.
Sobre ANN
ANN é uma classe de algoritmos para encontrar correspondências no espaço de vetor. Essa classe de algoritmos usa diferentes estruturas de dados ou métodos de particionamento de dados para reduzir significativamente o espaço de pesquisa e acelerar o processamento de consultas.
Algoritmos ANN sacrificam alguma precisão, mas oferecem recuperação escalonável e mais rápida de vizinhos mais próximos aproximados, o que os torna ideais para equilibrar a precisão e a eficiência em aplicativos modernos de recuperação de informações. Você pode ajustar os parâmetros do seu algoritmo para refinar os requisitos de recall, latência, memória e uso de disco do seu aplicativo de pesquisa.
O Azure AI Search usa o HNSW para o algoritmo ANN.
Como funciona a pesquisa de vizinho mais próximo
As consultas vetoriais são executadas em um espaço de inserção que consiste em vetores gerados do mesmo modelo de inserção. Geralmente, o valor de entrada em uma solicitação de consulta é alimentado no mesmo modelo de machine learning que gerou as inserções no índice vetorial. A saída é um vetor no mesmo espaço de inserção. Como os vetores semelhantes são agrupados juntos, encontrar correspondências é equivalente a localizar os vetores mais próximos do vetor de consulta e retornar os documentos associados como resultado da pesquisa.
Por exemplo, se uma solicitação de consulta for sobre hotéis, o modelo mapeará a consulta para um vetor que existe em algum lugar no cluster de vetores que representam documentos sobre hotéis. Identificar quais vetores são os mais semelhantes à consulta, com base em uma métrica de similaridade, determina quais documentos são os mais relevantes.
Quando os campos de vetor são indexados para KNN completo, a consulta é executada em relação a "todos os vizinhos". Para campos indexados para HNSW, o mecanismo de pesquisa usa um grafo do HNSW para pesquisar um subconjunto de nós no índice vetorial.
Como criar o grafo do HNSW
Durante a indexação, o serviço de busca constrói o grafo do HNSW. A meta de indexar um novo vetor em um grafo do HNSW é adicioná-lo à estrutura do grafo de uma maneira que permita uma pesquisa de vizinho mais próximo eficiente. O processo é resumido pelas seguintes etapas:
Inicialização: comece com um grafo do HNSW vazio ou com o grafo do HNSW existente, se não for um novo índice.
Ponto de entrada: esse é o nível superior do grafo hierárquico e atua como ponto de partida para indexação.
Como adicionar ao grafo: diferentes níveis hierárquicos representam diferentes granularidades do grafo, em que os níveis mais altos são mais globais e os níveis inferiores são mais granulares. Cada nó no gráfico representa um ponto vetorial.
Cada nó está conectado a até
mvizinhos próximos. Esse é o parâmetrom.O número de pontos de dados que são considerados como conexões candidatas é regido pelo parâmetro
efConstruction. Essa lista dinâmica forma o conjunto de pontos mais próximos no grafo existente para o algoritmo a ser considerado. Os valores mais altos deefConstructionfazem com que mais nós sejam considerados, o que geralmente leva a vizinhanças locais mais densas para cada vetor.Essas conexões usam a similaridade configurada
metricpara determinar a distância. Algumas conexões são conexões de "longa distância" que se conectam entre diferentes níveis hierárquicos, criando atalhos no grafo que melhoram a eficiência da pesquisa.
Remoção e otimização do grafo: isso pode acontecer depois de indexar todos os vetores e melhora a navegação e a eficiência do grafo do HNSW.
Como navegar pelo grafo do HNSW no momento da consulta
Uma consulta de vetor navega pela estrutura do grafo hierárquico para verificar se há correspondências. Veja a seguir o resumo das etapas no processo:
Inicialização: o algoritmo inicia a pesquisa no nível superior do grafo hierárquico. Esse ponto de entrada contém o conjunto de vetores que atuam como pontos de partida para pesquisa.
Passagem: em seguida, ele percorre o nível do grafo por nível, navegando do nível superior para os níveis mais baixos, selecionando nós candidatos que estão mais próximos do vetor de consulta com base na métrica de distância configurada, como similaridade de cosseno.
Remoção: para melhorar a eficiência, o algoritmo remove o espaço de pesquisa considerando apenas os nós que provavelmente conterão os vizinhos mais próximos. Isso é feito mantendo uma fila de prioridade de possíveis candidatos e atualizando-a à medida que a pesquisa progride. O comprimento dessa fila é configurado pelo parâmetro
efSearch.Refinamento: à medida que o algoritmo se move para níveis mais baixos e granulares, o HNSW considera mais vizinhos próximos à consulta, o que permite que o conjunto de vetores candidatos seja refinado, melhorando a precisão.
Conclusão: a pesquisa é concluída quando o número desejado de vizinhos mais próximos é identificado ou quando outros critérios de interrupção são atendidos. Esse número desejado de vizinhos mais próximos é regido pelo parâmetro de tempo de consulta
k.
Métricas de similaridade usadas para medir a proximidade
O algoritmo localiza os vetores candidatos para avaliar a similaridade. Para executar essa tarefa, um cálculo de métrica de similaridade compara o vetor candidato ao vetor de consulta e mede a similaridade. O algoritmo mantém o controle do conjunto ordenado da maioria dos vetores semelhantes encontrados, o que forma o conjunto de resultados classificado quando o algoritmo chega à conclusão.
| Métrica | Descrição |
|---|---|
cosine |
Essa métrica mede o ângulo entre dois vetores e não é afetada por diferentes comprimentos de vetor. Matematicamente, ela calcula o ângulo entre dois vetores. O cosseno é a métrica de similaridade usada pelos modelos de inserção do Azure OpenAI. Portanto, se você estiver usando o Azure OpenAI, especifique cosine na configuração de vetor. |
dotProduct |
Essa métrica mede o comprimento de cada par de dois vetores e o ângulo entre eles. Matematicamente, ela calcula os produtos das magnitudes dos vetores e o ângulo entre eles. Para vetores normalizados, isso é idêntico a similaridade de cosine, mas um desempenho um pouco melhor. |
euclidean |
(também conhecida como l2 norm) Essa métrica mede o comprimento da diferença de vetor entre dois vetores. Matematicamente, ela calcula a distância euclidiana entre dois vetores, que é a norma l2 da diferença dos dois vetores. |
Observação
Se você executar duas ou mais consultas de vetor em paralelo ou se fizer uma pesquisa híbrida que combine consultas de vetor e texto na mesma solicitação, o RRF (Fusão de classificação recíproca) será usado para pontuar os resultados finais da pesquisa.
Pontuações nos resultados da busca em vetores
As pontuações são calculadas e atribuídas a cada correspondência, com as correspondências mais altas retornadas como k resultados. A propriedade @search.score contém a pontuação. A tabela a seguir mostra o intervalo dentro do qual uma pontuação vai cair.
| Método de pesquisa | Parâmetro | Métrica de pontuação | Intervalo |
|---|---|---|---|
| busca em vetores | @search.score |
Cosseno | 0,333 a 1,00 |
Para a métrica de cosine, é importante observar que a @search.score calculada não é o valor de cosseno entre o vetor de consulta e os vetores de documento. Em vez disso, o Azure AI Search aplica transformações de modo que a função de pontuação diminui monotonicamente, o que significa que os valores de pontuação diminuirão sempre, à medida que a semelhança piorar. Essa transformação garante que as pontuações de pesquisa sejam utilizáveis para fins de classificação.
Há algumas nuances com pontuações de similaridade:
- A similaridade do cosseno é definida como o cosseno do ângulo entre dois vetores.
- A distância do cosseno é definida como
1 - cosine_similarity.
Para criar uma função decrescente monotonicamente, o @search.score é definido como 1 / (1 + cosine_distance).
Os desenvolvedores que precisam de um valor do cosseno, em vez do valor sintético, podem usar uma fórmula para converter a pontuação de pesquisa novamente para a distância do cosseno:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Ter o valor do cosseno original pode ser útil em soluções personalizadas que configuram limites para cortar os resultados dos resultados de baixa qualidade.
Dicas para refinar a relevância
Se não estiver obtendo resultados relevantes, experimente fazer alterações na configuração da consulta. Não existem recursos de refinamento específicos para consultas de vetor, como um perfil de pontuação ou promoção de um campo ou termo:
Experimente alterar o tamanho e a sobreposição da parte. Tente aumentar o tamanho da parte e garantir que haja sobreposição suficiente para preservar o contexto ou a continuidade entre partes.
Para o HNSW, tente diferentes níveis de
efConstructionpara alterar a composição interna do grafo de proximidade. O padrão é 400. O intervalo é de 100 a 1.000.Aumente os
kresultados para alimentar mais resultados de busca em um modelo de chat, se você estiver usando um.Experimente consultas híbridas com classificação semântica. No teste de parâmetro de comparação, essa combinação produziu consistentemente os resultados mais relevantes.