Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Durante a execução da consulta vetorial, o mecanismo de pesquisa procura vetores semelhantes para encontrar os melhores candidatos para retornar nos resultados da pesquisa. Dependendo de como você indexou o conteúdo vetorial, a pesquisa por correspondências relevantes é exaustiva ou restrita aos vizinhos mais próximos para um processamento mais rápido. Uma vez que os candidatos são encontrados, métricas de semelhança são usadas para pontuar cada resultado com base na força da partida.
Este artigo explica os algoritmos usados para encontrar correspondências relevantes e as métricas de semelhança usadas para pontuação. Ele também oferece dicas para melhorar a relevância se os resultados da pesquisa não atenderem às expectativas.
Algoritmos utilizados na pesquisa vetorial
Os algoritmos de pesquisa vetorial incluem:
K-Nearest Neighbors (KNN), que executa uma varredura exaustiva de força bruta de todo o espaço vetorial.
Mundo Pequeno Navegável Hierárquico (HNSW), que realiza uma pesquisa de Vizinho Próximo Aproximado (ANN).
Apenas os campos vetoriais marcados como searchable
no índice ou searchFields
na consulta são usados para pesquisar e pontuar.
Sobre o KNN exaustivo
A KNN exaustiva calcula as distâncias entre todos os pares de pontos de dados e encontra os vizinhos exatos k
mais próximos de um ponto de consulta. Como o algoritmo não requer acesso aleatório rápido de pontos de dados, a KNN não consome cota de tamanho de índice vetorial . No entanto, fornece o conjunto global de vizinhos mais próximos.
O KNN exaustivo é computacionalmente intensivo, portanto, use-o para conjuntos de dados pequenos e médios ou quando a necessidade de precisão superar a necessidade de desempenho de consulta. Outro caso de uso é a construção de um conjunto de dados para avaliar o recall de um algoritmo ANN, já que o KNN exaustivo pode ser usado para construir o conjunto de verdades básicas dos vizinhos mais próximos.
Sobre o HNSW
HNSW é um algoritmo ANN otimizado para aplicações 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 gráfico hierárquico. Durante a execução da consulta, o HNSW navega por este gráfico para encontrar as correspondências mais relevantes, permitindo pesquisas eficientes de vizinhos mais próximos.
O HNSW requer que todos os pontos de dados residam na memória para acesso aleatório rápido, o que consome cota de tamanho de índice vetorial . Esse design equilibra a precisão da pesquisa com a eficiência computacional e torna o HNSW adequado para a maioria dos cenários, especialmente ao pesquisar em 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 a recuperação para seu aplicativo de pesquisa. Por exemplo, os campos que especificam HNSW também suportam KNN exaustivo usando o parâmetro "exhaustive": true
query request . No entanto, os campos indexados para exhaustiveKnn
não suportam consultas HNSW porque as estruturas de dados adicionais que permitem uma pesquisa eficiente não existem.
Sobre a ANN
ANN é uma classe de algoritmos para encontrar correspondências no espaço vetorial. 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.
Os algoritmos ANN sacrificam alguma precisão, mas oferecem recuperação escalável e mais rápida de vizinhos aproximados mais próximos, o que os torna ideais para equilibrar precisão e eficiência em aplicações modernas de recuperação de informações. Você pode ajustar os parâmetros do seu algoritmo para ajustar os requisitos de recuperação, latência, memória e espaço ocupado pelo disco do seu aplicativo de pesquisa.
O Azure AI Search usa HNSW para seu algoritmo ANN.
Como funciona a pesquisa de vizinhos mais próximos
As consultas vetoriais são executadas em um espaço de incorporação que consiste em vetores gerados a partir do mesmo modelo de incorporação. Geralmente, o valor de entrada dentro de uma solicitação de consulta é alimentado no mesmo modelo de aprendizado de máquina que gerou incorporações no índice vetorial. A saída é um vetor no mesmo espaço de incorporação. Como vetores semelhantes são agrupados próximos, encontrar correspondências é equivalente a encontrar 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 mapeia a consulta em um vetor que existe em algum lugar no cluster de vetores que representam documentos sobre hotéis. Identificar quais vetores são mais semelhantes à consulta, com base em uma métrica de similaridade, determina quais documentos são os mais relevantes.
Quando os campos vetoriais são indexados para KNN exaustivo, a consulta é executada em relação a "todos os vizinhos". Para campos indexados para HNSW, o mecanismo de pesquisa usa um gráfico HNSW para pesquisar sobre um subconjunto de nós dentro do índice vetorial.
Criando o gráfico HNSW
Durante a indexação, o serviço de pesquisa constrói o gráfico HNSW. O objetivo de indexar um novo vetor em um gráfico HNSW é adicioná-lo à estrutura do gráfico de uma maneira que permita uma pesquisa eficiente do vizinho mais próximo. As etapas a seguir resumem o processo:
Inicialização: comece com um gráfico HNSW vazio ou o gráfico HNSW existente se não for um novo índice.
Ponto de entrada: Este é o nível superior do gráfico hierárquico e serve como ponto de partida para a indexação.
Adicionando ao gráfico: Diferentes níveis hierárquicos representam diferentes granularidades do gráfico, com níveis mais altos sendo mais globais e níveis mais baixos sendo mais granulares. Cada nó no gráfico representa um ponto vetorial.
Cada nó está conectado a até
m
vizinhos que estão próximos. Este é om
parâmetro.O número de pontos de dados considerados como conexões candidatas é regido
efConstruction
pelo parâmetro. Esta lista dinâmica forma o conjunto de pontos mais próximos no gráfico existente para o algoritmo considerar. Valores mais altosefConstruction
resultam em mais nós sendo considerados, o que muitas vezes leva a bairros locais mais densos para cada vetor.Essas conexões usam a semelhança
metric
configurada para determinar a distância. Algumas conexões são conexões de "longa distância" que se conectam em diferentes níveis hierárquicos, criando atalhos no gráfico que melhoram a eficiência da pesquisa.
Poda e otimização de gráficos: Isso pode acontecer após a indexação de todos os vetores e melhora a navegabilidade e a eficiência do gráfico HNSW.
Navegando no gráfico HNSW no momento da consulta
Uma consulta vetorial navega na estrutura hierárquica do gráfico para procurar correspondências. A seguir, resume as etapas do processo:
Inicialização: O algoritmo inicia a pesquisa no nível superior do gráfico hierárquico. Este ponto de entrada contém o conjunto de vetores que servem como pontos de partida para a pesquisa.
Travessia: Em seguida, ele percorre o gráfico nível por nível, navegando do nível superior para o nível inferior, selecionando nós candidatos que estão mais próximos do vetor de consulta com base na métrica de distância configurada, como semelhança de cosseno.
Poda: Para melhorar a eficiência, o algoritmo elimina o espaço de pesquisa considerando apenas os nós que provavelmente contêm vizinhos mais próximos. Isto é conseguido mantendo uma fila prioritária de potenciais candidatos e atualizando-a à medida que a pesquisa progride. O comprimento desta 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 candidato seja refinado, melhorando a precisão.
Conclusão: A pesquisa é concluída quando o número desejado de vizinhos mais próximos tiver sido identificado ou quando outros critérios de parada forem atendidos. Esse número desejado de vizinhos mais próximos é regido pelo parâmetro
k
query-time.
Métricas de semelhança usadas para medir a proximidade
O algoritmo encontra vetores candidatos para avaliar a semelhança. Para executar essa tarefa, um cálculo de métrica de similaridade compara o vetor candidato ao vetor de consulta e mede a semelhança. O algoritmo mantém o controle do conjunto ordenado da maioria dos vetores semelhantes que ele encontrou, que forma o conjunto de resultados classificados quando o algoritmo atingiu a conclusão.
Métrico | Descrição |
---|---|
cosine |
Esta métrica mede o ângulo entre dois vetores e não é afetada por diferentes comprimentos vetoriais. Matematicamente, calcula o ângulo entre dois vetores. Cosine é a métrica de semelhança usada pelos modelos de incorporação do Azure OpenAI, portanto, se você estiver usando o Azure OpenAI, especifique cosine na configuração do vetor. |
dotProduct |
Esta métrica mede o comprimento de cada par de dois vetores e o ângulo entre eles. Matematicamente, calcula os produtos das magnitudes dos vetores e o ângulo entre eles. Para vetores normalizados, isso é idêntico à cosine semelhança, mas um pouco mais performante. |
euclidean |
(também conhecido/a l2 norm por ) Esta métrica mede o comprimento da diferença vetorial entre dois vetores. Matematicamente, calcula a distância euclidiana entre dois vetores, que é a norma l2 da diferença dos dois vetores. |
Nota
Se você executar duas ou mais consultas vetoriais em paralelo ou se fizer uma pesquisa híbrida que combine consultas vetoriais e de texto na mesma solicitação, a Reciprocal Rank Fusion (RRF) será usada para pontuar os resultados finais da pesquisa.
Pontuações em resultados de pesquisa vetorial
As pontuações são calculadas e atribuídas a cada partida, com as partidas mais altas retornadas como k
resultados. A @search.score
propriedade contém a pontuação. A tabela a seguir mostra o intervalo dentro do qual uma pontuação cairá.
Método de pesquisa | Parâmetro | Métrica de pontuação | Intervalo |
---|---|---|---|
pesquisa de vectores | @search.score |
Cosina | 0.333 - 1.00 |
Paracosine
métrica, é importante observar que o calculado @search.score
não é o valor cosseno entre o vetor de consulta e os vetores de documento. Em vez disso, a Pesquisa de IA do Azure aplica transformações de tal forma que a função de pontuação está monotonicamente diminuindo, o que significa que os valores de pontuação sempre diminuirão de valor à medida que a semelhança piorar. Essa transformação garante que as pontuações de pesquisa sejam utilizáveis para fins de classificação.
Existem algumas nuances com pontuações de semelhança:
- A semelhança cosseno é definida como o cosseno do ângulo entre dois vetores.
- A distância cossena é definida como
1 - cosine_similarity
.
Para criar uma função monotonicamente decrescente, o @search.score
é definido como 1 / (1 + cosine_distance)
.
Os desenvolvedores que precisam de um valor cosseno em vez do valor sintético podem usar uma fórmula para converter a pontuação de pesquisa de volta para distância cosseno:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Ter o valor cosseno original pode ser útil em soluções personalizadas que configuram limites para cortar resultados de resultados de baixa qualidade.
Dicas para ajuste de relevância
Se você não estiver obtendo resultados relevantes, experimente alterações na configuração da consulta. Não há recursos específicos de ajuste, como um perfil de pontuação ou aumento de campo ou termo, para consultas vetoriais:
Experimente o tamanho do pedaço e a sobreposição. Tente aumentar o tamanho do bloco e garantir que haja sobreposição suficiente para preservar o contexto ou a continuidade entre os blocos.
Para HNSW, tente diferentes níveis de para alterar a composição interna do gráfico de
efConstruction
proximidade. O padrão é 400. O intervalo é de 100 a 1.000.Aumente
k
os resultados para alimentar mais resultados de pesquisa em um modelo de bate-papo, se você estiver usando um.Experimente consultas híbridas com classificação semântica. Nos testes de referência, esta combinação produziu consistentemente os resultados mais relevantes.