A função COSINE_DISTANCE calcula a distância do cosseno entre dois vetores.
A similaridade do cosseno baseia-se no ângulo entre dois vetores em um espaço multidimensional, independentemente de suas magnitudes. Para calculá-la, divida o produto interno dos dois vetores pelo produto de seus comprimentos. A similaridade do cosseno está sempre no intervalo [-1, 1]. Por exemplo, dois vetores idênticos têm similaridade do cosseno igual a 1, dois vetores ortogonais têm similaridade 0 e dois vetores com direções opostas apresentam similaridade -1.
Sintaxe
FLOAT COSINE_DISTANCE( <vector>, <vector> )
Parâmetros
vector: Obrigatório. Um vetor do tipo de dados VECTOR.
Valor retornado
Retorna a distância do cosseno entre os dois vetores de entrada como um valor FLOAT no intervalo [0, 2].
A otimização de funções vetoriais pode causar uma leve perda de precisão de ponto flutuante. O resultado apresenta uma margem de erro máxima de 1e-4.
Exemplos
-- 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 |
+------+------------+