En esta página, se describe cómo elegir entre las funciones de distancia de vectores proporcionadas en Spanner para medir la similitud entre las incorporaciones de vectores.
Después de generar incorporaciones a partir de tus datos de Spanner, puedes realizar una búsqueda de similitud con funciones de distancia de vectores. En la siguiente tabla, se describen las funciones de distancia vectorial en Spanner.
Función | Descripción | Formula | Relación con el aumento de la similitud |
---|---|---|---|
Producto punto | Calcula el coseno del ángulo \(\theta\) multiplicado por el producto de las magnitudes vectoriales correspondientes. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Aumenta |
Distancia de coseno | La función de distancia de coseno resta la similitud de coseno de uno (cosine_distance() = 1 - cosine similarity ). La similitud de coseno mide el coseno del ángulo \(\theta\) entre dos vectores.
|
1 - \(\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
Según si todas tus embeddings de vectores están normalizadas o no, puedes determinar qué medida de similitud usar para encontrar la similitud. Una embedding 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, usa esa función para medir la similitud entre tus embeddings de vectores.
Datos normalizados
Si tienes un conjunto de datos en el que todas las embeddings de vectores están normalizadas, las tres funciones proporcionan los mismos resultados de la búsqueda semántica. En esencia, aunque cada función muestra un valor diferente, esos valores se ordenan de la misma manera. Cuando las embeddings se normalizan, DOT_PRODUCT()
suele ser la más eficiente en términos de procesamiento, pero la diferencia es despreciable en la mayoría de los casos. Sin embargo, si tu aplicación es muy sensible al rendimiento, DOT_PRODUCT()
podría ayudarte a ajustarlo.
Datos no normalizados
Si tienes un conjunto de datos en el que las embedding de vector no están normalizadas, 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 embeddings y el tipo de búsqueda que se prefiera, la función COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
produce resultados de búsqueda que son subjetivamente mejores que las otras funciones.
Es posible 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 sabes si los datos están normalizados o no
Si no sabes si tus datos están normalizados y quieres usar DOT_PRODUCT()
, te recomendamos que uses COSINE_DISTANCE()
.
COSINE_DISTANCE()
es como DOT_PRODUCT()
con la normalización integrada.
La similitud medida con COSINE_DISTANCE()
varía de 0
a 2
. Un resultado cercano a 0
indica que los vectores son muy similares.
¿Qué sigue?
- Obtén más información para realizar una búsqueda de vectores encontrando el vecino más cercano.
- Obtén información para exportar incorporaciones a Vertex AI Vector Search.
- Obtén más información sobre las funciones
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
yDOT_PRODUCT()
de GoogleSQL. - Obtén más información sobre las funciones
spanner.cosine_distance()
yspanner.euclidean_distance(), and spanner.dot_product()
de PostgreSQL.