INNER_PRODUCT
2 つのベクトルの内積(ドット積)を計算します。これは、ベクトル間の類似性と射影を測定します。
構文
INNER_PRODUCT(vector1, vector2)
引数
vector1: 1 つ目のベクトル(VECTOR データ型)vector2: 2 つ目のベクトル(VECTOR データ型)
戻り値
2 つのベクトルの内積を表す FLOAT 値を返します。
説明
内積(ドット積とも呼ばれます)は、2 つのベクトルにおける対応する要素同士の積の総和を計算します。この関数は次の処理を行います。
- 2 つの入力ベクトルの長さが同じであることを検証する
- 各ベクトルの対応する要素同士を乗算する
- すべての積を合計して、単一のスカラー値を生成する
実装されている数式は次のとおりです。
inner_product(v1, v2) = Σ(v1ᵢ * v2ᵢ)
ここで、v1ᵢ と v2ᵢ は入力ベクトルの要素です。
内積は、次のような場面で基本となる概念です。
- ベクトルの類似性の測定(値が大きいほど方向がより類似していることを示します)
- あるベクトルを別のベクトルへ射影する計算
- 機械学習アルゴリズム(ニューラルネットワーク、SVM など)
- 仕事やエネルギーに関する物理計算
例
基本的な使用方法
SELECT INNER_PRODUCT([1,2,3]::VECTOR(3), [4,5,6]::VECTOR(3)) AS inner_product;
結果:
┌───────────────┐
│ inner_product │
├───────────────┤
│ 32.0 │
└───────────────┘
テーブルデータを使用する
ベクトルデータを含むテーブルを作成します。
CREATE TABLE vector_examples (
id INT,
vector_a VECTOR(3),
vector_b VECTOR(3)
);
INSERT INTO vector_examples VALUES
(1, [1.0, 2.0, 3.0], [4.0, 5.0, 6.0]),
(2, [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]),
(3, [2.0, 3.0, 1.0], [1.0, 2.0, 3.0]);
内積を計算します。
SELECT
id,
vector_a,
vector_b,
INNER_PRODUCT(vector_a, vector_b) AS inner_product
FROM vector_examples;
結果:
┌────┬───────────────┬───────────────┬───────────────┐
│ id │ vector_a │ vector_b │ inner_product │
├────┼───────────────┼───────────────┼───────────────┤
│ 1 │ [1.0,2.0,3.0] │ [4.0,5.0,6.0] │ 32.0 │
│ 2 │ [1.0,0.0,0.0] │ [0.0,1.0,0.0] │ 0.0 │
│ 3 │ [2.0,3.0,1.0] │ [1.0,2.0,3.0] │ 11.0 │
└────┴───────────────┴───────────────┴───────────────┘
ベクトル類似性の分析
-- Calculate inner products to measure vector similarity
SELECT
INNER_PRODUCT([1,0,0]::VECTOR(3), [1,0,0]::VECTOR(3)) AS same_direction,
INNER_PRODUCT([1,0,0]::VECTOR(3), [0,1,0]::VECTOR(3)) AS orthogonal,
INNER_PRODUCT([1,0,0]::VECTOR(3), [-1,0,0]::VECTOR(3)) AS opposite;
結果:
┌────────────────┬─────────────┬──────────┐
│ same_direction │ orthogonal │ opposite │
├────────────────┼─────────────┼──────────┤
│ 1.0 │ 0.0 │ -1.0 │
└────────────────┴─────────────┴──────────┘