Elegir entre funciones de distancia vectorial para medir la similitud de las incorporaciones vectoriales

En esta página, se describe cómo elegir entre las funciones de distancia vectorial proporcionadas en Spanner para medir la similitud entre las incorporaciones vectoriales.

Después de generar incorporaciones a partir de tus datos de Spanner, puedes realizar una búsqueda de similitud con funciones de distancia vectorial. En la siguiente tabla, se describen las funciones de distancia vectorial en Spanner.

FunciónDescripciónFormulaRelación con el aumento de similitud
Producto punto Calcula el coseno de un ángulo \(\theta\) multiplicado por el producto de las magnitudes vectoriales correspondientes. \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) Aumentos
Distancia de coseno La función de distancia coseno resta la similitud coseno de uno (cosine_distance() = 1 - cosine similarity). La similitud coseno mide el coseno de un ángulo \(\theta\) entre dos vectores. Entre 1 y \(\frac{a^T b}{|a| \cdot |b|}\) Disminuye
Distancia euclidiana 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

Elige una medida de similitud

Dependiendo de si todas tus incorporaciones vectoriales están normalizadas, puedes determinar qué medida de similitud usar para encontrar la similitud. Una incorporación de vector normalizada tiene una magnitud (longitud) de exactamente 1.0.

Además, si sabes con qué función de distancia se entrenó tu modelo, úsala para medir la similitud entre tus incorporaciones vectoriales.

Datos normalizados

Si tienes un conjunto de datos en el que todas las incorporaciones vectoriales están normalizadas, entonces las tres funciones proporcionan los mismos resultados de la búsqueda semántica. En términos simples, aunque cada función muestra un valor diferente, esos valores se ordenan de la misma manera. Cuando se normalizan las incorporaciones, DOT_PRODUCT() suele ser la más eficiente en términos de procesamiento, 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 ayudar con el ajuste del rendimiento.

Datos no normalizados

Si tienes un conjunto de datos en el que las incorporaciones vectoriales no están normalizadas, entonces no es matemáticamente correcto usar DOT_PRODUCT() como función de distancia porque el producto punto como función no mide la distancia. Según cómo se generaron las incorporaciones y qué tipo de búsqueda se prefiere, la función COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() produce resultados de la búsqueda que son subjetivamente mejores que la otra función. Puede que sea necesario experimentar con COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() para determinar cuál es la mejor opción para tu caso de uso.

No sé si los datos están normalizados o no normalizados

Si no estás seguro de si tus datos están normalizados o no y deseas usar DOT_PRODUCT(), te recomendamos que uses COSINE_DISTANCE() en su lugar. COSINE_DISTANCE() es como DOT_PRODUCT() con normalización integrada. La similitud medida con COSINE_DISTANCE() varía de -1 a 1. Un resultado cercano a 0 indica que los vectores son muy similares.

¿Qué sigue?