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 con tus datos de Spanner, puedes realizar una búsqueda de similitud usando funciones de distancia. En la siguiente tabla, se describen las funciones de distancia vectorial en Spanner.
Función | Descripción | Formula | Relación con aumentar la 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 actividad normalizada tiene una magnitud (longitud) de exactamente 1.0.
Además, si sabes con qué función de distancia se entrenó tu modelo, usar la función de distancia para medir la similitud entre tu vector de las incorporaciones.
Datos normalizados
Si tienes un conjunto de datos en el que todas las incorporaciones vectoriales están normalizadas, entonces las tres
proporcionan los mismos resultados de la búsqueda semántica. En esencia, aunque cada
muestra un valor diferente, esos valores se ordenan de la misma manera. Cuándo
las incorporaciones se normalizan, DOT_PRODUCT()
suele ser el elemento
eficiente, pero la diferencia es insignificante en la mayoría de los casos. Sin embargo, si tus
aplicación es muy sensible al rendimiento, DOT_PRODUCT()
podría ayudar con
ajustar el 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 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.
La experimentación con COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
podría
necesaria para determinar cuál es la mejor
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
cerca de 0
indica que los vectores son muy similares.
¿Qué sigue?
- Obtén más información para realizar una búsqueda vectorial mediante la búsqueda del vecino k-más cercano.
- Aprende a exportar incorporaciones a Vertex AI Vector Search.
- Obtén más información sobre las funciones de GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
yDOT_PRODUCT()
. - Obtén más información sobre las funciones
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
de PostgreSQL.