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

cosine_similarity

cos_similarity

説明

ベクトル間の類似性を、それらの間の角度の余弦を計算することによって測定します。ベクトルの方向によって形成される角度を考慮し、それらの大きさの差異は無視されます。

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

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

cosine_similarity は、テキストやビデオの類似性を評価するためによく使用されます。

この関数は、ベクトルを測定する前に正規化します。入力ベクトルが正規化されている場合は、cosine_similarity_normcosine_similarity_normを使用できます。

構文

cosine_similarity(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([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 |
    +------+---------------+-----------+