Elegir entre las funciones de distancia de vectores para medir la similitud de las inserciones de vectores

En esta página se describe cómo elegir entre las funciones de distancia de vectores que ofrece Spanner para medir la similitud entre las inserciones de vectores.

Una vez que hayas generado inserciones a partir de tus datos de Spanner, puedes hacer una búsqueda de similitudes con funciones de distancia de vectores. En la siguiente tabla se describen las funciones de distancia de vectores de Spanner.

FunciónDescripciónFórmulaRelación con el aumento de la similitud
Producto escalar Calcula el coseno del ángulo \(\theta\) multiplicado por el producto de las magnitudes de los vectores correspondientes. \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) Aumenta
Distancia del coseno La función de distancia del coseno resta la similitud del coseno a uno (cosine_distance() = 1 - cosine similarity). La similitud del coseno mide el coseno del ángulo \(\theta\) entre dos vectores. 1 - \(\frac{a^T b}{|a| \cdot |b|}\) Disminuye
Distancia euclídea Mide la distancia en línea recta entre dos vectores. \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) Disminuye

Elegir una medida de similitud

En función de si todos tus embeddings de vectores están normalizados o no, puedes determinar qué medida de similitud usar para encontrar similitudes. Una inserción de vector normalizada tiene una magnitud (longitud) de exactamente 1,0.

Además, si sabes con qué función de distancia se ha entrenado tu modelo, úsala para medir la similitud entre tus inserciones de vectores.

Datos normalizados

Si tienes un conjunto de datos en el que todas las inserciones de vectores están normalizadas, las tres funciones proporcionarán los mismos resultados de búsqueda semántica. En esencia, aunque cada función devuelve un valor diferente, esos valores se ordenan de la misma forma. Cuando se normalizan las inserciones, DOT_PRODUCT() suele ser la opción más eficiente desde el punto de vista computacional, pero la diferencia es insignificante en la mayoría de los casos. Sin embargo, si tu aplicación es muy sensible al rendimiento, DOT_PRODUCT() puede ayudarte a optimizarlo.

Datos no normalizados

Si tiene un conjunto de datos en el que las inserciones de vectores no están normalizadas, no es correcto matemáticamente usar DOT_PRODUCT() como función de distancia, ya que el producto escalar como función no mide la distancia. En función de cómo se hayan generado las incrustaciones y del tipo de búsqueda que se prefiera, la función COSINE_DISTANCE() o la EUCLIDEAN_DISTANCE() producirán resultados de búsqueda que serán subjetivamente mejores que los de la otra función. Puede que tengas que experimentar con COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() para determinar cuál es la mejor opción para tu caso práctico.

No sabes si los datos están normalizados o no

Si no sabes si tus datos están normalizados o no y quieres usar DOT_PRODUCT(), te recomendamos que uses COSINE_DISTANCE(). COSINE_DISTANCE() es como DOT_PRODUCT(), pero con la normalización integrada. La similitud medida con COSINE_DISTANCE() va de 0 a 2. Un resultado cercano a 0 indica que los vectores son muy similares.

Siguientes pasos