跳到主要内容

COSINE_SIMILARITY

描述

计算两个向量之间的余弦相似度。 函数按照向量的点积与模长计算相似度,结果范围为 [-1, 1]

版本说明

自 4.1.2 起支持。

语法

COSINE_SIMILARITY(<array1>, <array2>)

参数

参数说明
<array1>第一个向量。类型必须为 ARRAY<FLOAT>
<array2>第二个向量。类型必须为 ARRAY<FLOAT>,且元素个数需与 <array1> 一致。

返回值

返回两个向量的余弦相似度,类型为 FLOAT。 如果输入数组为 NULL,或者数组中包含 NULL 元素,则报错。 如果两个数组的元素个数不一致,则报错。 如果数组为空,或者任一向量为零向量,则返回 0.0

举例

-- 两个向量完全相同,相似度为 1
SELECT COSINE_SIMILARITY([1, 2, 3], [1, 2, 3]);
+-----------------------------------------+
| COSINE_SIMILARITY([1, 2, 3], [1, 2, 3]) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+

[1, 2, 3][1, 2, 3] 的方向完全一致,因此相似度为 1

-- 两个向量正交,相似度为 0
SELECT COSINE_SIMILARITY([1, 0], [0, 1]);
+-----------------------------------+
| COSINE_SIMILARITY([1, 0], [0, 1]) |
+-----------------------------------+
| 0 |
+-----------------------------------+

两个向量互相垂直,点积为 0,因此相似度为 0

-- 任一向量为零向量时,返回 0
SELECT COSINE_SIMILARITY([0, 0, 0], [1, 2, 3]);
+-----------------------------------------+
| COSINE_SIMILARITY([0, 0, 0], [1, 2, 3]) |
+-----------------------------------------+
| 0 |
+-----------------------------------------+

零向量没有有效方向,因此结果为 0

-- 空数组返回 0
SELECT COSINE_SIMILARITY([], []);
+---------------------------+
| COSINE_SIMILARITY([], []) |
+---------------------------+
| 0 |
+---------------------------+
-- 输入数组中包含 NULL,会报错
SELECT COSINE_SIMILARITY([1, NULL, 3], [1, 2, 3]);
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]First argument for function cosine_similarity cannot have null