21 Oracle Databaseでの人工知能
この章では、Oracle Databaseで提供されている人工知能機能について説明します。
- Oracle AI Vector Searchの概要
Oracle AI Vector Searchは、人工知能(AI)ワークロード向けに設計されており、キーワードではなくセマンティクスに基づいてデータを問い合せることができます。 - Hierarchical Navigable Small World索引の理解
ベクトル近似類似検索のHNSW索引を作成する方法を理解するには、これらの例を使用します。 - Inverted File Flatベクトル索引の理解
Inverted File Flatベクトル索引は、近傍パーティションまたはクラスタを使用して検索領域を絞り込むことで検索効率を向上させるように設計された手法です。 - ベクトル距離メトリック
ベクトル空間での距離の測定は、特定の問合せベクトルの最も関連性の高い結果を識別するときに核心となる部分です。このプロセスは、リレーショナル・データベースの世界でよく知られているキーワードのフィルタリングとは大きく異なります。 - Oracle Databaseでの人工知能
この項では、類似検索の実行方法について説明します。
Oracle AI Vector Searchの概要
Oracle AI Vector Searchは、人工知能(AI)ワークロード向けに設計されており、キーワードではなくセマンティクスに基づいてデータを問い合せることができます。
VECTORデータ型
VECTOR
データ型は、Oracle Database 23aiのリリースで導入され、ベクトル埋込みをデータベース内のビジネス・データとともに格納するための基盤となります。埋込みモデルを使用すると、非構造化データをベクトル埋込みに変換して、ビジネス・データに対するセマンティック問合せに使用できます。VECTOR
データ型とその関連機能を使用するには、COMPATIBLE
初期化パラメータを23.4.0以上に設定する必要があります。このパラメータとその変更方法の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。
表定義でVECTOR
データ型を使用する次の基本的な例を参照してください:
CREATE TABLE docs (doc_id INT, doc_text CLOB, doc_vector VECTOR);
VECTOR
データ型および表でのベクトルの使用方法の詳細は、VECTORデータ型を使用した表の作成を参照してください。
VECTOR
データ型の数値特性により、分類、異常、回帰、クラスタリング、特徴抽出などの機械学習アルゴリズムへの入力として使用できます。機械学習でのVECTOR
データ型の使用の詳細は、ベクトル・データ型のサポートを参照してください。
ノート:
VECTOR
データ型の機械学習のサポートは、23.7以降のすべてのバージョンで使用できますが、以前のバージョンでは使用できません。
ベクトル埋込み
音声アシスタント、チャットボット、言語翻訳機能、レコメンデーション・システム、異常検出、ビデオの検索および認識などのアプリケーションを使用したことがある場合は、ベクトル埋込み機能を暗黙的に使用しています。
Oracle AI Vector Searchでは、データ・ポイントの数学的ベクトル表現であるベクトル埋込みを格納します。これらのベクトル埋込みは、単語、ドキュメント、音声トラック、画像などのコンテンツの背後にある意味論的な意味を表現します。たとえば、多くの場合、テキスト・ベースの検索の実行ではベクトル検索がキーワード検索よりも優れていると見なされます。ベクトル検索は、実際の単語自体ではなく、単語の背後にある意味とコンテキストに基づくためです。このベクトル表現では、人間が認識するオブジェクトの意味的類似度が数学的ベクトル空間の近接に変換されます。このベクトル空間には、通常、数千でなければ数百の次元があります。言い換えると、ベクトル埋込みはテキスト、画像、ビデオ、ユーザー、音楽などのほぼすべての種類のデータを多次元空間内のポイントとして表す方法であり、空間内のそれらのポイントの場所および他のポイントとの近接性がセマンティックな意味を持ちます。
この簡略化された図は、単語が2次元ベクトルとしてエンコードされるベクトル空間を示しています。
類似検索
データ・セットの意味的類似度の検索は、問合せ述語を使用した従来のキーワード検索ではなく、ベクトル空間で最近傍を検索することと同等になりました。次の図に示すように、このベクトル空間のdogとwolfの間の距離は、dogとkittenの間の距離より短くなっています。この空間では、犬は子猫よりも狼に似ています。詳細は、「完全類似検索の実行」を参照してください。
ベクトル・データは不均等に分散され、セマンティックに関連するグループにクラスタ化される傾向があります。特定の問合せベクトルに基づいて類似検索を行うことは、ベクトル空間で問合せベクトルに最も近いK件のベクトルを取得することと同等です。基本的に、ベクトルの順序付きリストをランク付けして検索する必要があります。リストの最初の行は問合せベクトルに最も近いまたは最も類似したベクトルで、リスト内の2番目の行は問合せベクトルに2番目に最も近いベクトルです(以下同様に続きます)。類似検索を行う場合、距離の相対的な順序は実際の距離よりも重要です。
前述のベクトル空間を使用して、問合せベクトルがPuppyという単語に対応するものであり、最も近い4つの単語を識別する場合のセマンティック検索の図を次に示します:
類似検索では、問合せベクトルの値およびフェッチ・サイズに応じて、1つ以上のクラスタからデータが取得される傾向があります。
ベクトル索引を使用した近似検索では、検索を特定のクラスタに制限できますが、完全検索ではすべてのクラスタにわたってベクトルを確認します。詳細は、ベクトル索引の使用を参照してください。
ベクトル埋込みモデル
このようなベクトル埋込みを作成する1つの方法は、誰かのドメインの専門知識を使用して、処理するオブジェクト・タイプに応じて、形状、テクスチャ、色、センチメントなどの事前定義された一連の機能または次元を定量化することです。ただし、この方法の効率はユースケースによって異なり、必ずしもコスト効率が高いとはかぎりません。
かわりに、ベクトル埋込みはニューラル・ネットワークを介して作成されます。ほとんどの最新のベクトル埋込みでは、次の図に示すようにTransformerモデルが使用されますが、畳み込みニューラル・ネットワークも使用されることがあります。
データのタイプに応じて、様々な事前トレーニング済のオープンソース・モデルを使用してベクトル埋込みを作成できます。次に例を示します。
- テキスト・データの場合、文トランスフォーマは単語、文または段落をベクトル埋込みに変換します。
- 視覚データの場合、残差ネットワーク(ResNet)を使用してベクトル埋込みを生成できます。
- 音声データの場合、音声データの視覚的なスペクトログラム表現を使用して、視覚データのケースにフォールバックできます。
各モデルによって、ベクトルの次元数も決まります。次に例を示します。
- Cohereの埋込みモデルembed-english-v3.0には、1024の次元があります。
- OpenAIの埋込みモデルtext-embedding-3-largeには、3072の次元があります。
- Hugging Faceの埋込みモデルall-MiniLM-L6-v2には、384の次元があります
もちろん、独自のデータ・セットを使用してトレーニングされた独自のモデルをいつでも作成できます。
Oracle Databaseへの埋込みモデルのインポート
事前トレーニング済のオープンソースの埋込みモデルまたは独自の埋込みモデルを使用して、Oracle Databaseの外部でベクトル埋込みを生成できますが、これらのモデルがOpen Neural Network Exchange (ONNX)標準と互換性がある場合は、Oracle Databaseに直接インポートすることもできます。Oracle Databaseでは、データベース内にONNX Runtimeが直接実装されます。これにより、SQLを使用してOracle Database内でベクトル埋込みを直接生成できます。詳細は、「ベクトル埋込みの生成」を参照してください。
親トピック: Oracle Databaseでの人工知能
Hierarchical Navigable Small World索引の理解
ベクトル近似類似検索用のHNSW索引の作成方法を理解するには、これらの例を使用してください。
Navigable Small World(NSW)の概念は、次の3つの特性に基づいて、グラフ内の各ベクトルが他の複数のベクトルに接続する近接グラフを作成することです。
- ベクトル間の距離
- 挿入時に検索の各ステップで考慮される最も近いベクトル候補の最大数
(EFCONSTRUCTION)
- ベクトルごとに許可される最大接続数(
NEIGHBORS
)内
前述の2つのしきい値の組合せが高すぎる場合は、緊密に接続されたグラフが作成されるため、検索処理が遅くなる可能性があります。一方、これらのしきい値の組合せが低すぎる場合、グラフが疎になりすぎるか、切断されるため(あるいはその両方)、検索中に特定のベクトルの間のパスを見つけることが困難になります。
ベクトル検索のNavigable Small World (NSW)グラフ走査は、グラフ内の事前定義済のエントリ・ポイントから始まり、密接に関連するベクトルのクラスタにアクセスします。検索アルゴリズムでは、2つのキー・リストを使用します。1つはCandidatesであり、グラフの走査中に検出されたベクトルの動的に更新されたリスト、もう1つはResultsであり、これまでに検出された問合せベクトルに最も近いベクトルを含みます。検索が進行するにつれて、アルゴリズムはグラフ内を移動し、結果内のベクトルよりも近い可能性があるベクトルを探索して評価することで、候補を継続的に絞り込みます。このプロセスは、Resultsの中で最も遠い方に近いCandidatesにベクトルがなくなると、局所的な最小値に達し、問合せベクトルに最も近いベクトルが識別されたことを示し、終了します。
これを次の図に示します。
説明した方法では、グラフへのベクトル挿入で特定のスケールまでは堅牢なパフォーマンスを示します。このしきい値を超えたHierarchical Navigable Small World (HNSW)のアプローチでは、確率スキップ・リストで確認された構造と同質の多層階層を導入することによって、NSWモデルが強化されています。この階層アーキテクチャは、グラフの接続を複数のレイヤーに分散し、後続の各レイヤーに下のレイヤーからのリンクのサブセットが含まれるように編成することによって実装されます。この階層化により、上位レイヤーは長い距離のリンクを取得してグラフ全体の高速な経路として効果的に機能し、下位レイヤーは短いリンクに重点を置いて詳細でローカルなナビゲーションを容易にします。その結果、検索は上位レイヤーから開始され、ターゲット・ベクトルの領域にすばやく近づき、より正確な検索のために下位レイヤーに段階的に移動し、上位レイヤーから下位レイヤーに移動するときにベクトル間の短いリンク(小さい距離)を利用することで、検索の効率と精度が大幅に向上します。
これがHNSWでどのように機能するかをよりよく理解するために、この階層が確率スキップ・リスト構造にどのように使用されるかを見てみましょう。
確率スキップ・リスト構造では、リンクされたリストの複数のレイヤーが使用され、上位レイヤーでは下位レイヤーよりも多くの数がスキップされます。この例では、17番を検索しようとしています。最上位レイヤーから開始して、17が見つかるか、リストの最後に到達するか、17より大きい数値を見つけるまで、次の要素にジャンプします。リストの最後に到達した場合、または17より大きい数値が見つかった場合は、前のレイヤーで17未満の最後の数値から開始します。
HNSWでは、NSWレイヤーと同じ原則が使用され、高いレイヤーでベクトル間の距離が長くなります。次の図の2D空間にこれを示します。
最上位レイヤーには最も長いエッジがあり、最下位レイヤーには最も短いエッジがあります。
最上位レイヤーから開始し、1つのレイヤーでの検索はエントリ・ベクトルから開始されます。次に、各ノードについて、現在のノードよりも問合せベクトルに近い近隣がある場合は、その近隣にジャンプします。アルゴリズムでは、問合せベクトルのローカル最小値が見つかるまで、この処理が続けられます。ローカル最小値が1つのレイヤーで検出されると、次のレイヤーの同じベクトルを使用することで検索がその新しいレイヤーに移動し、そのレイヤーで検索が続行されます。このプロセスは、すべてのベクトルを含む最下位レイヤーのローカル最小値が見つかるまで繰り返されます。この時点で、検索は見つかったその最後のローカル最小値のあたりでNSWアルゴリズムを使用した近似類似検索に変換され、問合せベクトルに最も類似した上位k
件のベクトルが抽出されます。上位レイヤーは、NEIGHBORS
パラメータによって設定された各ベクトルの最大接続数を持つことができますが、レイヤー0
は2倍の接続数を持つことができます。次の図はこのプロセスを示しています。
レイヤーは、(Oracle Inmemoryグラフではなく)インメモリー・グラフを使用して実装されます。各レイヤーでは、個別のインメモリー・グラフが使用されます。すでに説明したように、HNSW索引の作成時には、上位レイヤーのベクトルごとの最大接続数はNEIGHBORS
パラメータを使用して、挿入時に検索の各ステップで考慮される最も近いベクトル候補の最大数はEFCONSTRUCTION
パラメータ(ここで、EFはEnter Factorを表します)を使用して微調整できます。
前述のように、Oracle AI Vector Searchを使用して、HNSW索引を使用して近似検索問合せを実行する場合は、近似検索を実行するターゲット精度を指定できます。
HNSW近似検索の場合、ターゲット精度のパーセント値を指定して、検索の精査で考慮される候補の数に影響を与えることができます。これは、アルゴリズムによって自動的に計算されます。値が100の場合は、完全検索と同様の結果となる傾向がありますが、システムでは引き続き索引が使用され、完全検索は実行されません。オプティマイザでは、問合せの述語がある場合は索引を使用する方が高速になる可能性があるため、引き続き索引を使用することが選択されることがあります。ターゲット精度のパーセンテージ値を指定するかわりに、EFSEARCH
パラメータを指定して、索引の精査中に考慮される特定の最大候補数を指定できます。その数値が大きいほど、精度が高くなります。
ノート:
- 近似検索問合せでターゲット精度を指定しない場合、索引の作成時に設定された精度が継承されます。索引の作成時に、作成する索引のタイプに応じて、パーセンテージ値またはパラメータ値を使用してターゲット精度を指定できることがわかります。
- 索引検索では、索引の作成時の設定と異なるターゲット精度を指定できます。HNSW索引の場合は、
EFSEARCH
パラメータ(索引の作成時に指定されたEFCONSTRUCTION
値より大きい)を使用してより多くの近傍を検索し、より正確な結果を取得できます。索引の作成時に指定するターゲット精度によって、索引作成のパラメータが決まり、ベクトル索引検索のデフォルトの精度値としても機能します。
親トピック: Oracle Databaseでの人工知能
Inverted File Flatベクトル索引の理解
Inverted File Flat索引は、近傍パーティションまたはクラスタを使用して検索領域を絞り込むことによって検索効率を向上させるように設計された手法です。
次の図は、2D空間表現を使用して実行された近似検索でパーティションまたはクラスタがどのように作成されるかを示しています。ただし、これははるかに高い次元空間に一般化することができます。
×印は、この空間のベクトル・データ・ポイントを表しています。
小さい普通の円として示されている新しいデータ・ポイントは、k
パーティションの重心を識別するために追加されています。ここで、重心の数(k
)は、データセットのサイズ(n
)によって決まります。通常、k
はn
の平方根に設定されます。ただし、索引の作成時にNEIGHBOR PARTITIONS
パラメータを指定することで調整できます。
各重心は、対応するパーティションの平均ベクトル(重心)を表します。
重心は、最も近い重心から各ベクトルへの合計距離を最小限にすることを目標とする、ベクトルのトレーニング・パスによって計算されます。
重心によって、ベクトル空間がk
パーティションに分割されます。この分割は概念的には、重心から円を拡大し、それらが接したときに拡大をやめ、個別のパーティションが形成されるということができます。
周辺部にあるものを除き、各ベクトルは重心に関連付けられた特定のパーティション内に収まります。
問合せベクトルvq
の場合、検索アルゴリズムでは最も近いi
の重心が識別されます。ここで、i
はデフォルトでk
の平方根に設定されますが、NEIGHBOR PARTITION PROBES
パラメータを設定することで特定の問合せに対して調整できます。この調整により、検索速度と精度のトレードオフが可能になります。
このパラメータの数値が大きいほど、精度が高くなります。この例では、i
は2に設定され、識別された2つのパーティションはパーティション番号1および3です。
i
個のパーティションが判別されると、それらが完全にスキャンされ、この例では最も近い上位5件のベクトルが識別されます。この数値5は、k
と異なる数値にすることでき、問合せでこの数値を指定します。次の図では、パーティション番号1および3にあるvq
に最も近い5つのベクトルが強調表示されています。
この方法では、検索がパーティションのサブセットに制限されているため、近似検索が構成されて処理が速くなりますが、検査されないパーティションのより近いベクトルが欠落する可能性があります。この例は、近似検索では正確にはvq
に最も近いベクトルが選択されない可能性があり、検索の効率と正確性の間に固有のトレードオフがあることを示しています。
ただし、vq
から正確に最も近い5つのベクトルは、近似検索で見つかったベクトルではありません。パーティション番号4のベクトルの1つが、パーティション番号3で取得されたベクトルの1つよりもvq
に近いことがわかります。
ベクトル索引検索を使用すると、必ずしも完全検索とはならず、近似検索と呼ばれる理由がこれでわかります。この例では、近似検索の精度は80%です。完全検索のベクトルの結果の5件のうち取得されたのは4件のみであるためです。
Oracle AI Vector Searchを使用して、ベクトル索引を使用して近似検索問合せを実行する場合は、近似検索を実行するターゲット精度を指定できます。
IVF近似検索の場合、ターゲット精度のパーセント値を指定して、検索の精査に使用されるパーティションの数に影響を与えることができます。これは、アルゴリズムによって自動的に計算されます。値が100の場合は、完全検索が実行される傾向がありますが、システムでは引き続き索引が使用され、完全検索は実行されません。オプティマイザでは、問合せの述語がある場合は索引を使用する方が高速になる可能性があるため、引き続き索引を使用することが選択されることがあります。ターゲット精度のパーセンテージ値を指定するかわりに、NEIGHBOR PARTITION PROBES
パラメータを指定して、検索によって精査されるパーティションの最大数を指定できます。その数値が大きいほど、精度が高くなります。
ノート:
- 近似検索問合せでターゲット精度を指定しない場合、索引の作成時に設定された精度が継承されます。索引の作成時に、作成する索引のタイプに応じて、パーセンテージ値またはパラメータ値を使用してターゲット精度を指定できることがわかります。
- 索引検索では、索引の作成時の設定と異なるターゲット精度を指定できます。IVF索引の場合、
NEIGHBOR PARTITION PROBES
パラメータを使用してより重心にあるパーティションを精査し、より正確な結果を取得できます。索引の作成時に指定するターゲット精度によって、索引作成のパラメータが決まり、ベクトル索引検索のデフォルトの精度値としても機能します。
親トピック: Oracle Databaseでの人工知能
ベクトル距離メトリック
ベクトル空間での距離の測定は、特定の問合せベクトルの最も関連性の高い結果を識別するときに核心となる部分です。このプロセスは、リレーショナル・データベースの世界でよく知られているキーワードのフィルタリングとは大きく異なります。
ベクトルを操作する場合、距離を計算して、2つのベクトルの類似度を判断する方法がいくつかあります。各距離メトリックは、異なる数式を使用して計算されます。2つのベクトル間の距離を計算するのにかかる時間は、ベクトル次元数やベクトル次元形式など、使用される距離メトリックやベクトル自体の形式など、多くの要因に依存します。一般的に、ベクトルを生成したベクトル埋込みモデルのトレーニングに使用した距離メトリックと一致させることが最善です。
親トピック: Oracle Databaseでの人工知能
Oracle Databaseでの人工知能
この項では、類似検索を実行する方法を説明します。
- 完全類似検索の実行
類似検索では、問合せベクトルと比較したベクトルの相対的な順序が検索されます。当然、比較は特定の距離メトリックを使用して行われますが、重要なのはそれらの間の距離ではなく、最上位の最も近いベクトルの結果セットです。 - ベクトル索引を使用した近似類似検索の理解
大きいベクトル空間で検索速度を高速化するには、ベクトル索引を使用した近似類似検索を使用できます。 - マルチベクトル類似検索の実行
ベクトル検索のもう1つの主なユースケースは、マルチベクトル検索です。通常、マルチベクトル検索は複数ドキュメント検索に関連付けられており、個別にベクトルに埋め込まれるチャンクにドキュメントが分割されます。
親トピック: Oracle Databaseでの人工知能
完全類似検索の実行
類似検索では、問合せベクトルと比較したベクトルの相対的な順序が検索されます。当然、比較は特定の距離メトリックを使用して行われますが、重要なのはそれらの間の距離ではなく、最上位の最も近いベクトルの結果セットです。
たとえば、特定の問合せベクトルを指定すると、データ・セット内の他のすべてのベクトルまでの距離を計算できます。このタイプの検索は、フラット検索(完全検索)とも呼ばれ、完全な検索品質で最も正確な結果が生成されます。ただし、この検索には時間がかかるというデメリットがあります。次の図にこれを示します。
完全検索では、各ベクトルまでの距離を計算して、問合せベクトル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言語リファレンス』を参照してください
親トピック: Oracle Databaseでの人工知能
ベクトル索引を使用した近似類似検索の理解
大きいベクトル空間で検索速度を高速化するには、ベクトル索引を使用して近似類似検索を使用できます。
類似検索にベクトル索引を使用することは、近似検索と呼ばれます。近似検索ではベクトル索引が使用され、パフォーマンスのために精度がトレードオフされます。
大きいベクトル空間での近似検索
検索品質が最優先で検索速度があまり重要でない場合は、完全類似検索が適切なオプションです。検索速度は、小さいベクトル空間や、高パフォーマンスのサーバーで検索を実行する場合には関係ありません。ただし、MLアルゴリズムでは、多くの場合、何十億もの埋込みを持つベクトル空間で類似検索が実行されます。たとえば、Deep1Bデータセットには、畳み込みニューラル・ネットワーク(CNN)によって生成された1Bイメージが含まれています。コーパス内のすべてのベクトルを使用してベクトル距離を計算し、Top-K一致を100%の精度で検出すると非常に遅くなります。
幸いなことに、ベクトル索引を使用して実行できる近似検索には多くのタイプがあります。ベクトル索引の精度は低くなりますが、消費するリソースは少なくなり、より効率的になる場合があります。従来のデータベース索引とは異なり、ベクトル索引は、ヒューリスティック・ベースのアルゴリズムを使用して作成および検索を実行します。
100%の精度はヒューリスティックでは保証できないため、ベクトル索引検索ではターゲット精度が使用されます。内部的には、索引作成と索引検索の両方に使用されるアルゴリズムで、可能なかぎり正確になるように最善が尽くされます。ただし、ターゲット精度を指定することによって、これらのアルゴリズムに影響を与えることができます。索引の作成時または検索時に、使用する索引タイプに応じて、パーセント値を指定するか、内部パラメータ値を指定することによって、デフォルト以外のターゲット精度値を指定できます。
ターゲット精度の例
ターゲットの精度が何を意味するのかをより詳しく理解するには、次の図を参照してください。最初の図は、各ベクトルが小さいばつ印で表されるベクトル空間を示しています。赤色のベクトルは問合せベクトルを表しています。
そのコンテキストで上位5件の完全類似検索を実行すると、2番目の図に示す5つのベクトルが返されます。
ベクトル索引の作成方法に応じて、そのコンテキストで上位5位の近似類似検索を実行すると、3番目の図に示す5つのベクトルが返される可能性があります。これは、索引作成プロセスでヒューリスティックが使用されているためです。したがって、ベクトル索引を検索すると、完全検索と比較して異なる結果になる可能性があります。
ご覧のように、取得されたベクトルが異なっており、この場合は1つのベクトルが異なります。つまり、完全検索と比較して、類似検索では5件のベクトルのうち4件が正しく取得されたということです。類似検索の精度は、完全類似検索と比較して80%です。4番目の図にこれを示します。
ベクトル索引が近似検索構造であるという性質のため、上位Kの類似検索で返される行がK行未満になる可能性があります。
ベクトル索引の設定方法の詳細は、ベクトル索引の作成を参照してください。
親トピック: Oracle Databaseでの人工知能
マルチベクトル類似検索の実行
ベクトル検索のもう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つの条件が満たされた場合に生成されます。bookId
は、そのソート順で最初の2つの別個のbookId
の1つである。- その
paragraphId
は、同じbookId
内のそのソート順で最初の3つの別個のparagraphId
の1つである。 - そのレコードは、同じ
bookId
とparagraphId
の組合せ内の最初の4つのレコードの1つである。
- それ以外の場合、このレコードは除外される。
マルチベクトル類似検索は、ドキュメントだけでなく、次の質問に回答するためにも使用できます。
- 最も近い上位K枚の写真を返すが、異なる人の写真であるようにする。
- この音声スニペットに最も一致する音声セグメントが2つ以上ある上位K曲を見つける。
ノート:
- このパーティションの行制限句拡張は、SQL言語の全般的な拡張です。ベクトル検索にのみ適用されるわけではありません。
- パーティション化の行制限句を使用したマルチベクトル検索では、ベクトル索引は使用されません。
関連項目:
ROW_LIMITING_CLAUSE
の完全な構文は、『Oracle Database SQL言語リファレンス』を参照してください
親トピック: Oracle Databaseでの人工知能