Escolha entre funções de distância vetorial para medir a semelhança de incorporações de vetores

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çãoDescriçãoFórmulaRelaçã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?