跳到主要内容
版本: 最新版本-3.5

cos_similarity_norm

通过计算两个归一化向量之间的夹角的余弦值来衡量它们的相似度。夹角由向量的方向形成,而忽略它们的大小差异。此函数假定输入向量已归一化。 如果需要在计算余弦相似度之前对向量进行归一化,请使用 cosine_similarity

相似度介于 -1 和 1 之间。向量之间较小的角度表示更大的余弦相似度。

  • 如果两个向量具有相同的方向,则它们具有 0 度角,并且余弦相似度为 1。
  • 垂直向量具有 90 度角,余弦相似度为 0。
  • 相反的向量具有 180 度角,余弦相似度为 -1。

语法

cosine_similarity_norm(a, b)

参数

ab 是要比较的向量。它们必须具有相同的维度。支持的数据类型是 Array<float>。这两个数组必须具有相同数量的元素。 否则,将返回错误。

返回值

返回 [-1, 1] 范围内的 FLOAT 值。如果任何输入参数为 null 或无效,则会报告错误。

示例

  1. 创建一个表来存储向量并将数据插入到该表中。

    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]);
  2. 计算 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 |
    +------+---------------+------------+