ベクトル探索の簡単な紹介

この記事は、セマンティック検索とも呼ばれるベクトル検索の複雑さと、それが Elasticsearch でどのように実装されるかを詳しく説明する 3 部構成の記事の第 1 部です。

ベクトル検索から強力なREST APIまで、Elasticsearchは開発者に最も広範な検索ツールキットを提供します。GitHubのサンプルノートブックにアクセスして新しいことを試してみましょう。また、無料トライアルを始めるか、ローカルでElasticsearchを実行することもできます。

この記事は、セマンティック検索とも呼ばれるベクトル検索の複雑さと、それが Elasticsearch でどのように実装されるかを詳しく説明する 3 部構成の記事の第 1 部です。

この最初の部分では、埋め込みベクトルの基本とベクトル検索が内部でどのように機能するかについて、一般的な紹介を提供することに重点を置いています。

最初の記事で学んだ知識をすべて活用して、第2 部では Elasticsearch でベクトル検索を設定する方法を詳しく説明します。

パート 3では、パート 1 と 2 で学んだ内容を活用し、その知識を基にして、Elasticsearch で強力なハイブリッド検索クエリを作成する方法を詳しく検討します。

この記事の本題に入る前に、時間をさかのぼって、セマンティック検索の重要な概念であるベクトルの歴史を少し振り返ってみましょう。

ベクトルは新しいものではない

2022年11月にChatGPTが登場して以来、「ベクトル検索」について聞いたり読んだりしない日はないということは、誰もが同意するでしょう。これはどこにでも存在し、広く普及しているため、つい最近登場した最先端技術であるという印象を受けることがよくありますが、実際にはこの技術は 60 年以上前から存在しているのです。このテーマに関する研究は 1960 年代半ばに始まり、最初の研究論文は 1978 年に情報検索の専門家である Gerard Salton 氏とコーネル大学の同僚によって発表されました。Salton の密ベクトル モデルと疎ベクトル モデルに関する研究は、現代のベクトル検索テクノロジの根幹を成しています。

過去 20 年間で、彼の研究に基づいたさまざまなベクトル DBMS が作成され、市場に投入されました。これらには、2019 年にベクター検索の取り組みを開始した Apache Lucene プロジェクトを搭載した Elasticsearch が含まれます。

ベクトルは現在どこにでも存在し、広く普及しているため、ベクトルを扱う前に、まずその基礎となる理論と内部の仕組みをしっかり理解することが重要です。その詳細に入る前に、語彙検索とベクトル検索の違いを簡単に確認して、それらの違いと相互補完性について理解を深めましょう。

ベクトル検索を紹介する簡単な方法は、おそらく慣れている従来の語彙検索と比較することです。ベクトル検索 (セマンティック検索とも呼ばれます) と語彙検索の動作は大きく異なります。字句検索は、Elasticsearch で長年使用されてきた種類の検索です。簡単にまとめると、インデックスされてクエリされた内容の本当の意味を理解しようとするのではなく、ユーザーがクエリに入力した単語のリテラルまたはその変形(語幹、同義語など)を、TF-IDFなどの類似性アルゴリズムを使用して以前にデータベースにインデックスされたすべてのリテラルと語彙的に一致させることに多大な努力を払います。

ご覧のとおり、左上の 3 つのドキュメントはトークン化され、分析されています。次に、結果の用語は転置インデックスにインデックス付けされ、分析された用語がそれらを含むドキュメント ID に単純にマッピングされます。すべての用語は 1 回だけ存在し、どのドキュメントでも共有されないことに注意してください。「nice german teacher」を検索すると、いずれもクエリの真の意味を捉えていないにもかかわらず、さまざまなスコアで 3 つのドキュメントすべてが一致します。

下の図 2 に見られるように、多義語や同音異義語、つまり綴りは同じだが意味が異なる単語 (right、palm、bat、mean など) を扱う場合はさらに複雑になります。3 つの異なる意味を持つ「right」という単語を取り上げ、何が起こるかを見てみましょう。

「I'm not right」を検索すると、最初に返された結果とはまったく逆の意味を持つ文書が返されます。まったく同じ用語を検索しても、順序を変えて意味を変えた場合(たとえば、 「右折する」「右折する」)、まったく同じ結果(つまり、3 番目のドキュメント「右折する」)が返されます。確かに、クエリは過度に単純化されており、フレーズ マッチングなどのより高度なクエリは使用されていませんが、これは、語彙検索ではインデックスされている内容と検索されている内容の背後にある真の意味を理解していないことを示しています。それが明確でなくても心配しないでください。3 番目の記事でこの例を再度取り上げ、この場合にベクトル検索がどのように役立つかを確認します。

語彙検索を正当に評価するには、構造化データのインデックス作成方法 (マッピング、テキスト分析、取り込みパイプラインなど) とクエリの作成方法 (巧みに作成された DSL クエリ、クエリ用語分析など) を制御できる場合、語彙検索エンジンで驚くべき成果を上げることができ、それに疑問の余地はありません。Elasticsearch の語彙検索機能に関する実績は実に素晴らしいものです。過去数年間にそれが達成したこと、そして語彙検索の分野をどれだけ普及させ、改善したかは、実に注目すべきことです。

ただし、自由形式のテキストで質問する必要があるユーザーに対して、非構造化データ(画像、ビデオ、音声、生のテキストなど) のクエリをサポートするタスクを課せられる場合、語彙検索では不十分です。さらに、クエリがテキストではなく、画像である場合もあります。これについては後ほど説明します。このような状況で語彙検索が不十分な主な理由は、非構造化データは構造化データと同じようにインデックス付けもクエリもできないことです。非構造化データを扱う場合には、セマンティクスが重要になります。セマンティクスとはどういう意味ですか?とても簡単に言えば、意味です!

画像検索エンジン(Google Image Search や Lens など)の簡単な例を見てみましょう。画像をドラッグ アンド ドロップすると、Google セマンティック検索エンジンが検索した画像に最も類似した画像を見つけて返します。下の図 3 では、左側にジャーマン シェパードの写真が表示され、右側には取得されたすべての類似写真が表示されています。最初の結果は、提供された写真と同じ写真 (つまり、最も類似した写真) です。

これは人間にとっては単純かつ論理的に聞こえますが、コンピューターにとっては全く別の話です。これを可能にするのがベクトル検索です。世界が最近目撃したように、ベクトル検索によって解き放たれる力は莫大です。ではボンネットを開けて、下に何が隠れているか見てみましょう。

埋め込みベクトル

前に説明したように、語彙検索エンジンを使用すると、テキストなどの構造化データは、用語の実際の意味に関係なく、検索時に一致できる用語に簡単にトークン化できます。ただし、非構造化データは、大きなバイナリ オブジェクト (画像、ビデオ、オーディオなど) などのさまざまな形式をとることができるため、同じトークン化プロセスにはまったく適していません。さらに、セマンティック検索の目的は、データが表す意味に基づいて検索できるようにデータをインデックス化することです。どうすればそれを達成できるでしょうか?答えは2つの言葉です:機械学習です!もっと正確に言えば、ディープラーニングです!

ディープラーニングは、データの真の意味を段階的に抽出できる複数の処理層で構成された人工ニューラル ネットワークに基づくモデルに依存する機械学習の特定の領域です。これらのニューラル ネットワーク モデルの動作方法は、人間の脳に大きく影響を受けています。下の図 4 は、入力層と出力層、および複数の隠し層を持つニューラル ネットワークの概要を示しています。

ニューラル ネットワークの真の偉業は、単一の非構造化データを、埋め込みベクトルまたは単に埋め込みと呼ばれる浮動小数点値のシーケンスに変換できることです。人間は、ベクトルを 2 次元または 3 次元の空間で視覚化すると、ベクトルが何であるかをかなりよく理解できます。ベクトルの各成分は、2D xy 平面または 3D xyz 空間内の座標を表します。

ただし、ニューラル ネットワーク モデルが動作する埋め込みベクトルは、数百または数千の次元を持つ場合があり、単純に多次元空間内の点を表します。各ベクトル次元は、非構造化データの機能または特性を表します。これを、画像を 2048 次元の埋め込みベクトルに変換するディープラーニング モデルで説明しましょう。このモデルは、図 3 で使用したジャーマン シェパードの写真を、下の表に示す埋め込みベクトルに変換します。最初と最後の 3 つの要素のみが表示されていますが、テーブルにはさらに 2,042 の列/ディメンションがあることに注意してください。

赤い犬です青空グラスなしジャーマンシェパード
ジャーマンシェパード 埋め込み0.01210.95720.87350.11980.97120.0512

各列はモデルの次元であり、基礎となるニューラル ネットワークがモデル化しようとする機能または特性を表します。モデルに与えられた各入力は、その入力が 2048 次元のそれぞれにどの程度類似しているかに応じて特徴付けられます。したがって、埋め込みベクトルの各要素の値は、その入力と特定の次元の類似性を示します。この例では、モデルが犬とジャーマンシェパードの間に高い類似性があること、また青空が存在することを検出したことがわかります。

語彙検索では用語が一致するか一致しないかのどちらかになりますが、ベクトル検索では、非構造化データがモデルでサポートされている各次元とどの程度類似しているかをより正確に把握できます。そのため、埋め込みベクトルは、非構造化データの優れたセマンティック表現として機能します。

秘密のソース

非構造化データがディープラーニング ニューラル ネットワークによって、多数の次元に沿ったデータの類似性を捉える埋め込みベクトルに細分化される仕組みがわかったので、それらのベクトルのマッチングがどのように機能するかを理解する必要があります。答えは非常に簡単であることがわかりました。互いに近い埋め込みベクトルは、意味的に類似したデータ部分を表します。したがって、ベクトル データベースをクエリする場合、検索入力 (画像、テキストなど) は、まず、すべての非構造化データのインデックス作成に使用されたのと同じモデルを使用して埋め込みベクトルに変換され、最終的な目標はそのクエリ ベクトルに最も近い隣接ベクトルを見つけることです。したがって、必要なのは、クエリ ベクトルとデータベースにインデックスが付けられた既存のすべてのベクトルとの間の「距離」または「類似性」を測定する方法を見つけることだけです。

距離と類似性

幸いなことに、2 つのベクトル間の距離を測定することは、ベクトル演算のおかげで簡単に解決できる問題です。それでは、Elasticsearch などの最新のベクトル検索データベースでサポートされている、最も人気のある距離と類似度の関数を見てみましょう。警告、これから数学の話になります!

L1距離

2 つのベクトル x と y の L1 距離 (マンハッタン距離とも呼ばれる) は、それらのすべての要素のペアワイズ絶対差を合計することによって測定されます。明らかに、距離 d が小さいほど、2 つのベクトルは近くなります。式は以下のように非常にシンプルです。

視覚的に、L1 距離は以下の図 5 のように表すことができます。

2 つのベクトル x と y、たとえば x = (1, 2) と y = (4, 3) を取ると、両方のベクトルの L1 距離は | 1 - 4 | + | 2 - 3 | = 4 になります。

L2距離

2 つのベクトル x と y の L2 距離 (ユークリッド距離とも呼ばれます) は、まずそのすべての要素のペアワイズ差の 2 乗を合計し、その結果の平方根を取ることによって測定されます。基本的には 2 点間の最短経路 (斜辺とも呼ばれます) です。L1と同様に、距離dが小さいほど、2つのベクトルは近くなります。

L2距離は以下の図6に示されています。

L1距離に使用したのと同じ2つのサンプルベクトルxとyを再利用すると、L2距離は(14)2+(23)2=10(1 - 4)^2 + (2 - 3)^2 = 10として計算できます。10 の平方根を取ると 3.16 になります。

ライン距離

2 つのベクトル x と y の Linf (L 無限大) 距離は、チェビシェフ距離またはチェス盤距離とも呼ばれ、任意の 2 つの要素間の最長距離、または軸/次元の 1 つに沿って測定された最長距離として定義されます。式は非常にシンプルで、次のようになります。

Linf 距離の表現を以下の図 7 に示します。

ここでも、同じ 2 つのサンプル ベクトル x と y を取ると、L 無限大距離を max ( | 1 - 4 | 、 | 2 - 3 | ) = max (3, 1) = 3 として計算できます。

コサイン類似度

L1、L2、Linf とは対照的に、コサイン類似度は 2 つのベクトル x と y 間の距離を測定するのではなく、それらの相対的な角度、つまり両方がほぼ同じ方向を向いているかどうかを測定します。類似度が高いほど、2 つのベクトルは「近い」ことになります。式も非常にシンプルで、次のようになります。

2 つのベクトル間のコサイン類似度を表す方法を以下の図 8 に示します。

さらに、コサイン値は常に [-1, 1] の範囲内にあるため、図 9 に示すように、-1 は反対の類似性 (つまり、両方のベクトル間の角度が 180°)、0 は無関係の類似性 (つまり、角度が 90°)、1 は同一 (つまり、角度が 0°) を意味します。


もう一度、同じサンプルベクトル x と y を再利用し、上記の式を使用してコサイン類似度を計算してみましょう。まず、両方のベクトルのドット積を(14)+(23)=10(1·4)+(2·3)=10として計算します。次に、両方のベクトルの長さ(大きさとも呼ばれます)を掛けます: (12+22)1/2+(42+32)1/2=11.18034(1^2 + 2^2)^ {1/2} + (4^2 + 3^2)^ {1/2} = 11.18034。最後に、ドット積を乗算した長さ 10 / 11.18034 = 0.894427 (つまり、角度 26°) で割ります。これは 1 に非常に近いため、両方のベクトルは非常に似ていると見なすことができます。

ドット積類似度

コサイン類似度の欠点の 1 つは、2 つのベクトル間の角度のみが考慮され、大きさ (長さ) は考慮されないことです。つまり、2 つのベクトルがほぼ同じ方向を指していても、一方が他方よりもはるかに長い場合、両方とも類似していると見なされます。ドット積類似度 (スカラーまたは内積とも呼ばれる) は、ベクトルの角度と大きさの両方を考慮することで類似度を改善し、より正確な類似度メトリックを提供します。

ドット積類似度を計算するために、2 つの同等の式が使用されます。1 つ目は、先ほどコサイン類似度の分子で見たものと同じです。

2 番目の式は、両方のベクトルの長さにそれらの間の角度の余弦を掛けるだけです。

ドット積の類似性は、以下の図 10 に視覚化されています。

最後にもう一度、サンプルの x ベクトルと y ベクトルを取り、最初の式を使用して、(1 · 4) + (2 · 3) = 10 として、先ほどコサイン類似度を計算したのと同じように、ドット積類似度を計算します。

2 番目の式を使用して、両方のベクトルの長さを掛けます: (12+22)1/2+(42+32)1/2=11.18034(1^2 + 2^2)^ {1/2} + (4^2 + 3^2)^ {1/2} = 11.18034これに両方のベクトル間の角度 26° のコサインを掛けると、11.18034 · cos(26°) = 10 になります。

注目すべき点は、すべてのベクトルが最初に正規化されている場合(つまり、長さが 1 の場合)、ドット積類似度はコサイン類似度(|x| |y| = 1 であるため)、つまり両方のベクトル間の角度のコサインとまったく同じになることです。後で説明するように、ベクトルを正規化することは、ベクトルの大きさを無関係にして類似性が角度のみに焦点を当てるようにするために採用する良い方法です。また、インデックス作成時およびクエリ時の距離計算も高速化されますが、これは数十億のベクトルを操作するときに大きな問題になる可能性があります。

簡単な要約

さて、これまで非常に多くの情報を見てきましたが、ここで少し立ち止まって、これまでの状況を簡単に振り返ってみましょう。私たちは次のことを学びました…

  • …セマンティック検索は、非構造化データを多次元埋め込みベクトルに変換することに優れたディープラーニング ニューラル ネットワーク モデルに基づいています。
  • …モデルの各次元は、非構造化データの機能または特性を表します。
  • …埋め込みベクトルは、特定の非構造化データが各次元にどの程度類似しているかを表す類似度値のシーケンス(各次元に 1 つずつ)です。
  • … 2 つのベクトルが「近い」ほど(つまり、最も近い隣り合うベクトルほど)、意味的に類似した概念を表していることになります。
  • …距離関数 (L1、L2、Linf) を使用すると、2 つのベクトルがどれだけ近いかを測定できます。
  • …相似関数 (コサインとドット積) を使用すると、2 つのベクトルが同じ方向にどれだけ進んでいるかを測定できます。

さて、最後に掘り下げる必要があるのは、ベクター検索エンジンそのものです。クエリが送られてくると、まずクエリがベクトル化され、次にベクトル検索エンジンがそのクエリ ベクトルに最も近い隣接ベクトルを見つけます。クエリ ベクトルとデータベース内のすべてのベクトル間の距離または類似性を測定するブルート フォース方式は、データ セットが小さい場合には有効ですが、ベクトルの数が増えるとすぐに不十分になります。言い換えれば、数百万、数十億、あるいは数兆ものベクトルをインデックス化し、クエリベクトルの最近傍を妥当な時間内に見つけるにはどうすればよいでしょうか。そこで私たちは賢くなって、ベクトルをインデックスする最適な方法を見つけ出し、精度をあまり落とさずにできるだけ早く最近傍に焦点を絞る必要があります。

ベクトル探索アルゴリズムと技術

長年にわたり、さまざまな研究チームが、非常に巧妙なベクトル検索アルゴリズムの開発に多大な労力を費やしてきました。ここでは、主なものを簡単に紹介します。使用ケースに応じて、他のものよりも適しているものがあります。

先ほど、クエリ ベクトルをデータベース内に存在するすべてのベクトルと比較するブルート フォース手法について説明した際に、線形検索、つまりフラット インデックスについて簡単に触れました。小さなデータセットではうまく機能する可能性がありますが、ベクトルと次元の数が増えるとパフォーマンスが急激に低下します (O(n) の複雑度)。

幸いなことに、近似最近傍法(ANN) と呼ばれるより効率的なアプローチがあります。この方法では、埋め込みベクトル間の距離が事前に計算され、類似のベクトルが、たとえばクラスター、ツリー、ハッシュ、グラフなどを使用して、互いに近くなるように保存および整理されます。このようなアプローチは、通常 100% の精度を保証しないため、「近似」と呼ばれます。最終的な目標は、類似のベクトルが含まれる可能性が最も高い領域のみに焦点を当てるために、検索範囲をできるだけ早くできるだけ小さくするか、ベクトルの次元を減らすことです。

K次元ツリー

K 次元ツリー (KD ツリー) は、k 次元空間にポイントを格納するバイナリ検索ツリーの一般化であり、検索空間をベクトルがインデックス付けされた小さな左ツリーと右ツリーに連続的に二分することによって機能します。検索時には、アルゴリズムは、クエリ ベクトル (図 11 の赤い点) の周囲のいくつかのツリー ブランチを訪問するだけで、最も近い近傍 (図 11 の緑の点) を見つけることができます。k 個を超える近傍が要求された場合、アルゴリズムがさらに多くの近傍を見つけるまで黄色の領域が拡張されます。

KD ツリー アルゴリズムの最大の利点は、一部のローカライズされたツリー ブランチのみに素早く焦点を当てることができるため、ほとんどのベクトルを考慮から除外できることです。ただし、次元数が増えると、低次元空間よりも多くの分岐を訪問する必要があるため、このアルゴリズムの効率は低下します。

逆ファイルインデックス

逆ファイルインデックス (IVF) アプローチも、互いに近いベクトルを共有の重心に割り当てる空間分割アルゴリズムです。2D 空間では、図 12 に示すように、ボロノイ図でこれを視覚化するのが最適です。

上記の 2D 空間は 20 個のクラスターに分割されており、それぞれのクラスターの重心は黒い点で示されています。空間内のすべての埋め込みベクトルは、それらの重心が最も近いクラスターに割り当てられます。検索時に、アルゴリズムはまず、クエリ ベクトルに最も近い重心を見つけることで、焦点を当てるクラスターを判断し、次に、その領域と、必要に応じて周囲の領域に焦点を絞って、最も近い近傍を見つけます。

このアルゴリズムは、高次元空間で使用する場合、KD ツリーと同じ問題が発生します。これは次元の呪いと呼ばれ、空間の体積が非常に大きくなり、すべてのデータがまばらに見え、より正確な結果を得るために必要なデータの量が指数関数的に増加する場合に発生します。データがまばらな場合、これらの空間分割アルゴリズムでデータをクラスターに整理することが難しくなります。幸いなことに、この問題を軽減する他のアルゴリズムとテクニックが存在します。以下に詳細を説明します。

量子化

量子化は圧縮ベースのアプローチであり、埋め込みベクトルの精度を下げることでデータベースの合計サイズを削減できます。これは、浮動小数点ベクトル値を整数値に変換することにより、スカラー量子化 (SQ)を使用して実現できます。これにより、データベースのサイズが 8 分の 1 に縮小されるだけでなく、メモリ消費も減少し、検索時のベクトル間の距離計算が高速化されます。

もう 1 つの手法は積量子化 (PQ) と呼ばれ、最初に空間を低次元のサブスペースに分割し、次にクラスタリング アルゴリズム (k 平均法に類似) を使用して各サブスペース内で互いに近いベクトルをグループ化します。

量子化は次元削減とは異なることに注意してください。次元削減では次元数が削減され、ベクトルが単に短くなります。

階層的にナビゲート可能なスモールワールド(HNSW)

名前だけ読むと複雑に思えても心配しないでください。実際はそうではありません。つまり、Hierarchical Navigable Small Worlds は、非常に人気があり効率的な多層グラフベースのアルゴリズムです。Apache Lucene を含むさまざまなベクター データベースで使用されます。HNSW の概念的表現を以下の図 13 に示します。

最上層には、ベクトル間のリンクが最も長い少数のベクトルのグラフ、つまり、類似性が最も低い接続されたベクトルのグラフが表示されます。下の層に進んでいくと、見つかるベクトルの数が増え、グラフの密度が増し、ベクトル同士がどんどん接近していきます。最下層では、すべてのベクトルを見つけることができ、最も類似したベクトルが互いに最も近く配置されます。

検索時に、アルゴリズムは任意のエントリ ポイントの最上位レイヤーから開始し、クエリ ベクトル (灰色の点で表示) に最も近いベクトルを見つけます。次に、1 つ下のレイヤーに移動して、上のレイヤーに残したのと同じベクトルから始めて、同じプロセスを繰り返します。これを 1 レイヤーずつ続けて、最下層に到達してクエリ ベクトルに最も近い近傍を見つけます。

局所性依存ハッシュ(LSH)

これまでに紹介した他のすべてのアプローチと同様に、局所性に敏感なハッシュは、検索速度を向上させるために検索スペースを大幅に削減することを目指しています。この技術では、類似性情報を保持したまま埋め込みベクトルがハッシュ値に変換されるため、検索空間は最終的に、トラバースする必要のあるグラフやツリーではなく、検索できる単純なハッシュ テーブルになります。ハッシュベースの方法の主な利点は、任意の(大きな)数の次元を含むベクトルを固定サイズのハッシュにマッピングできるため、精度をあまり犠牲にすることなく検索時間が大幅に短縮されることです。

一般的にデータのハッシュ方法、特にベクトルの埋め込み方法は多種多様ですが、この記事ではそれぞれの詳細については説明しません。従来のハッシュ方法では、通常、非常に類似しているように見えるデータに対して非常に異なるハッシュが生成されます。埋め込みベクトルは浮動小数点値で構成されているため、ベクトル演算で互いに非常に近いと考えられる 2 つのサンプル浮動小数点値 (たとえば、0.73 と 0.74) を取り、いくつかの一般的なハッシュ関数を実行してみましょう。以下の結果を見ると、一般的なハッシュ関数では入力間の類似性を保持していないことは明らかです。

ハッシュ関数0.730.74
MD51342129d04cd2924dd06cead4cf0a3ca0aec1b15371bd979cfa66b0a50ebecc5
SHA149d2c3e0e44bff838e1db571a121be5ea874e8d9a534e76482ade9d9fe4bff3035a7f31f2f363d77
SHA25699d03fc3771fe6848d675339fc49eeb1cb8d99a12e6358173336b99a2ec530ea5ecbc825ba5c16856edfdaf0abc5c6c41d0d8a9c508e34188239521dc7645663

従来のハッシュ方式では、類似したデータ間のハッシュ衝突を最小限に抑えようとしますが、局所性に敏感なハッシュの主な目的は、まさにその逆、つまり、類似したデータが高い確率で同じバケット内に含まれるようにハッシュ衝突を最大化することです。そうすることで、多次元空間内で互いに近接する埋め込みベクトルは、同じバケットに含まれる固定サイズの値にハッシュされます。LSH ではハッシュされたベクトルの近接性を維持できるため、この手法はデータのクラスタリングや最近傍検索に非常に便利です。

すべての面倒な作業は、ハッシュを計算する必要があるインデックス作成時に発生しますが、検索時には、最も近い埋め込みベクトルを含むバケットを検索するためにクエリ ベクトルをハッシュするだけで済みます。候補バケットが見つかると、通常は 2 回目のラウンドが実行され、クエリ ベクトルに最も近い隣接ベクトルが識別されます。

まとめましょう

ベクトル検索を紹介するために、この記事ではかなり広範囲にわたる内容を扱う必要がありました。語彙検索とベクトル検索の違いを比較した後、ディープラーニング ニューラル ネットワーク モデルが非構造化データのセマンティクスを捕捉し、その意味を高次元埋め込みベクトル (モデルの各次元に沿ったデータの類似性を表す浮動小数点数のシーケンス) に変換する方法を学びました。また、ベクトル検索と語彙検索は競合するものではなく、補完的な情報検索手法であることも注目に値します (このシリーズの第 3 部でハイブリッド検索について詳しく説明するときに説明します)。

その後、ベクトル検索の基本的な構成要素である距離 (および類似度) 関数を導入しました。これにより、2 つのベクトルの近接性を測定し、それらが表す概念の類似性を評価できるようになります。

最後に、ツリー、グラフ、クラスター、ハッシュをベースにした、最も人気のあるさまざまなベクトル検索アルゴリズムとテクニックを確認しました。その目的は、線形ブルート フォース検索のように空間全体を調べなくても、多次元空間の特定の領域をすばやく絞り込み、最も近い近傍を見つけることです。

この記事が気に入ったら、ぜひこのシリーズの他の部分も読んでみてください。

よくあるご質問

ベクトル検索と語彙検索の違いは何ですか?

語彙検索では、インデックスされてクエリされた内容の実際の意味を理解しようとはせず、単語のリテラルまたはその変形を照合します。対照的に、ベクトル検索では、データが表す意味に基づいて検索できるようにデータがインデックス付けされます。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう