Перейти к основному содержимому
Версия: 2.0.x

cos_similarity

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

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

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

cosine_similarity обычно используется для оценки схожести текста и видео.

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

Синтаксис

cosine_similarity(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([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 |
    +------+---------------+-----------+