dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

BigQuery でベクトル間のコサインを計算する関数を作成

2023-12-03 13:10:47 | BigQuery
BigQuery でベクトル間のコサインを計算する関数を作成します。
■関数定義
create or replace function
  dataset.vector_cosine(v1 array<float64>, v2 array<float64>)
returns
  float64
as (
  (select
    sum(e1 * e2)
  from
    unnest(v1) as e1 with offset idx1
  inner join
    unnest(v2) as e2 with offset idx2
  on
    idx1 = idx2
  ) / (dataset.vector_length(v1) * dataset.vector_length(v2))
);

dataset.vector_length() は「BigQuery でベクトルの長さを計算する関数を作成」で定義しています。
■実行例
select dataset.vector_cosine([1.0, 2.0, 3.0, 4.0], [4.0, 3.0, 2.0, 1.0]);

実行結果
[{
  "f0_": "0.66666666666666663"
}]


BigQuery でベクトルを正規化する関数を作成

2023-12-03 12:59:54 | BigQuery
BigQuery でベクトルを正規化する関数を作成します。
■関数定義
create or replace function dataset.vector_normalize(v array<float64>)
returns array<float64> as (
  dataset.vector_scalar_multiply(
    v,
    1.0 / dataset.vector_length(v)
  )
);

dataset.vector_scalar_multiply() はBigQuery でベクトルを定数倍する関数を作成に記載しています。
■実行例
select dataset.vector_normalize([1.0, 2.0, 3.0, 4.0]);

実行結果
[{
  "f0_": ["0.18257418583505536", "0.36514837167011072", "0.54772255750516607", "0.73029674334022143"]
}]

BigQuery でベクトルを定数倍する関数を作成

2023-12-03 12:44:50 | BigQuery
BigQuery でベクトルを定数倍する関数を作成します。
■関数定義
create or replace function dataset.vector_scalar_multiply(v array<float64>, a float64)
returns array<float64> as (
  array(
    select
      e * a
    from
      unnest(v) as e
  )
);

■実行例
select ikeda_ai_test.vector_scalar_multiply([1.0, 2.0, 3.0, 4.0], 2.0);

実行結果
[{
  "f0_": ["2.0", "4.0", "6.0", "8.0"]
}]