COSINE_DISTANCE 関数は、2 つのベクトル間のコサイン距離を計算します。
説明
コサイン類似度は、多次元空間における 2 つのベクトル間の角度に基づき、ベクトルの大きさに関係なく算出されます。2 つのベクトルの内積を、それぞれの大きさの積で割ることで計算します。コサイン類似度は常に [-1, 1] の区間に収まります。たとえば、同一の 2 つのベクトルのコサイン類似度は 1、直交ベクトルのコサイン類似度は 0、反対方向を指す 2 つのベクトルのコサイン類似度は -1 です。
構文
FLOAT COSINE_DISTANCE( <vector>, <vector> )パラメーター
vector:必須。VECTOR データ型のベクトル。
戻り値
2 つの入力ベクトル間のコサイン距離を、範囲 [0, 2] の FLOAT 値として返します。
ベクトル関数の最適化により、浮動小数点精度がわずかに低下する場合があります。結果の最大誤差は 1e-4 です。
例
-- VECTOR データ型を有効化します。
set odps.sql.type.vector.enable=true;
set odps.sql.type.system.odps2=true;
-- データを準備します。
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 distance
FROM vectors
ORDER BY distance ASC
LIMIT 1;
-- 結果:
+------+------------+
| a | distance |
+------+------------+
| [1.1, 2.2, 3] | 0.0010684728622436523 |
+------+------------+