cơ sở dữ liệu

Cách tính độ tương tự cosine của mảng trong BigQuery

2023-02-24

Share this for your friends.

Cách tính độ tương tự cosine của mảng trong BigQuery

Làm cách nào để tính toán độ tương tự cosine trong BigQuery?

BigQuery(BQ) rất hữu ích cho việc phân tích hoặc xử lý dữ liệu.

Nó rất tốt trong việc xử lý dữ liệu khổng lồ.


BQ có một định dạng dữ liệu hữu ích mảng.

Khi coi mảng là véc-tơ, chúng ta có thể muốn độ đồng dạng cosin của véc-tơ.

Vì vậy, làm thế nào chúng ta có thể có được sự đồng dạng cosine?

Vì vậy, hôm nay tôi giới thiệu về "Cách tính độ tương tự cosine của mảng trong BigQuery".

tác giả


Kỹ sư tầm trung (AI, hệ thống), giỏi Python và SQL.

Lợi thế để đọc

Bạn có thể hiểu "Cách tính độ tương tự cosin của mảng trong BigQuery" thì bạn không phải lo lắng về độ tương tự.


đồng dạng cosine là gì

what

Độ tương tự cosine là một đo độ tương tự giữa hai vectơ.

Cosine cos là một trong các hàm lượng giác.

Nó nhận 1 trong trường hợp 0°, 0 trong trường hợp 90° và -1 trong trường hợp 180°.

Vì vậy, điều đó có nghĩa là chúng ta có thể có một góc nếu biết giá trị của cosin.

Và nếu một góc giữa 2 vectơ gần bằng 0, điều đó có nghĩa là 2 vectơ tương tự nhau.

Vì vậy, cosin được sử dụng như sự tương tự.

Cosine similarity is a measure of similarity between two non-zero vectors of an inner product space.

Reference: Cosine similarity - Wikipedia


Công thức tương tự cosin dưới đây.

cosine similarity formula
cosine similarity formula


Tôi nhớ rằng tôi đã từng học nó...



Dữ liệu

data

Trước khi tính toán, chúng ta nên chuẩn bị dữ liệu.

Để tạo dữ liệu mảng, chúng ta có thể sử dụng bảng mà chúng ta đã tạo trong chủ đề trước.


Bạn có thể thêm CREATE TABLE vào SQL và tạo bảng.

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



Cách tính độ tương tự cosine của mảng trong BigQuery

how

Để tính độ đồng dạng cosine của mảng trong BigQuery, chúng ta nên tính tích giữa các phần tử của vectơ.

SQL bên dưới.

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


Nó phân tách mảng thành từng phần tử bt UNNEST(array), và thêm số thứ tự bằng WITH OFFSET pos.

Sau đó, sử dụng pos làm khóa nối để nhân từng phần tử.


Kết quả dưới đây.

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


Vectơ a và b đồng dạng.

Vectơ c quay về hướng khác.




Phần kết luận

Hôm nay tôi đã giải thích về "Cách tính độ tương tự cosine của mảng trong BigQuery".

Để tính toán độ tương tự cosine của mảng, chúng ta có thể thực hiện giải pháp dưới đây.

Point

  • Phân tách mảng theo "UNNEST(array)"
  • Thêm số vào phần tử mảng bằng cách "WITH OFFSET pos"
  • Tính toán độ tương tự cosine bằng phép nhân giữa mỗi phần tử mảng

  • Sử dụng UNNEST(array) hơi khó.


    BigQuery Book


    Có một số bài viết khác về BigQuey.

    Nếu bạn quan tâm đến chúng, xin vui lòng đọc chúng.


    Share this for your friends.

    If you felt this article is useful, please share.

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

    -cơ sở dữ liệu
    -

    © 2024 ITips