cos_similarity
Description
2 つのベクトル間の角度の余弦を計算することで、ベクトルの類似性を測定します。この角度はベクトルの方向によって形成され、ベクトルの大きさの違いは無視されます。
類似性は -1 から 1 の間にあります。ベクトル間の角度が小さいほど、余弦類似度が高くなります。
- 2 つのベクトルが同じ方向を持つ場合、角度は 0 度であり、余弦類似度は 1 です。
- 垂直なベクトルは 90 度の角度を持ち、余弦類似度は 0 です。
- 反対方向のベクトルは 180 度の角度を持ち、余弦類似度は -1 です。
cosine_similarity
は、テキストやビデオの類似性を評価するためによく使用されます。
この関数は、余弦類似度を測定する前にベクトルを正規化します。入力ベクトルが正規化されている場合は、cosine_similarity_norm を使用できます。
Syntax
cosine_similarity(a, b)
Parameters
a
と b
は比較するベクトルです。これらは同じ次元を持つ必要があります。サポートされているデータ型は Array<float>
です。2 つの配列は同じ数の要素を持つ必要があります。そうでない場合、エラーが返されます。
Return value
[-1, 1] の範囲内の FLOAT 値を返します。入力パラメータが null または無効な場合、エラーが報告されます。
Examples
-
ベクトルを格納するテーブルを作成し、このテーブルにデータを挿入します。
CREATE TABLE t1_similarity
(id int, data array<float>)
DISTRIBUTED BY HASH(id);
INSERT INTO t1_similarity VALUES
(1, array<float>[0.1, 0.2, 0.3]),
(2, array<float>[0.2, 0.1, 0.3]),
(3, array<float>[0.3, 0.2, 0.1]); -
data
列の各行の類似性を配列[0.1, 0.2, 0.3]
と比較し、結果を降順でリストします。SELECT id, data, cosine_similarity([0.1, 0.2, 0.3], data) as dist
FROM t1_similarity
ORDER BY dist DESC;
+------+---------------+-----------+
| id | data | dist |
+------+---------------+-----------+
| 1 | [0.1,0.2,0.3] | 0.9999999 |
| 2 | [0.2,0.1,0.3] | 0.9285713 |
| 3 | [0.3,0.2,0.1] | 0.7142856 |
+------+---------------+-----------+