ハイブリッド・ベクトル索引の理解

ハイブリッド・ベクトル索引は、Oracle Text検索索引のすべての情報取得機能を継承し、Oracle AI Vector Searchベクトル索引のセマンティック検索機能を利用します。

ハイブリッド・ベクトル索引を使用すると、全文検索とセマンティック・ベクトル検索の組合せを使用して、ドキュメントの索引付けおよび問合せを行うことができます。ハイブリッド・ベクトル索引は、既存のOracle Text索引付けデータ構造とベクトル索引付けデータ構造を1つの統合された構造に結合した特殊なドメイン索引のクラスです。1つの索引にドキュメントのテキスト・フィールドとベクトル・フィールドの両方が含まれ、キーワード検索とベクトル検索の組合せを同時に実行できます。

ハイブリッド・ベクトル索引の目的は、すぐに利用可能なスコアリング手法とカスタム・スコアリング手法を使用して、ユーザーがベクトルキーワードの両方を様々な組合せで検索できるようにすることで、Oracle Text索引の検索の関連性を高めることです。従来のキーワードベースのテキスト検索をベクトルベースの類似検索と統合することで、全体的な検索エクスペリエンスを向上させ、より正確な情報をユーザーに提供できます。

ハイブリッド・ベクトル索引を使用する場合

ハイブリッド・ベクトル索引は、セマンティックが似ているが特定の重点領域(特定の組織、ユーザー名、製品コード、技術用語、日付、時間など)に関連する情報を必要とする問合せのハイブリッド検索シナリオに使用することを検討してください。たとえば、一般的なハイブリッド検索の問合せは、「top 10 instances of stock fraud for ABC Corporation」を検索することです。

このような問合せには、次の2つの別々のコンポーネントが含まれています:

  • stock fraud」の概念を識別するもの

  • 結果を絞り込んで「ABC Corporation」のみに焦点を当てるもの

純粋なキーワード検索では、「stock」、「fraud」、「ABC」、「Corporation」などの問合せの単語を具体的に含む結果を返すことができます。これは、テキスト索引のトークン化された語句と、単語またはフレーズの一致するキーワードまたは表面レベルの表現を照合することに重点が置かれているためです。このため、キーワード検索だけでは、特にコンテンツに一致する語句が存在しない場合は、問合せ内の単語の背後にあるセマンティックな意味を見落とす可能性があるため、ここでは適していない可能性があります。

純粋なベクトル検索は、単にキーワードを照合するのではなく、単語やフレーズの意味やコンテキストを理解することに重点を置いています。ベクトル検索では、問合せの単語間のセマンティックな関係が考慮されるため、「corporate fraud」、「stock market manipulation」、「stock misconduct」、「financial irregularities」、「lawsuits in the financial sector」など、より文脈に応じた結果が含まれる場合があります。ベクトル検索も、ABCまたは同様の組織が関与する株式詐欺の幅広いトピックに関する結果が含まれる可能性があるため(特に「ABC株式会社の株式詐欺」という正確なフレーズがコンテンツに存在しない場合)、ここでは適していない可能性があります。

ハイブリッド検索では、同じデータに対してキーワード検索とベクトル検索を実行し、2つの検索結果を1つの結果セットに結合することによって、このような問合せの両方のコンポーネントに対処できます。このようにして、テキスト索引とベクトル索引の両方の長所を利用して、最も関連性の高い結果を取得できます。

ハイブリッド・ベクトル索引を選択する理由

ハイブリッド・ベクトル索引の利点をまとめてみます。

  • 純粋なベクトル検索またはキーワード検索と比較すると想起性が高い:

    前述のとおり、ハイブリッド検索では、Oracle AI Vector SearchとOracle Text Searchの機能を組み合せて、より正確でパーソナライズされた情報を提供できます。キーワード検索またはベクトル検索だけは、複雑な検索シナリオには適切ではなく、多くの誤った結果につながる可能性があります。

  • チャンク化の短所の軽減:

    ベクトル埋込みモデルでは、通常、入力テキストのサイズに制限が課されるため、大きいドキュメントがセマンティック検索用に小さいチャンクのデータに分割されます(「データ変換のステージの理解」を参照)。チャンクは、切り捨てによって元のドキュメントのより広いコンテキストを失う可能性があり、間違った結果となる可能性があります。ハイブリッド・ベクトル索引は、ドキュメント・レベルでテキスト検索を実行することで、各ドキュメントのコンテキスト全体を復元するのに役立ちます。

  • 独立した索引のメンテナンスと比較してデプロイおよび管理が簡単:

    ハイブリッド・ベクトル索引は、DMLを使用してテキストおよびベクトルを保守できる単一のドメイン索引です。キーワード検索とベクトル検索の両方がすべてのドキュメントに対して実行され、2つの検索結果が結合およびスコアリングされて、統合された結果セットが返されます。ベクトル検索の入力データを自動的に変換するエンドツーエンドの索引付けパイプラインがキーワード検索とともに提供されるため、索引付けのパフォーマンスが向上します。この索引は、索引付けパラメータを構成するためのオプションのプリファレンスを公開しますが、必須ではありません。

    ハイブリッド・ベクトル索引のDDLの例を次に示します。

    CREATE HYBRID VECTOR INDEX my_hybrid_idx on
      DOCS(file_name) 
      PARAMETERS ('MODEL MY_INDB_MODEL');

    ここでは、DOCS表のfile_name列に、my_hybrid_idxという名前のハイブリッド・ベクトル索引が作成されます。ベクトル生成に使用される埋込みモデルは、MY_INDB_MODELという名前のデータベース内ONNX形式モデルです。

    前述の例は、索引作成の最小入力要件を示しています。完全な構文については、「CREATE HYBRID VECTOR INDEX」を参照してください。

  • ベクトルおよびキーワードで検索するために統合された問合せAPI:

    単一のSEARCH API (DBMS_HYBRID_VECTOR PL/SQLパッケージで使用可能)を使用して、ドキュメント・テキスト索引に対する従来のCONTAINS問合せと、ベクトル化されたチャンクの索引に対するVECTOR_DISTANCE問合せの両方を指定できます。キーワードのみ、ベクトルのみおよびハイブリッド検索のモードを切り替えて、最適なドキュメントまたはチャンクを取得できます。

    前述の「top 10 instances of stock fraud for ABC Corporation」のシナリオにSEARCH APIを使用するハイブリッド検索の例を次に示します:

    select DBMS_HYBRID_VECTOR.SEARCH(
        json('{ "hybrid_index_name"     : "my_hybrid_idx",
                "vector":
                        { "search_text" : "stock fraud" },
                "text"  :
                        { "contains"    : "$ABC AND $Corporation" },
                "return":
                        { "topN"        : 10 }
              }')) 
    from dual;

    この問合せでは、ベクトル検索(ベクトル距離関数を使用)の検索テキストにstock fraud、キーワード検索(CONTAINS Oracle Text索引演算子を使用)の検索テキストに$ABC AND $Corporation、返す最大行数に上位10件を指定します。ステム($)演算子およびその他のCONTAINS演算子の使用方法を理解するには、『Oracle Textリファレンス』を参照してください。

    完全な構文については、「ハイブリッド検索の理解」を参照してください。

ハイブリッド・ベクトル索引のユースケースの例

ハイブリッド・ベクトル索引の実装方法を理解するためのユースケース・シナリオを次に示します

  • 不正の検出:

    既知の不正ケースのパターンに完全に一致していないが、動作やコンテキストが類似している不正なトランザクションを識別できます。この場合、ハイブリッド・ベクトル索引では、従来のルールベースのフィルタ(特定のしきい値を超えたトランザクションや特定の場所にあるトランザクションなど)を、トランザクションの埋込み(タイミング、マーチャント・タイプ、トランザクション履歴などの特徴を捕らえる)を比較するベクトル索引と組み合せて、セマンティックが類似しているが不正パターンが同一ではないものを識別できます。

  • 法律文書の分析:

    関連する判例および先例について、大量の法的文書を検索する必要があります。最初に、従来の法的用語およびキーワードの検索を使用してドキュメントをフィルタ処理できます。その後、ドキュメントの埋込みから作成されたベクトル索引を使用して、異なる用語や法的論証を使用していてもセマンティックが類似しているかどうかで、前に識別されたドキュメントをさらにフィルタリングして、包括的な調査にすることができます。

    たとえば、画期的な訴訟とコンテキスト的に似ている訴訟を探しているが、訴訟に特定の法的用語や引用も含まれていることも確認する必要がある場合などは、異なる順序で検索を実行できます。ここでは、検索はベクトルベースの検索から開始して、画期的な訴訟とセマンティックが似ている訴訟を埋込みを使用して取得できます。次に、従来のキーワードベースのフィルタを適用して、結果に特定の法的用語、法令または引用が含まれるようにできます。

  • 医学文書の分析:

    医学研究の論文や記事は、関心のある用語を直接言及しているか、これらのキーワードについてまったく言及していません。これらの文書は、専門分野の研究者や科学者によって書かれているからです。ここでは、キーワードのみの検索とベクトルのみの検索を切り替えて、関心のある特定の医療用語と専門分野についてそれぞれ言及するドキュメントをすばやく見つけることができます。また、セマンティック検索とキーワード検索を異なる順序で組み合せることもできます。埋込みを使用したベクトルベースのセマンティック検索から開始して、調査領域とコンテキストが類似した文書を最初に識別できます。次に、キーワードベースのフィルタを適用して、研究に不可欠な特定の参照または医療用語のみを含めるように結果をさらに絞り込みます。

  • HR採用:

    プログラミング言語に強力な技術スキルを持つ新しい従業員を募集しますが、対象者は特定の性格や対人特性も備えている必要があります。ここでは、最初にキーワードベースのフィルタを適用して、技術スキル(Javaやデータベースなど)に最も適合させることができます。次に、セマンティック検索を実行して、性格および対人特性(チーム・ワークやリーダーシップの経験など)を識別できます。ハイブリッド検索アプローチは、履歴書やポートフォリオを二重の焦点でスキャンして比較することで、採用担当者が候補者を効果的に最終的選抜候補者名簿に入れるのに役立ちます。

ハイブリッド・ベクトル索引作成の概要

ハイブリッド・ベクトル索引を作成するには、索引を作成する表と列とともに詳細(すべてのソース・ドキュメントが格納されているローカルまたはリモートの場所(データストア)、埋込みの生成に使用するONNXデータベース内埋込みモデル、作成するベクトル索引のタイプなど)を指定します。この章で後述する追加パラメータを指定できます。

次の図に示すように、ハイブリッド・ベクトル索引のDDLでは、索引付きドキュメントごとに、テキスト・フィールド(導出されたテキスト・トークンを含む)とベクトル・フィールド(抽出されたチャンクおよび対応する埋込みを含む)の両方を含む単一の索引が作成されます。

ご覧のとおり、ハイブリッド・ベクトル索引の実装では、Oracle Textの検索索引およびOracle AI Vector Searchのベクトル索引の既存の機能が利用されています。PL/SQLプリファレンスを定義して、両方の索引タイプについて、これらのすべての索引付けパイプライン・ステージをカスタマイズできます。

ドキュメント表DOCSには、MY_DSデータストアと呼ばれる場所に格納されているIDおよび対応するドキュメント名またはファイル名が含まれています。

索引付けパイプラインでは、始めにMY_DS (データストア)からドキュメントを読み取り、一連の処理ステージにドキュメントが渡されます:

  1. フィルタ(PDF、Word、Excelなどのバイナリ・ドキュメントからプレーン・テキストへの変換)

  2. トークン化(キーワード検索用のデータのトークン化)とベクトル化(ベクトル検索用のチャンク化と埋込み生成)

  3. 索引作成エンジン(セカンダリ表の作成)

    ドキュメントがこの索引付けエンジンに渡されると、ハイブリッド・ベクトル索引の集積された部分である一連のセカンダリ表に移入され、索引付けされます。

    作成される2つの主要なセカンダリ表は次のとおりです:

    • $Iは、トークン化された語句を含む逆索引データを含む既存のOracle Text索引と同じ構造です。

      Oracle Textの索引は、指定に基づいてテキスト列上に作成されます。Oracle Textの索引付けプロセスの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

    • $VRには、生成されたチャンクおよび対応する埋込みを含む索引付きデータが含まれています。

      ベクトル索引は、指定に基づいてVECTOR列に対しても作成されます。$VRには、ドキュメント表の行IDにマップされるROWID列と、Oracle TextのドキュメントレベルIDにリンクされるDOCID列も含まれています。これにより、チャンク、トークンおよびドキュメントの間のリンクが作成されます。

      ディクショナリ・ビュー<index name>$VECTORSを使用して$VR表を直接確認できます。これにより、すべての行ID、チャンクおよび埋込みを問い合せることができます。「<index name>$VECTORS」を参照してください。

    $Dセカンダリ表(図には示されていません)も一時的に作成され、元のドキュメントがまだデータベースに存在しない場合、またはフィルタ処理が必要な場合にドキュメントのコピーが保存されます。この表は、チャンクの取得後に切り捨てられます。

ハイブリッド・ベクトル索引のメンテナンス操作

ハイブリッド・ベクトル索引では、MAINTENANCE AUTOSYNCOPTIMIZEなど、Oracle Text索引の従来の操作がすべてサポートされます。詳細は、「ハイブリッド・ベクトル索引のガイドラインおよび制限事項」を参照してください。