La fonction COSINE_DISTANCE calcule la distance cosinus entre deux vecteurs.
La similarité cosinus repose sur l'angle formé par deux vecteurs dans un espace multidimensionnel, indépendamment de leur amplitude. Elle s'obtient en divisant le produit scalaire des deux vecteurs par le produit de leurs normes. La valeur de similarité cosinus appartient toujours à l'intervalle [-1, 1]. Par exemple, deux vecteurs identiques affichent une similarité cosinus de 1, deux vecteurs orthogonaux une similarité de 0, et deux vecteurs de sens opposés une similarité de -1.
Syntaxe
FLOAT COSINE_DISTANCE( <vector>, <vector> )
Paramètres
vector : Obligatoire. Vecteur de type VECTOR.
Valeur renvoyée
Renvoie la distance cosinus entre les deux vecteurs d'entrée sous forme d'une valeur FLOAT comprise dans l'intervalle [0, 2].
L'optimisation des fonctions vectorielles peut entraîner une légère perte de précision en virgule flottante. La marge d'erreur maximale du résultat est de 1e-4.
Exemples
-- Enable the VECTOR data type.
set odps.sql.type.vector.enable=true;
set odps.sql.type.system.odps2=true;
-- Prepare data.
CREATE TABLE vectors (a VECTOR(FLOAT, 3), b VECTOR(FLOAT, 3));
INSERT INTO vectors SELECT CAST(ARRAY(1.1,2.2,3.0) AS VECTOR(FLOAT,3)), CAST(ARRAY(1.0,1.0,1.0) AS VECTOR(FLOAT,3));
INSERT INTO vectors SELECT CAST(ARRAY(1.0,2.2,3.0) AS VECTOR(FLOAT,3)), CAST(ARRAY(4.0,6.0,8.0) AS VECTOR(FLOAT,3));
SELECT a, COSINE_DISTANCE(a, CAST(ARRAY(1.0,2.0,3.0) AS VECTOR(FLOAT, 3))) AS similarity
FROM vectors
ORDER BY similarity DESC
LIMIT 1;
-- Result:
+------+------------+
| a | similarity |
+------+------------+
| [1.1, 2.2, 3] | 0.0010684728622436523 |
+------+------------+