Note This translation conveys the same meaning as the original English phrase, which refers to going from a state of poverty to wealth.

「これは英語の元の表現と同じ意味を伝える日本語の翻訳です貧困から富へと変化することを指しています」

ベクトル検索の10の応用:データとモデルを深く理解するために

データ探索のためのベクトル検索の芸術的描写。DALLE-3 によって生成された画像です。

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

ベクトル検索エンジンは、言語モデルへのコンテキスト情報として関連する情報を効率的に見つけ出すことで、トレーニングの切断点を超えた最新の情報を提供し、微調整なしでモデルの出力の品質を向上させることができます。このプロセスは一般的にリトリーバル補助生成(RAG)と呼ばれ、近似最近傍(ANN)検索というかつての難解なアルゴリズム的課題を注目の的としました!

これらの喧噪(こんそう)の中で、ベクトル検索エンジンは大規模言語モデルと切り離せない存在と思われるかもしれません。しかし、そのストーリーにはそれ以上の幅広い応用があります。ベクトル検索には、RAG向上の範疇を超えた強力な応用が数多く存在します!

この記事では、データ理解、データ探索、モデルの説明可能性など、私のお気に入りのベクトル検索の利用法を10個紹介します。

以下のアプリケーションを、おおよそ複雑さの増加順にカバーします:

Oxford-IIIT Pet Dataset の画像による画像類似検索(ライセンスあり)。画像は著者によるものです。

もっとも単純な利用例は、画像類似検索です。このタスクでは、画像のデータセットがあります。これは個人の写真アルバムから、何年にもわたって数千の分散カメラによって撮影された数十億枚の画像を含む大規模リポジトリまで、何でもあります。

設定は簡単です:このデータセットの各画像に対して埋め込みを計算し、これらの埋め込みベクトルからベクトルインデックスを生成します。この初期の計算の後は、追加の推論は必要ありません。データセットの構造を探索する素晴らしい方法は、データセットから画像を選択し、ベクトルインデックスに対してクエリを実行して、k 個の最近傍画像、つまり最も類似した画像を取得することです。これにより、クエリ画像の周りの画像空間がどれだけ密に詰まっているかを直感的に把握することができます。

詳細情報と動作するコードについては、こちらをご覧ください。

Unsplashからの画像(Mladen Šćekić提供)での逆画像検索、Oxford-IIIT Petデータセット対応。画像提供:著者

同じような手法で、画像の類似検索を拡張して、外部の画像に対してデータセット内で最も類似した画像を見つけることができます。これは、ローカルファイルシステムの画像やインターネット上の画像などです。

逆画像検索を行うには、まず、画像の類似検索の例と同様にデータセットのベクトルインデックスを作成します。違いは、実行時にクエリ画像の埋め込みを計算し、このベクトルでベクトルデータベースをクエリするときに現れます。

詳細情報と動作するコードについては、こちらをご覧ください。

COCO-2017データセットのバリデーションスプリットの羊に対するオブジェクトの類似検索(LICENSE)。画像提供:著者

画像内のコンテンツをより詳しく探索したい場合は、オブジェクトまたは「パッチ」の類似検索が必要です。その一例が人物再識別で、興味のある人物が写った単一の画像を持ち、データセット内のその人物のすべてのインスタンスを見つけたい場合です。

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

より良い解決策は、各物体検出パッチを別個のエンティティと見なし、それぞれのパッチに対して埋め込みを計算することです。その後、これらのパッチ埋め込みを使用してベクトルインデックスを作成し、再識別したい人物のパッチに対して類似検索を実行します。初めの段階では、ResNetモデルを使用することがおすすめです。

2つの注意点:

  1. ベクトルインデックスでは、各パッチをデータセット内の対応する画像にマッピングするメタデータを保存する必要があります。
  2. インデックスを生成する前に、オブジェクト検出モデルを実行してこれらの検出パッチを生成する必要があります。また、personなどの特定のクラスのオブジェクト(chairtableなどではない)に対してのみパッチ埋め込みを計算することも検討してください。

詳細情報と動作するコードについては、こちらをご覧ください。

Tesseract OCRエンジンによって生成されたテキストブロックを用いた曖昧/意味検索、私のPh.D.論文のページでの利用。GTE-baseモデルを使用した埋め込み。画像提供:著者

光学文字認識(OCR)は、手書きのメモ、古いジャーナル記事、医療記録、クローゼットにしまい込まれたラブレターなどのドキュメントをデジタル化することができる技術です。OCRエンジン(TesseractPaddleOCRなど)は、画像内の個々の文字や記号を識別し、連続したテキストブロック(段落と考えてください)を作成することで機能します。

このテキストを取得した後、予測されたテキストブロックの上で従来の自然言語キーワード検索を実行することができます(ここで紹介されているように)。しかし、この検索方法は単文字の誤りに弱いです。OCRエンジンが「l」を「1」と誤って認識した場合、キーワード検索「コントロール」は失敗します(皮肉ですね!)。

ベクトル検索を使用することで、この課題を克服することができます! Hugging FaceのSentence TransformersライブラリのGTE-baseなどのテキスト埋め込みモデルを使用して、テキストブロックを埋め込み、ベクトルインデックスを作成します。その後、検索テキストを埋め込み、インデックスをクエリすることにより、デジタル化されたドキュメント全体で曖昧および/または意味ベースの検索を実行することができます。大まかに言えば、これらのドキュメント内のテキストブロックは、オブジェクトの類似検索におけるオブジェクト検出パッチに類似しています!

詳細な情報と実行コードについては、こちらをご覧ください。

Semantic image search using natural language on the COCO 2017 validation split. Image courtesy of the author.

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

これは、COCO 2017の検証データセット上のセマンティック画像検索において、CLIPの埋め込みベクトルからベクトルデータベースを作成し、テキストクエリのCLIP埋め込みベクトルを使用してベクトル検索クエリを実行することが合理的(「許容される」ともいえます)であることを意味します。

💡ビデオの個々のフレームを画像として扱い、各フレームの埋め込みをベクトルインデックスに追加することにより、ビデオ全体を意味ベースで検索することもできます!

詳細な情報と実行コードについては、こちらをご覧ください。

クロスモーダル検索

電車の入力オーディオファイルに一致する画像のクロスモーダル検索。 COCO 2017の検証分割でImageBindとQdrantベクトルインデックスを使用して実装されています。動画は作者によるものです。

ある意味、データセット内の画像をセマンティック検索することはクロスモーダル検索の形態です。それは、テキストクエリに対応する画像を取得していると考える方法の一つです。 ImageBindのようなモデルを使用すると、さらに進めることができます!

ImageBindは、画像、テキスト、オーディオ、深度、サーマル、慣性計測装置(IMU)といった6つの異なるモダリティのデータを同じ埋め込み空間に埋め込むことができます。つまり、これらのモダリティのいずれかのデータに対してベクトルインデックスを生成し、そのインデックスに対して他のモダリティのサンプルをクエリできます。例えば、クラクションのオーディオクリップを取り、車のすべての画像を取得することができます!

詳細な情報と実行コードについては、こちらをご覧ください。

感覚的類似性の探索

これまでに触れたベクトル検索ストーリーの非常に重要な部分であるモデルについて話す必要があります。ベクトルインデックス内の要素は、モデルからの埋め込みです。これらの埋め込みは、適切に調整された埋め込みモデルの最終出力である場合や、分類など他のタスクでトレーニングされたモデルの隠れたまたは潜在的な表現である場合があります。

モデルの組み込み方法によって、どのサンプルが他のサンプルと最も似ていると見なされるかには重要な影響があります。CLIPモデルは意味的な概念を捉えることができますが、画像内の構造情報を表現するのは難しいです。一方、ResNetモデルはピクセルやパッチのレベルで類似性を表現するのに非常に優れています。また、DreamSimなどの埋め込みモデルは、モデルの類似性の概念を人間が認識するものと合わせるため、中間レベルの類似性を捉えることを目指しています。

ベクトル検索は、モデルが世界をどのように「見ている」かを探る方法を提供します。興味を持っている各モデルに対して別々のベクトルインデックスを作成することで、同じデータに対して異なるモデルがどのようにデータを表現しているかを迅速に理解することができます。

以下はNIGHTSデータセット上の同じクエリ画像に対してCLIP、ResNet、およびDreamSimモデルの埋め込みを使用した類似性検索の例です:

NIGHTSデータセット内の画像に対するResNet50埋め込みを使用した類似性検索の例(Stable Diffusionによって生成された画像 — MIT RAIL LICENSE)。ResNetモデルはピクセルとパッチのレベルで操作します。したがって、取得された画像はクエリと構造的に類似していますが、常に意味的に類似しているわけではありません。
同じクエリ画像に対するCLIP埋め込みを使用した類似性検索の例。CLIPモデルは画像の基本的な意味を尊重していますが、レイアウトは尊重していません。
同じクエリ画像に対するDreamSim埋め込みを使用した類似性検索の例。DreamSimは中間レベルの類似性を捉えるために最善の妥協点を見つけることを目指しています。

詳細と作業コードについては、こちらをご覧ください。

モデルの比較

NIGHTSデータセットのResNet50とCLIPモデルの表現のヒューリスティックな比較。ResNet埋め込みはUMAPを使用して2Dに削減されました。埋め込みプロットの点を選択し、近くのサンプルを強調表示することで、ResNetが構成やパレットの類似性を捉えていること、意味的な類似性ではないことを確認できます。CLIP埋め込みで選択したサンプルでベクトル検索を実行すると、CLIPによると最も多いサンプルはResNetによってローカライズされていないことがわかります。

ベクトル検索と一様多様体近似 (UMAP) のような次元削減手法を組み合わせることで、2つのモデル間の違いを新たな見識を得ることができます。以下に手順を示します:

各モデルの埋め込みには、モデルがデータをどのように表現しているかに関する情報が含まれています。UMAP(またはt-SNEまたはPCA)を使用することで、モデル1の埋め込みから、より低次元(2Dまたは3D)の表現を生成することができます。これにより、一部の詳細は失われますが、他のサンプルとの類似性を知る上での情報を保持することができます。私たちが得るものは、このデータを視覚化する能力です。

モデル1の埋め込みの視覚化を背景に、このプロット上のポイントを選択し、モデル2の埋め込みに関してそのサンプルへのベクトル検索クエリを実行することができます。その結果、2D視覚化内のどの位置に検索されたポイントが存在するかを確認することができます!

上記の例では、前のセクションと同じNIGHTSデータセットを使用して、ResNetの埋め込みを視覚化し、CLIP(意味的)の埋め込みとの類似性検索を行っています。

概念の補間

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

私たちは10のアプリケーションの終わりに近づいていますが、最後にいくつかの最高のアプリケーションを用意しました。これまで、私たちが扱ってきたのは埋め込みです-ベクトルインデックスは埋め込みで埋められ、クエリベクトルも埋め込みです。しかし、埋め込みの空間には、データとより動的に対話するために利用できる追加の構造があることがあります。

そのような動的な対話の一例は、私が「概念の補間」と呼ぶものです。次のように機能します。画像のデータセットを取り、テキストと画像のモデルを使用してベクトルインデックスを生成します。 “晴れ”や”雨”などの2つのテキストプロンプト(概念を代表する)を選び、範囲[0,1]の値alphaを設定します。各テキストの概念の埋め込みベクトルを生成し、alphaで指定された線形結合でこれらのベクトルを追加します。その後、ベクトルを正規化し、画像埋め込みのベクトルとしてクエリに使用します。

2つのテキストプロンプト(概念)の埋め込みベクトル間を線形補間するため、ある意味では概念自体を補間していると言えます! alphaを動的に変更し、対話があるたびにベクトルデータベースをクエリすることができます。

💡この概念の補間という考え方は実験的です(つまり、必ずしも明確に定義された操作ではありません)。テキストプロンプトが概念的に関連している場合や、データセットが異なる場所で異なる結果を持つほど多様な場合に最も効果的に機能すると考えています。

詳細な情報と実装コードについては、こちらをご覧ください。

概念空間の移動

<img alt="CLIPモデルを使用してテキストプロンプトの埋め込みを経由してさまざまな概念の方向に移動することで「概念」空間を横断する、COCO 2017データセットのテストセットのイラストです。画像とテキストはCLIPモデルで埋め込まれています。著者から提供された画像です。</figcaption></figure><p>最後に、私が「概念空間の移動」と呼ぶものがあります。概念の補間と同様に、画像のデータセットを選び、CLIPのようなマルチモーダルモデルで埋め込みを生成します。次に、データセットから画像を選択します。この画像は出発点となり、概念空間を「横断」するための出発点となります。</p><p>そこから、概念を表すテキスト文字列を与えて移動したい方向を定義します。その方向に取りたい「ステップ」の大きさを設定し、そのテキスト文字列の埋め込みベクトル(乗算係数で)を初期画像の埋め込みベクトルに追加します。" p="" 目的地"ベクトルをベクトルデータベースへのクエリに使用します。任意の数の概念を任意の数量で追加し、リアルタイムで検索される画像のセットが更新される様子を見ることができます。

「概念の補間」と同様に、これは常に厳密に定義されたプロセスではありません。しかし、私はそれが魅力的であり、テキスト埋め込みに適用される係数が十分に高い場合には、十分に考慮されることがあると考えています。

詳細な情報と動作するコードについては、こちらをご覧ください。

結論

ベクトル検索エンジンは非常に強力なツールです。確かに、彼らは町の最高のショーであるRAG-timeの主役です。しかし、ベクトルデータベースはそれ以上に多様な用途があります。それらはデータのより深い理解を可能にし、モデルがそのデータをどのように表現しているかについての洞察を与え、データとモデルの相互作用の新たな道を提供します。

ベクトルデータベースはLLMに縛られていません。埋め込みが関与する場合にはいつでも役立ちますし、埋め込みはモデルとデータの交差点に位置しています。埋め込み空間の構造をより厳密に理解するほど、ベクトル検索によるデータとモデルの相互作用はよりダイナミックで普及するようになるでしょう。

もし、この投稿が興味深いと思われた場合は、以下のベクトル検索を活用した投稿もご覧になってください:

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more