Esta página descreve como escolher entre as funções de distância vetorial fornecidas no Spanner para medir a semelhança entre embeddings de vetores.
Depois de gerar embeddings de os dados do Spanner, faça uma pesquisa por similaridade usando funções de distância. A tabela a seguir descreve as funções de distância vetorial 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 vetoriais 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 |
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 |
Escolher uma medida de similaridade
Dependendo de todos os embeddings de vetores serem normalizados, é possível 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 seu modelo foi treinado, usar essa função de distância para medir a semelhança entre o vetor e embeddings.
Dados normalizados
Se você tiver um conjunto de dados em que todos os embeddings de vetor forem normalizados, as três funções vão fornecer os mesmos resultados de pesquisa semântica. Basicamente, embora cada
retorna um valor diferente, esses valores são classificados da mesma maneira. Quando
os embeddings são normalizados, e DOT_PRODUCT()
costuma ser o método mais
eficiente, 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 vetoriais não são normalizados,
não é matematicamente correto usar DOT_PRODUCT()
como uma distância
função porque o produto escalar como função não mede a distância. Dependendo
de como as embeddings foram geradas e de qual tipo de pesquisa é a preferida,
a função COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
produz
resultados de pesquisa que são subjetivamente melhores do que a outra função.
Os experimentos com COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
podem
necessário para determinar qual é o melhor para seu caso de uso.
Não tenho certeza se os dados estão normalizados ou não normalizados
Se você não tiver certeza se seus dados estão normalizados e quiser usar
DOT_PRODUCT()
, recomendamos que você use COSINE_DISTANCE()
.
COSINE_DISTANCE()
é como DOT_PRODUCT()
com normalização integrada.
A similaridade medida usando COSINE_DISTANCE()
varia de -1
a 1
. 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 GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
. - Saiba mais sobre as funções PostgreSQL
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
.