Перейти к основному содержимому

cos_similarity_norm

Описание

Измеряет сходство двух нормализованных векторов путем вычисления косинуса угла между ними. Угол формируется направлением векторов, при этом разница в их величине игнорируется. Эта функция предполагает, что входные векторы были нормализованы. Если вам нужно нормализовать векторы перед вычислением косинусного сходства, используйте cosine_similarity.

Сходство находится в диапазоне от -1 до 1. Меньшие углы между векторами указывают на большее косинусное сходство.

  • Если два вектора имеют одинаковое направление, у них угол 0 градусов и косинусное сходство равно 1.
  • Перпендикулярные векторы имеют угол 90 градусов и косинусное сходство равно 0.
  • Противоположные векторы имеют угол 180 градусов и косинусное сходство равно -1.

Синтаксис

cosine_similarity_norm(a, b)

Параметры

a и b — это векторы для сравнения. Они должны иметь одинаковую размерность. Поддерживаемый тип данных — Array<float>. Два массива должны иметь одинаковое количество элементов. В противном случае возвращается ошибка.

Возвращаемое значение

Возвращает значение FLOAT в диапазоне [-1, 1]. Если любой входной параметр равен 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 |
    +------+---------------+------------+