完全類似検索の実行
類似検索では、問合せベクトルと比較したベクトルの相対的な順序が検索されます。当然、比較は特定の距離メトリックを使用して行われますが、重要なのはそれらの間の距離ではなく、最上位の最も近いベクトルの結果セットです。
たとえば、特定の問合せベクトルを指定すると、データ・セット内の他のすべてのベクトルまでの距離を計算できます。このタイプの検索は、フラット検索(完全検索)とも呼ばれ、完全な検索品質で最も正確な結果が生成されます。ただし、この検索には時間がかかるというデメリットがあります。次の図にこれを示します。
完全検索では、各ベクトルまでの距離を計算して、問合せベクトルvq
を空間内の他のすべてのベクトルと比較します。これらのすべての距離を計算した後、検索では、最も近い一致として最も近いk
件が返されます。これはk近傍法(kNN)検索と呼ばれます。
たとえば、ユークリッド類似検索では、ユークリッド距離メトリックと問合せベクトルを基準にして、空間内の最も近いtop-kのベクトルが取得されます。次の完全類似検索問合せを使用して、vector_tab
表からquery_vector
に最も近い上位10件のベクトルを取得する例を次に示します。
SELECT docID
FROM vector_tab
ORDER BY VECTOR_DISTANCE( embedding, :query_vector, EUCLIDEAN )
FETCH EXACT FIRST 10 ROWS ONLY;
この例では、docID
およびembedding
はvector_tab
表に定義されている列で、embedding
はVECTOR
データ型です。
ユークリッド距離の場合、平方距離の比較は距離の比較と同等です。したがって、順序付けが距離値自体よりも重要である場合、ユークリッド距離よりも計算が高速であるため、ユークリッド平方距離は非常に便利です(平方根の計算を回避します)。したがって、次のように問合せを書き直した方が簡単で高速です。
SELECT docID
FROM vector_tab
ORDER BY VECTOR_DISTANCE( embedding, :query_vector, EUCLIDEAN_SQUARED)
FETCH FIRST 10 ROWS ONLY;
ノート:
EXACT
キーワードはオプションです。ADB-Sインスタンスへの接続中に省略すると、ベクトル索引を使用した近似検索が試行されます(存在する場合)。詳細は、「ベクトル索引を使用した近似類似検索の実行」を参照してください。
ノート:
埋込みモデルのトレーニングに使用した距離関数を使用してください。関連項目:
ROW_LIMITING_CLAUSE
の完全な構文は、Oracle Database SQL言語リファレンスを参照してください
親トピック: 類似検索およびハイブリッド検索を使用したデータの問合せ