база данных

Как вычислить косинусное сходство массива в BigQuery

2023-02-20

Share this for your friends.

Как вычислить косинусное сходство массива в BigQuery

Как мы можем вычислить косинусное сходство в BigQuery?

BigQuery(BQ) очень полезен для анализа или обработки данных.

Он хорошо справляется с большими объемами данных. Он возвращает итоговый результат в короткие сроки.


BQ имеет один полезный формат данных массив.

Когда мы рассматриваем массив как вектор, нам может понадобиться косинусное сходство векторов.

Итак, как мы можем получить косинусное сходство?

Итак, сегодня я расскажу о "Как вычислить косинусное сходство массива в BigQuery".

Author


Инженер среднего звена (ИИ, системы). Хорошо владеет Python и SQL.

Преимущество для чтения

Вы можете понять "Как вычислить косинусное сходство массива в BigQuery". Тогда вам не нужно беспокоиться о сходстве.


Что такое косинусное подобие

what

Косинусное сходство — это мера сходства между двумя векторами.

Косинус 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


Формула подобия косинусов приведена ниже.

cosine similarity formula
cosine similarity formula


Я помню, что когда-то этому учился...



Данные

data

Прежде чем рассчитать его, мы должны подготовить данные.

Чтобы создать массив данных, мы можем использовать таблицу, которую мы создали в предыдущем разделе.


Вы можете добавить 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

how

Чтобы вычислить косинусное сходство массива в 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(массив)"
  • Добавить число к элементу массива с помощью команды "СО СМЕЩЕНИЕМ"
  • Вычислить косинусное сходство путем умножения между каждым элементом массива

  • Использование UNNEST(массив) немного затруднительно.


    BigQuery Book


    Есть и другие статьи о BigQuey.

    Если вы заинтересованы в них, пожалуйста, прочитайте их.


    Share this for your friends.

    If you felt this article is useful, please share.

    にほんブログ村 IT技術ブログへ

    -база данных
    -

    © 2024 ITips