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 или недействителен, возвращается ошибка.
Примеры
-
Создайте таблицу для хранения векторов и вставьте данные в эту таблицу.
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 |
+------+---------------+------------+