VECTOR_COSINE (SQL)
構文
VECTOR_COSINE(vec1, vec2)
説明
VECTOR_COSINE 関数は、2 つの入力ベクトルのコサイン類似度を求めます。これらのベクトルは、integer、double、decimal のいずれかの数値型である必要があります。結果は、これらの間のコサインの値で、-1 ~ 1 の double として表されます。この値は、2 つのベクトルのドット積を 2 つのベクトルの長さの積で除算した値として計算されます。この式は以下のように表されます。

コサイン類似度は、2 つのベクトルの類似度の指標の 1 つです。コサイン類似度が正の場合、2 つのベクトルは類似していると見なされます。2 つのベクトル間のコサイン類似度が 1 の場合、2 つのベクトルは完全に同じです。コサイン類似度が負の場合、2 つのベクトルは類似していないと見なされます。2 つのベクトル間のコサイン類似度が -1 の場合、2 つのベクトルに共通点はありません。
この関数は単位ベクトル (つまり、1 に正規化されたベクトル) に対してのみ使用することをお勧めします。この演算を単位ベクトル以外に対して行うと、結果はオーバーフロー数値に急速に近づく場合があります。以下の表は、有効な各 VECTOR 型のオーバーフロー (およびアンダーフロー) の値を示しています。
オーバーフローの境界 | アンダーフローの境界 | |
Integer | 2,147,483,647 (231-1) | -2,147,483,648 (-231) |
Double | 1.79769e+308 | 2.22507e-308 |
Decimal | 1.79769e+308 | 2.22507e-308 |
Float | 3.402823e+38 | 1.175494e-38 |
引数
vec1、vec2
同じ数値型で同じ長さの 2 つのベクトル。これらのベクトルが異なる数値型の場合、この関数は SQLCODE -259 で失敗します。
string など、数値型ではないベクトルを指定した場合、この関数は SQLCODE -258 で失敗します。
これら 2 つのベクトルの長さが異なる場合、この関数は SQLCODE -257 エラーで失敗します。
例
以下の例では、2 つの integer 型のベクトルに VECTOR_COSINE 関数を使用しています。
SELECT VECTOR_COSINE(TO_VECTOR('6,4,5',integer), TO_VECTOR('1,4,3',integer))
以下の例では、VECTOR_COSINE 関数を使用して、各行に格納されているベクトルと入力ベクトル間の類似度に基づいて、結果に最も類似する説明テキストを返します。実際には、埋め込みベクトルには 3 つより多くの要素がありますが、この例では簡潔にするために、埋め込みベクトルを 3 つの要素を持つものとして表しています。
SELECT TOP 5 Description FROM Sample.DescAndEmbedding emb
ORDER BY VECTOR_COSINE(Embedding,TO_VECTOR('0.3,0.4,0.6',double)) DESC