Esta página descreve como escolher entre as funções de distância vetorial fornecidas no Spanner para medir a semelhança entre incorporações de vetores.
Depois de gerar incorporações a partir dos dados do Spanner, pode fazer uma pesquisa de semelhanças usando funções de distância vetorial. A tabela seguinte descreve as funções de distância vetorial no Spanner.
Função | Descrição | Fórmula | Relação com o aumento da semelhança |
---|---|---|---|
Produto escalar | Calcula o cosseno do ângulo \(\theta\) multiplicado pelo produto das magnitudes dos vetores correspondentes. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Aumenta |
Distância de cosseno | A função de distância do cosseno subtrai a semelhança do cosseno de um (cosine_distance() = 1 - cosine similarity ). A semelhança do cosseno mede o cosseno do ângulo \(\theta\) entre dois vetores.
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | Diminuições |
Distância euclidiana | Mede a distância em linha reta entre dois vetores. | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | Diminuições |
Escolha uma medida de semelhança
Consoante todas as suas incorporações vetoriais estejam ou não normalizadas, pode determinar que medida de semelhança usar para encontrar semelhanças. Uma incorporação de vetor normalizada tem uma magnitude (comprimento) de exatamente 1,0.
Além disso, se souber com que função de distância o seu modelo foi preparado, use essa função de distância para medir a semelhança entre as suas incorporações de vetores.
Dados normalizados
Se tiver um conjunto de dados em que todas as incorporações de vetores estão normalizadas, todas as três funções fornecem os mesmos resultados de pesquisa semântica. Essencialmente, embora cada função devolva um valor diferente, esses valores são ordenados da mesma forma. Quando as incorporações são normalizadas, DOT_PRODUCT()
é geralmente a mais eficiente do ponto de vista computacional, mas a diferença é insignificante na maioria dos casos. No entanto, se a sua aplicação for muito sensível ao desempenho, DOT_PRODUCT()
pode ajudar a otimizar o desempenho.
Dados não normalizados
Se tiver um conjunto de dados em que as incorporações de vetores não estão normalizadas, não é matematicamente correto usar DOT_PRODUCT()
como uma função de distância, porque o produto escalar como função não mede a distância. Consoante a forma como as incorporações foram geradas e o tipo de pesquisa preferido, a função COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
produz resultados de pesquisa subjetivamente melhores do que a outra função.
A experimentação com COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
pode ser necessária para determinar qual é a melhor opção para o seu exemplo de utilização.
Não sabe se os dados são normalizados ou não normalizados
Se não tiver a certeza se os seus dados estão normalizados e quiser usar
DOT_PRODUCT()
, recomendamos que use COSINE_DISTANCE()
.
O COSINE_DISTANCE()
é como o DOT_PRODUCT()
com a normalização integrada.
A semelhança medida através de COSINE_DISTANCE()
varia entre 0
e 2
. Um resultado
próximo de 0
indica que os vetores são muito semelhantes.
O que se segue?
- Saiba como fazer uma pesquisa vetorial encontrando o vizinho mais próximo de k.
- Saiba como exportar incorporações para a pesquisa vetorial do Vertex AI.
- Saiba mais sobre as funções GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
. - Saiba mais sobre as funções PostgreSQL
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
.