cos_similarity_norm
通过计算两个归一化向量之间的夹角的余弦值来衡量它们的相似度。夹角由向量的方向形成,而忽略它们的大小差异。此函数假定输入向量已归一化。 如果需要在计算余弦相似度之前对向量进行归一化,请使用 cosine_similarity。
相似度介于 -1 和 1 之间。向量之间较小的角度表示更大的余弦相似度。
- 如果两个向量具有相同的方向,则它们具有 0 度角,并且余弦相似度为 1。
- 垂直向量具有 90 度角,余弦相似度为 0。
- 相反的向量具有 180 度角,余弦相似度为 -1。
语法
cosine_similarity_norm(a, b)
参数
a
和 b
是要比较的向量。它们必须具有相同的维度。支持的数据类型是 Array<float>
。这两个数组必须具有相同数量的元素。 否则,将返回错误。
返回值
返回 [-1, 1] 范围内的 FLOAT 值。如果任何输入参数为 null 或无效,则会报告错误。
示例
-
创建一个表来存储向量并将数据插入到该表中。
CREATE TABLE t1_similarity
(id int, data array<float>)
DISTRIBUTED BY HASH(id);
INSERT INTO t1_similarity VALUES
(1, array<float>[0.1, 0.2, 0.3]),
(2, array<float>[0.2, 0.1, 0.3]),
(3, array<float>[0.3, 0.2, 0.1]); -
计算
data
列中每行与数组[0.1, 0.2, 0.3]
相比的相似度,并将结果以降序排列。SELECT id, data, cosine_similarity_norm([0.1, 0.2, 0.3], data) as dist
FROM t1_similarity
ORDER BY dist DESC;
+------+---------------+------------+
| id | data | dist |
+------+---------------+------------+
| 1 | [0.1,0.2,0.3] | 0.14000002 |
| 2 | [0.2,0.1,0.3] | 0.13000001 |
| 3 | [0.3,0.2,0.1] | 0.10000001 |
+------+---------------+------------+