ベクトル検索エンジン: 大規模な言語モデルの検索と強化された生成のための強力なツール

ベクトル検索エンジン: 大規模な言語モデルの検索と強化された生成のための強力なツール

翻訳者|朱 仙中

レビュー | Chonglou

導入

大規模言語モデル (LLM) が世界を席巻するにつれ、ベクター検索エンジンもそれに追随しました。同時に、ベクトルデータベースは、大規模言語モデルの長期記憶システムの基盤形成します。

効率的なアルゴリズムを使用して関連情報を検索しそれをコンテキストとして言語モデルに渡すことで、ベクトル検索エンジンはトレーニングのカットオフを超えて最新の情報を提供し、微調整なしでモデル出力の品質を向上させることができます。このプロセスは検索拡張生成 (RAG )と呼ばれることが多く近似最近( ANN )検索というかつては難解なアルゴリズムの課題を機械学習の分野注目の的にしました

さまざまな論争ある中でベクトル検索エンジンは大規模言語モデルと密接に関連していることは一般的に認められています。関連する話は他にもたくさんあります。 LLM の検索強化生成の改善をはるかに超える、ベクトル検索テクノロジに基づく強力なアプリケーションがすでに多数存在します

この記事では、データの理解、データの探索、モデルの解釈可能性など、ベクトル検索エンジンの私のお気に入りの使用例を 10 個紹介します

ここで取り上げるアプリケーションは、おおよそ複雑さの順次のとおりです

  • 画像類似検索
  • 逆画像検索
  • オブジェクトの類似性検索
  • 強力なOCRドキュメント検索
  • セマンティック検索
  • モデル間の検索
  • 知覚的類似性の探究
  • 比較モデル表現
  • 概念の補間
  • 概念空間の横断

1. 画像類似性検索

Oxford IIIT ペットデータセットの画像の類似性検索(ライセンスあり) (画像提供:著者)

おそらく最も単純なアプリケーションは、画像の類似性検索ですこのアプリケーションではまず画像で構成されるデータセットを準備します。データセットは、単純な個人の写真アルバムから、何千台もの分散カメラで長年にわたって撮影された数十億枚の画像からなる非常に複雑で大規模なリポジトリまで何でもかまいません。

セットアップ簡単ですまず、データセット内の画像の埋め込みを計算しこれらの埋め込みベクトルから対応するベクトルインデックスを生成します。最初のバッチ計算の後は、それ以上の推論必要ありません。このデータセットの構造を調べる良い方法は、データセットから画像を選択し、その k 近傍(最も類似した画像)のベクトル インデックスを照会することですこのアプローチにより、クエリ画像の周囲の画像空間がどの程度の密度で埋められているか直感的に把握できます。

画像類似性検索詳細と実際のコードについてはリンク https://docs.voxel51.com/user_guide/brain.html#image-similarityを参照してください

2. 逆画像検索

UnsplashのオックスフォードIIITペットデータセットに基づく(Mladen ウェブサイトŠćekić画像の逆画像検索写真提供:著者

同様に、画像類似性検索の自然な拡張は、データセット内で外部画像に最も類似する画像​​を見つけることです。これは、ローカル ファイル システムからの画像でも、インターネットからの画像でもかまいません。

逆画像検索を実行するには、画像類似性検索の例で行ったようにまずデータセットのベクトルインデックスを作成します 2 つの違いは実行時フェーズにあります。実行時フェーズでは、クエリ画像の埋め込みを計算し、そのベクトルを使用してベクトル データベースを照会します。

リバース画像検索詳細と動作コードについてはこのリンクを参照してください: https://github.com/jacobmarks/reverse-image-search-plugin

3. オブジェクトの類似性検索

COCO-2017 データセット検証セグメントにおける羊オブジェクト類似性検索(許可を得て掲載) (画像提供:著者)

画像の内容をさらに詳しく調べたい場合は、オブジェクトまたは「タイル」の類似性検索を調べるとよいでしょう。一として、人物の再識別が挙げられます。関心のある人物の画像があり、データセット内でその人物のすべてのインスタンスを見つけたい場合です。

人物は各画像のごく一部しか占めていない可能性があるため、人物が含まれる画像全体の埋め込みは、それらの画像内の他のコンテンツに大きく依存する可能性がありますたとえば、1 つの画像に複数の人物が含まれる場合があります。

より良い解決策は、各オブジェクト検出パッチを個別のエンティティとして扱い、各オブジェクトの埋め込みを計算することです。次に、これらのパッチを使用してベクトル インデックスを作成し再識別する人物のパッチに対して類似性検索を実行しますこれを学習するための出発点としてまずResNet モデルの使い方を学ぶ必要があるかもしれません。

ここでは 2 つの微妙な点があります。

  • ベクターインデックスでは、各パッチをデータセット内の対応する画像にマッピングするためにメタデータを保存する必要があります。
  • インデックスをインスタンス化する前に、オブジェクト検出モデルを実行してこれらの検出タイルを生成する必要がありますまた、特定のクラスのオブジェクト (人など) に対してのみタイル埋め込みを計算し、他のクラスのオブジェクト (椅子、テーブルなど) に対しては計算しないこともできます。オブジェクトの類似性検索に関する詳細情報と実際のコードについては、次のリンクを参照してください: https://docs.voxel51.com/user_guide/brain.html#object-similarity

4. 強力なOCR文書検索

私の博士論文Tesseract OCR エンジンによって生成されたテキスト ブロックのあいまい/意味的検索埋め込み計算にはGTEベースモデルを使用(画像提供:著者)

光学文字認識 (OCR) は、手書きのメモ、古い雑誌記事、医療記録、クローゼットに隠されたラブレターなどの文書をデジタル化できるテクノロジーです。 TesseractPaddleOCRなどのOCR エンジンは、画像内の個々の文字や記号を認識し、段落のような連続したテキストの「チャンク」を作成することで機能します。

このようなテキストができたらhttps://github.com/jacobmarks/keyword-search-plugin で入手可能なプラグインのソース コード実装されているように、予測されたテキスト ブロックに対して従来の自然言語キーワード検索を実行できます。ただし、この検索方法では、単一文字のエラーが発生しやすくなります。 OCR エンジンが誤って「l」を「1」と認識した場合、「control」のキーワード検索は失敗します。

この課題を克服するにはベクトル検索を使用できます。 Hugging Face のSentence Transformer ライブラリGTEベースモデルなどのテキスト埋め込みモデルを使用してテキスト チャンクを埋め込みベクトルインデックスを作成します。次に、検索テキストを埋め込み、インデックスを照会することで、デジタル化されたドキュメント内であいまい検索やセマンティック検索を実行できます。マクロの観点から見ると、これらのドキュメント内のテキスト チャンクは、オブジェクト類似性検索におけるオブジェクト検出パッチに似ています。

強力な OCR ドキュメント検索アプリケーションの詳細と動作コードについては https://github.com/jacobmarks/semantic-document-search-pluginを参照してください

5. セマンティック検索

COCO 2017 検証分割における自然言語を使用したセマンティック画像検索(画像提供:著者)

マルチモーダルモデルを通じて、セマンティック検索の概念をテキストから画像に拡張できます。 CLIP OpenCLIP MetaCLIPなどのモデルは、画像とそのキャプションの共通表現を見つけるようにトレーニングされているため、犬の画像の埋め込みベクトルは、犬の写真というテキストキャプションの埋め込みベクトルと非常に似ています

これは、データセット内の画像の CLIP 埋め込みからベクトルインデックスを作成しこのベクトルデータベースに対してベクトル検索クエリを実行することが合理的 (つまり「可能」 )であることを意味します。ここで、クエリベクトルはテキスト キューの CLIP 埋め込みです。

動画内の個々のフレームを画像として扱い、各フレームの埋め込みをベクター インデックスに追加することで、動画内でセマンティック検索を実装することもできる点に注目してください

セマンティック検索アルゴリズム詳細と動作コードについては次のリンクを参照してください: https://docs.voxel51.com/user_guide/brain.html#text-similarity

6. モデル間検索

1 つのトレイン入力音声ファイルと一致する画像モデル間で検索しますこれは、 ImageBind と Qdrantベクターインデックスを使用したCOCO 2017 検証分割実現されています(ビデオ著者提供)

ある意味では、画像データセットにおけるセマンティック検索は、クロスモデル検索の一種です。アルゴリズムを概念的に説明するためにテキストクエリに対応する画像を取得します。 ImageBindのようなモデルツールを使用するとこのアプリケーション領域をさらに深く掘り下げることができます

ImageBind は、6 つの異なるモダリティ(画像、テキスト、オーディオ、深度、熱、慣性測定ユニット)からのデータを同じ埋め込み空間に埋め込みます。つまり、これらのモダリティのいずれかに対してベクトルインデックスを生成、これらのモダリティのいずれかからのサンプルを使用してそのインデックスをクエリできるということです。たとえば、車のクラクションの音声クリップを取得し、その車のすべての画像を取得できます。

クロスモデル検索詳細と動作コードについては https://github.com/jacobmarks/audio-retrieval-pluginを参照してください

7. 知覚的類似性を探る

これまでほとんど無視してきたベクトル探索の非常に重要な部分は、モデルです実際、ベクトル インデックスの要素はモデルからの埋め込みです。これらの埋め込みは、カスタム埋め込みモデルの最終出力になることもあれば、分類などの別のタスクでトレーニングされたモデルの隠れた表現または潜在的な表現になることもあります。

いずれにせよ、サンプルを埋め込むために使用するモデルは、どのサンプルが他のサンプルに最も類似しているかを識別する際に大きな影響を与える可能性があります。 CLIP モデルでは、意味概念を捉えることはできますが、画像内の構造情報を表現するのは困難です。一方、ResNet モデルは、ピクセルや画像スライスのレベルで操作できるため、構造やレイアウトの類似性を表現するのに非常に優れています。さらに、 DreamSimのような埋め込みモデルがありこれはギャップを埋めて中程度の類似性を捉え、モデルの類似性の概念を人間の知覚と一致させることを目指しています。

最後に、ベクトル検索に焦点を当てますこの検索技術により、モデルが世界をどのように「見ている」かを調べることができます。おそらく、(同じデータ上で)関心のあるモデルごとに個別のベクトル インデックスを作成することで、さまざまなモデルが内部的にデータをどのように表現するについてすぐに直感を得ることができます

以下は、NIGHTS データセットに CLIP、ResNet、DreamSim モデルを使用して埋め込まれた同じクエリ画像の類似性検索結果を示す例です

NIGHTS データセット ( Stable Diffusionを使用して生成された画像) の画像に対する ResNet50 埋め込みによる類似性検索。ResNetモデルはピクセル レベルとタイルレベルの両方で動作するため取得された画像は構造的にはクエリに類似していますが、意味的には必ずしも類似しているわけではありません。

同じクエリ画像上の CLIP 埋め込みの類似性検索。 CLIP モデルは、画像の基本的なセマンティクスを尊重しますが、レイアウトは尊重しません。

同じクエリ画像に埋め込まれた DreamSim からの類似性検索結果。 DreamSim はこのギャップを埋め、意味的特徴と構造的特徴の間の最適な中間レベルの類似性のトレードオフを追求します。

知覚的類似性の探索に関する詳細情報と実際のコードについてはこのリンクを参照してください: https://medium.com/voxel51/teaching-androids-to-dream-of-sheep-18d72f44f2b

8. 比較モデル表現

NIGHTS データセットにおける ResNet50 と CLIP モデル表現のヒューリスティック比較。 ResNet 埋め込みは、 UMAP ( Uniform Manifold approximation and Projection )メソッドを使用して2D に縮小されました。埋め込み内のポイントを選択し、近くのサンプルをハイライト表示すると、ResNet がセマンティクスではなく構成とカラーパレットの類似性をどのようにキャプチャするかがわかります CLIP 埋め込みを使用して選択したサンプルに対してベクトル検索を実行すると、 CLIP に従ったサンプルのほとんどがResNetによって検索されていないことがわかります

ベクトル検索と均一多様体近似および投影 (UMAP )などの次元削減技術を組み合わせることで、2 つのモデル間の違いに関する新たな洞察を得ることができます。方法は次のとおりです。

各モデルの埋め込みには、モデルがデータをどのように表現するかに関する情報が含まれていますUMAP(またはt-SNEまたはPCA)技術の助けを借りて元のモデル(モデル1 から埋め込まれた低次元(2Dまたは3D)表現を生成できますこうすることで、ある程度の詳細は犠牲になりますが、どのサンプルが他のサンプルと類似していると考えられるかという情報が保持されることが期待されます。一方、私たちが得るのは、このデータを視覚化する能力です。

元のモデル (モデル1 )の埋め込み視覚化背景として、グラフ内のポイントを選択し、モデル 2 (モデル 2)の埋め込みに対してその例のベクトル検索クエリを実行できます取得したポイントが 2D 視覚化のどこに位置しているかを確認できます

前の例では、前のセクションと同じ NIGHTS データセットを使用し、より多くの構成および構造の類似性情報を取得するResNet 埋め込みを視覚化し CLIP (意味的側面) 埋め込みを使用して類似性検索を実行します

9. 概念の補間

オックスフォード IIIT ペットデータセット上のCLIP 埋め込みを使用した概念ハスキー」と「チワワ間の補間

この記事もほぼ終わりに近づいていますが、幸運なことに、いくつか最高のものを最後に残しておきましたこれまで扱ってきたベクトルは埋め込みだけです。ベクトル インデックスには埋め込みが設定され、クエリ ベクトルも埋め込みです。しかし、埋め込み空間には、データとより動的にやりとりするために利用できる追加の構造が存在する場合があります。

この動的な相互作用の一例は、私が概念的補間」と呼んでいるものです。動作は次のとおりです。まず画像データセットを取得し、次にマルチモーダルモデル (テキストと画像)を使用してベクトルインデックスを生成します。たとえば、概念を表す「晴れ」や「雨が降っている」などの 2 つのテキスト キューを選択し、値 alpha を [0,1] の範囲に設定します。各テキスト概念の埋め込みベクトルを生成し、これらのベクトルをアルファで指定された線形結合に追加できます。次に、ベクトルを正規化し、画像埋め込みのベクトル インデックスへのクエリとして使用します。

2 つのテキスト キュー (概念) の埋め込みベクトル間を線形補間しているため、概念自体の間も非常に緩く補間されます。アルファを動的に変更しすべてのインタラクションでベクターデータベースを照会できます

この概念補間の概念は実験的なものであることに留意してください(覚えておいてください:必ずしも明確に定義された操作ではありません) テキスト プロンプトが概念的に関連しており、データセットが十分に多様で、補間スペクトルのさまざまなポイントで異なる結果が得られる場合に、最も効果的に機能することがわかりました。

Concept Interpolation の詳細情報と実際のコードについて次のリンクを参照してください: https://github.com/jacobmarks/concept-interpolation

10. 概念空間の横断

「概念」の空間は、埋め込みをさまざまなテキストの手がかりの方向に移動することによって横断され、その結果はCOCO 2017 データセットのテスト分割サブセットここに示されていますここで使用されている画像とテキストはCLIPモデルに埋め込まれています画像は著者提供

最後に、もう 1 つの非常に重要なアプリケーションは、私のお気に入りの「概念空間トラバーサル」です概念補間と同様に、このアプリケーションは画像データセットから開始し、 CLIP などマルチモーダル モデルを使用して埋め込みを生成します次に、データセットから画像を選択します。この画像は出発点となり、そこから概念の空間を「旅」することができます

その後、概念の代わりにテキスト文字列を指定して、移動する方向を定義できます。テキスト文字列の埋め込みベクトル (乗算係数を含む) が初期画像の埋め込みベクトルに追加される方向の「ステップ」のサイズを設定します。 「宛先ベクトルはベクトルデータベースを照会するために使用されます。必要な数だけコンセプトを追加し、取得した画像セットがリアルタイムで更新されるのを確認できます。

「概念補間」と同様に、概念空間のトラバーサルは必ずしも厳密に定義されたプロセスではありません。しかし、私はそれが魅力的であり、テキスト埋め込みに適用される係数がこの係数を考慮に入れるのに十分高い場合は、非常にうまく機能する思います。

Concept Space Traversalの詳細と動作コードについてこのリンクを参照してください: https://github.com/jacobmarks/concept-space-traversal-plugin

結論は

ベクター検索エンジンは非常に強力なツールです。彼らは、検索強化生成における機械学習分野当然のスターです。しかし実際には、ベクターデータベースの用途はこれよりはるかに広範囲にわたります。ベクターデータベースは、データに対する理解を深め、モデルがデータをどのように表現するかについての洞察を得て、データと対話するための新しい方法を提供するのに役立ちます。

ベクトルデータベースは必ずしも大規模言語モデルの分野にのみ関連しているわけではないことに注意してください。埋め込みが関係する場合はいつでも有用であることが判明しており、埋め込みはモデルとデータの交差点に位置します。埋め込み空間の構造をより厳密に理解すればするほど、サポートベクター検索におけるデータとモデルの相互作用はより動的かつ一般化可能になります

この記事が興味深いと思ったら、ベクター検索に関する以下の関連記事もチェックしてみてください

  • OpenAIの技術を使って企業の文書を検索可能なデータベースに変換する
  • ChatGPT を画像およびビデオデータセット用の SQL のようなトランスレータに変える方法
  • キューエンジニアリングを限界まで押し上げる方法

翻訳者紹介

Zhu Xianzhong 氏は、51CTO のコミュニティ エディターであり、51CTO の専門ブロガー兼講師であり、濰坊の大学のコンピューター教師であり、フリーランス プログラミング コミュニティのベテランです。

原題: From RAGs to Riches 、著者: Jacob Marks, Ph.D.

<<:  ReSimAD: 実データなしで知覚モデルの一般化パフォーマンスを向上させる方法

>>:  マイクロソフトCEOナデラ氏:世界は人工知能に関して幅広い合意を形成しつつある

ブログ    

推薦する

キロメートル認識誤差5%未満の世界最先端の超長距離精密3Dセンシング技術をリリース。

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

人工知能技術は若者の雇用にどのような影響を与えるでしょうか?

人工知能の発展の過程で、常に次のような声が聞かれます。「人工知能によって、特に若者を中心に、失業者が...

...

...

...

AIは生成的敵対ネットワークを使用して、笑顔、悲しみ、怒り、驚きなどの個別の顔の属性を生成します。

人工知能は、生成的敵対的ネットワークを使用して、笑顔、悲しみ、怒り、驚きなどの個別の顔の属性を生成し...

ブロックチェーンとAIを最大限に活用する方法

急速に進化する今日のテクノロジー環境において、成功を目指す企業にとって、常に時代の先を行くことが重要...

顔認識は終わったのか?最初の「顔ハイジャック」型バンキングトロイの木馬が誕生

各人の顔、指紋、虹彩の情報はそれぞれ固有であり偽造が困難であるため、生体認証は長年にわたり究極の本人...

20万人を超える人々が請願し、MITとハーバード大学が米国政府を訴えています。

米国移民関税執行局の最近の新しい規制は、アメリカのトップ大学の間で騒動を引き起こしている。ハーバード...

ドローンは農業にも活用されており、植物保護ドローンは侵入の防止と制御に非常に効果的です。

今日のドローンは、ビデオ録画だけでなく、害虫や病気の問題を防ぐための農業での使用など、幅広い用途に使...

10行のPythonコードで画像認識

[[226981]]ディープラーニングアルゴリズムの台頭と普及により、人工知能の分野、特にコンピュー...

...

OpenAI は PyTorch、TensorFlow を全面的に採用していますが、なぜそれほど優れていないのでしょうか?

TensorFlow と PyTorch フレームワーク間の戦いは長い間続いています。最近のニュー...

サプライチェーン管理における自動化の重要性

今日のペースが速く競争の激しいビジネス環境において、サプライ チェーン管理は成功に不可欠な要素です。...