メインコンテンツまでスキップ
に最終更新

COSINE_SIMILARITY

説明​

二つのベクトル間のコサイン類似度を計算します。 類似度は内積とベクトルのノルムから計算され、結果は [-1, 1] の範囲に収まります。

バージョンに関する注記

この関数は 4.1.2 以降でサポートされています。

構文​

COSINE_SIMILARITY(<array1>, <array2>)

引数​

引数説明
<array1>第一ベクトル。入力型は ARRAY<FLOAT> である必要があります。
<array2>第二ベクトル。入力型は ARRAY<FLOAT> で、要素数は <array1> と同じである必要があります。

戻り値​

二つのベクトル間のコサイン類似度を FLOAT 型で返します。 入力配列が NULL、または配列内の要素が NULL の場合はエラーになります。 二つの配列の要素数が異なる場合はエラーになります。 配列が空、またはいずれかのベクトルがゼロベクトルの場合、0.0 を返します。

例​

-- Two identical vectors have similarity 1
SELECT COSINE_SIMILARITY([1, 2, 3], [1, 2, 3]);
+-----------------------------------------+
| COSINE_SIMILARITY([1, 2, 3], [1, 2, 3]) |
+-----------------------------------------+
| 1 |
+-----------------------------------------+

[1, 2, 3] と [1, 2, 3] は同じ方向を向くため、類似度は 1 です。

-- Orthogonal vectors have similarity 0
SELECT COSINE_SIMILARITY([1, 0], [0, 1]);
+-----------------------------------+
| COSINE_SIMILARITY([1, 0], [0, 1]) |
+-----------------------------------+
| 0 |
+-----------------------------------+

ベクトルは直交しているため、内積は 0、類似度も 0 です。

-- A zero vector returns 0
SELECT COSINE_SIMILARITY([0, 0, 0], [1, 2, 3]);
+-----------------------------------------+
| COSINE_SIMILARITY([0, 0, 0], [1, 2, 3]) |
+-----------------------------------------+
| 0 |
+-----------------------------------------+

ゼロベクトルには有効な方向がないため、結果は 0 です。

-- An empty array returns 0
SELECT COSINE_SIMILARITY([], []);
+---------------------------+
| COSINE_SIMILARITY([], []) |
+---------------------------+
| 0 |
+---------------------------+
-- NULL inside the input array raises an error
SELECT COSINE_SIMILARITY([1, NULL, 3], [1, 2, 3]);
ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]First argument for function cosine_similarity cannot have null