
BigQuery(BQ) очень полезен для анализа или обработки данных.
Он хорошо справляется с большими объемами данных. Он возвращает итоговый результат в короткие сроки.
BQ имеет один полезный формат данных массив.
Когда мы рассматриваем массив как вектор, нам может понадобиться косинусное сходство векторов.
Итак, как мы можем получить косинусное сходство?
Итак, сегодня я расскажу о "Как вычислить косинусное сходство массива в BigQuery".
Author

Преимущество для чтения
Вы можете понять "Как вычислить косинусное сходство массива в BigQuery". Тогда вам не нужно беспокоиться о сходстве.
Что такое косинусное подобие
Косинусное сходство — это мера сходства между двумя векторами.
Косинус cos
является одной из тригонометрических функций.
Принимает 1 в случае 0°, 0 в случае 90° и -1 в случае 180°.
Значит, мы можем получить угол, если знаем значение косинуса.
И если угол между 2 векторами близок к нулю, значит 2 вектора подобны.
Поэтому косинус используется как подобия.
Cosine similarity is a measure of similarity between two non-zero vectors of an inner product space.
Reference: Cosine similarity - Wikipedia
Формула подобия косинусов приведена ниже.
![]() |
---|

Данные
Прежде чем рассчитать его, мы должны подготовить данные.
Чтобы создать массив данных, мы можем использовать таблицу, которую мы создали в предыдущем разделе.
Читать далее
Вы можете добавить CREATE TABLE
в SQL и создать таблицу.
SQL
CREATE TABLE test.array_sample2 AS SELECT key, ARRAY_AGG(val) as val_array FROM test.array_sample GROUP BY key
Result table
Row | key | val_array |
1 | a | 1 |
2 | ||
3 | ||
2 | b | 2 |
4 | ||
5 | ||
3 | c | 3 |
2 | ||
-1 |
Как вычислить косинусное сходство массива в BigQuery
Чтобы вычислить косинусное сходство массива в BigQuery, мы должны вычислить произведение между элементами векторов.
SQL ниже.
SQL
SELECT t1.key AS key1, t2.key AS key2, ( SELECT SUM(value1 * value2)/ SQRT(SUM(value1 * value1))/ SQRT(SUM(value2 * value2)) FROM UNNEST(t1.val_array) AS value1 WITH OFFSET pos1 JOIN UNNEST(t2.val_array) AS value2 WITH OFFSET pos2 ON pos1 = pos2 ) AS cosine_similarity FROM test.array_sample2 AS t1, test.array_sample2 AS t2 ORDER BY key1, key2, cosine_similarity
Он разложил массив на каждый элемент, используя UNNEST(array)
, и добавил номер заказа WITH OFFSET pos
.
Затем используйте «pos» в качестве ключа соединения для умножения каждого элемента.
Результат ниже.
Result of SQL
Row | key1 | key2 | cosine_similarity |
---|---|---|---|
1 | a | a | 1 |
2 | a | b | 0.9960238411 |
3 | a | c | 0.2857142857 |
4 | b | a | 0.9960238411 |
5 | b | b | 1 |
6 | b | c | 0.3585685828 |
7 | c | a | 0.2857142857 |
8 | c | b | 0.3585685828 |
9 | c | c | 1 |
Векторы a и b подобны. Так что сходство высокое.
Вектор c смотрит в другом направлении. Так что сходство низкое.
Заключение
Сегодня я рассказал о "Как вычислить косинусное сходство массива в BigQuery".
Чтобы вычислить косинусное сходство массива, мы можем принять решение ниже.
Point

UNNEST(массив)
немного затруднительно.Есть и другие статьи о BigQuey.
Если вы заинтересованы в них, пожалуйста, прочитайте их.
Read more