Esta página descreve como escolher entre as funções de distância de vetor fornecidas no Spanner para medir a semelhança entre embeddings de vetor.
Depois de gerar embeddings com os dados do Spanner, é possível realizar uma pesquisa de similaridade usando funções de distância vetorial. A tabela a seguir descreve as funções de distância do vetor no Spanner.
Função | Descrição | Fórmula | Relação com aumento da similaridade |
---|---|---|---|
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)\) | Aumentos |
Distância do cosseno | A função de distância de cosseno subtrai a semelhança de cosseno de um (cosine_distance() = 1 - cosine similarity ). A semelhança de cosseno mede o cosseno do ângulo \(\theta\) entre dois vetores.
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | Diminuição |
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ção |
Escolher uma medida de similaridade
Dependendo se todas as embeddings de vetor estão normalizadas ou não, você pode determinar qual medida de similaridade usar para encontrar a similaridade. Um embedding de vetor normalizado tem uma magnitude (comprimento) de exatamente 1,0.
Além disso, se você souber com qual função de distância o modelo foi treinado, use essa função de distância para medir a semelhança entre os embeddings de vetor.
Dados normalizados
Se você tiver um conjunto de dados em que todas as embeddings de vetor estiverem normalizadas, as três
funções vão fornecer os mesmos resultados de pesquisa semântica. Resumindo, embora cada
função retorne um valor diferente, esses valores são classificados da mesma maneira. Quando
os embeddings estão normalizados, o DOT_PRODUCT()
geralmente é o mais eficiente
em termos computacionais, mas a diferença é insignificante na maioria dos casos. No entanto, se o
aplicativo for altamente sensível ao desempenho, DOT_PRODUCT()
poderá ajudar no
ajuste de desempenho.
Dados não normalizados
Se você tiver um conjunto de dados em que os embeddings de vetor não estiverem normalizados,
não será matematicamente correto usar DOT_PRODUCT()
como uma função de distância,
porque o produto escalar não mede distância. Dependendo
de como os embeddings foram gerados e de qual tipo de pesquisa é a preferida,
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 para seu caso de uso.
Não tem certeza se os dados estão normalizados ou não
Se você não tiver certeza se os dados estão normalizados e quiser usar
DOT_PRODUCT()
, recomendamos usar COSINE_DISTANCE()
.
COSINE_DISTANCE()
é como DOT_PRODUCT()
com a normalização integrada.
A similaridade medida usando COSINE_DISTANCE()
varia de 0
a 2
. Um resultado
próximo a 0
indica que os vetores são muito semelhantes.
A seguir
- Saiba mais sobre como realizar uma pesquisa de vetor encontrando o vizinho k-mais próximo.
- Saiba como exportar embeddings para a Pesquisa de vetores da Vertex AI.
- Saiba mais sobre as funções
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
do GoogleSQL. - Saiba mais sobre as funções
spanner.cosine_distance()
espanner.euclidean_distance(), and spanner.dot_product()
do PostgreSQL.