マルチベクトル類似検索の実行

ベクトル検索のもう1つの主なユースケースは、マルチベクトル検索です。通常、マルチベクトル検索は複数ドキュメント検索に関連付けられており、個別にベクトルに埋め込まれるチャンクにドキュメントが分割されます。

マルチベクトル検索は、ドキュメントの特性に基づいてパーティションと呼ばれるグループ化基準を使用して、上位K件のベクトルの一致を取得することで構成されます。検索対象の問合せベクトルに対するチャンクの類似度に基づいてドキュメントをスコアリングするこの機能は、SQLでパーティション化された行制限句を使用すると容易になります。

マルチベクトル検索を使用すると、次のタイプの質問に回答するSQL文を記述することが簡単になります。

  • 存在する場合、最も一致する2つのブックの最も一致する3つの段落で、最も一致する4つの文は何ですか。

たとえば、データベース内の各ブックが、ベクトル埋込み表現を持つ文を含む段落に編成されている場合、次のような単一のSQL文を使用して前の質問に回答できます。

SELECT bookId, paragraphId, sentence
FROM books
ORDER BY vector_distance(sentence_embedding, :sentence_query_vector)
FETCH FIRST 2 PARTITIONS BY bookId, 3 PARTITIONS BY paragraphId, 4 ROWS ONLY;

次の例に示すように、完全類似検索のかわりに近似類似検索を使用することもできます。

SELECT bookId, paragraphId, sentence
FROM books
ORDER BY vector_distance(sentence_embedding, :sentence_query_vector)
FETCH APPROXIMATE FIRST 2 PARTITIONS BY bookId, 3 PARTITIONS BY paragraphId, 4 ROWS ONLY
WITH TARGET ACCURACY 90;

ノート:

返されるすべての行は、VECTOR_DISTANCE()で順序付けられ、パーティション句ではグループ化されません。

意味的には、前のSQL文は次のように解釈されます。

  • books表内のすべてのレコードを、文と問合せベクトルの間のベクトル距離の降順でソートする。
  • この順序のレコードごとに、そのbookIdおよびparagraphIdを確認する。このレコードは、次の3つの条件が満たされた場合に生成されます。
    1. bookIdは、そのソート順で最初の2つの別個のbookIdの1つである。
    2. そのparagraphIdは、同じbookId内のそのソート順で最初の3つの別個のparagraphIdの1つである。
    3. そのレコードは、同じbookIdparagraphIdの組合せ内の最初の4つのレコードの1つである。
  • それ以外の場合、このレコードは除外される。

マルチベクトル類似検索は、ドキュメントだけでなく、次の質問に回答するためにも使用できます。

  • 最も近い上位K枚の写真を返すが、異なる人の写真であるようにする。
  • この音声スニペットに最も一致する音声セグメントが2つ以上ある上位K曲を見つける。

ノート:

  • このパーティションの行制限句拡張は、SQL言語の全般的な拡張です。ベクトル検索にのみ適用されるわけではありません。
  • パーティション化の行制限句を使用したマルチベクトル検索では、ベクトル索引は使用されません。

関連項目:

ROW_LIMITING_CLAUSEの完全な構文は、Oracle Database SQL言語リファレンスを参照してください