メインコンテンツまでスキップ

cosine_similarity_norm

cos_similarity_norm

説明

cos_similarity_normは、2つの正規化されたベクトルの類似性を計算し、それらの間の角度の余弦を求めます。角度はベクトルの方向によって形成され、その大きさの差は無視されます。この関数は、入力ベクトルが正規化されていることを前提としています。余弦類似度を計算する前にベクトルを正規化する必要がある場合は、cosine_similarityを使用してください。

類似性の値は、-1から1の範囲内です。ベクトル間の角度が小さいほど、余弦類似性が高くなります。

  • 2つのベクトルが同じ方向を向いている場合、角度は0度であり、余弦類似性は1です。
  • 直交するベクトルは90度の角度と0の余弦類似性を持ちます。
  • 逆向きのベクトルは180度の角度と-1の余弦類似性を持ちます。

構文

cosine_similarity_norm(a, b)

パラメーター

ab は比較するベクトルです。これらのベクトルは同じ次元を持つ必要があります。サポートされているデータ型は Array<float> です。2つの配列は同じ数の要素を持つ必要があります。それ以外の場合はエラーが返されます。

返り値

範囲[-1, 1]内のFLOATの値を返します。入力パラメーターのいずれかがnullまたは無効な場合、エラーが報告されます。

  1. ベクトルを格納するテーブルを作成し、このテーブルにデータを挿入します。

    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]);
  2. data列の各行を配列[0.1, 0.2, 0.3]と比較し、結果を降順でリストします。

    SELECT id, data, cosine_similarity_norm([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.14000002 |
    | 2 | [0.2,0.1,0.3] | 0.13000001 |
    | 3 | [0.3,0.2,0.1] | 0.10000001 |
    +------+---------------+------------+