cos_similarity
通过计算两个向量之间夹角的余弦值来衡量它们的相似度。夹角由向量的方向决定,而它们的大小差异则被忽略。
相似度介于 -1 和 1 之间。向量之间的角度越小,余弦相似度越大。
- 如果两个向量方向相同,则它们的角度为 0 度,余弦相似度为 1。
- 垂直向量的角度为 90 度,余弦相似度为 0。
- 相反向量的角度为 180 度,余弦相似度为 -1。
cosine_similarity
通常用于评估文本和视频的相似性。
此函数在测量余弦相似度之前对向量进行归一化。如果输入向量已经归一化,则可以使用 cosine_similarity_norm。
语法
cosine_similarity(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([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.9999999 |
| 2 | [0.2,0.1,0.3] | 0.9285713 |
| 3 | [0.3,0.2,0.1] | 0.7142856 |
+------+---------------+-----------+