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