「Pythonベクトルデータベースとベクトルインデックス:LLMアプリの設計」

Pythonベクトルデータベースとベクトルインデックス:LLMアプリの設計

 

Generative AIアプリケーションのおかげで、Nvidiaは著しい成長を遂げています。もう1つのソフトウェアイノベーションであるベクトルデータベースも、Generative AIの波に乗っています。

開発者は、Pythonでベクトルデータベース上でAIパワードのアプリケーションを構築しています。データをベクトルとしてエンコードすることで、ベクトル空間の数学的な性質を活用して、非常に大きなデータセットを対象に高速な類似性検索を実現することができます。

まずは基礎から始めましょう!

 

ベクトルデータベースの基礎

 

ベクトルデータベースは、数値ベクトルとしてデータを座標空間に格納します。これにより、コサイン類似度などの操作を使用してベクトル間の類似性を計算することができます。 

最も類似したデータポイントを表す最も近いベクトルです。スカラーデータベースとは異なり、ベクトルデータベースは複雑なクエリやトランザクションよりも類似性検索に最適化されています。 

数十億のデータポイントでも、類似するベクトルをミリ秒単位で検索することができます。 

ベクトルデータベースは、効率的にベクトルの近接性に基づいてクエリを実行するためにインデックスを構築します。これは、テキスト検索エンジンが高速な全文検索のためにドキュメントをインデックス化する方法に類似しています。

 

開発者にとってのベクトル検索の利点

 

開発者にとって、ベクトルデータベースは以下の利点を提供します:

  • 高速な類似性検索 – ミリ秒単位で類似するベクトルを見つける
  • 動的なデータのサポート – 新しいデータでベクトルを継続的に更新する
  • スケーラビリティ – 複数のマシンでベクトル検索をスケールさせる
  • 柔軟なアーキテクチャ – ベクトルはローカル、クラウドオブジェクトストア、または管理データベースに保存できる
  • 高次元性 – 各ベクトルに数千の次元をインデックス化できる
  • API – 管理されたベクトルデータベースを選択する場合、クリーンなクエリAPIや既存のデータサイエンスツールキットやプラットフォームとの統合が提供されていることが一般的です。

ベクトル検索の主要な機能でサポートされる人気のあるユースケースの例は:

  • ビジュアル検索 – 類似した製品画像を見つける
  • 推薦 – コンテンツを提案する
  • チャットボット – クエリを意図にマッチさせる
  • 検索 – テキストベクトルから関連するドキュメントを表示する

ベクトル検索が注目を集め始めているユースケースの例は:

  • 異常検知 – 外れ値ベクトルの識別
  • 薬剤探索 – 特性ベクトルによる分子の関連付け

 

Pythonベクトルデータベースとは何ですか?

 

Pythonのライブラリを含むベクトルデータベースは、ベクトルデータベースのフルライフサイクルをサポートするPythonベクトルデータベースです。ただし、データベース自体はPythonで構築する必要はありません。

 

これらのPythonベクトルデータベースライブラリがサポートするべきものは何ですか?

 

ベクトルデータベースへの呼び出しは、データ関連管理関連の2つのカテゴリに分けることができます。良いニュースは、これらの呼び出しは従来のデータベースと同様のパターンに従っているということです。

データ関連の関数 – ライブラリがサポートすべきもの

   

標準的な管理関連の関数 – ライブラリがサポートすべきもの

   

それでは、これらのデータベースの上にLLMアプリを構築する方法について少し詳しく説明しましょう

 

LLMアプリの設計

 

LLMアプリを利用したベクトル検索のアーキテクチャについて詳しく説明する前に、ワークフローの観点から関与する要素を理解しましょう。

典型的なワークフローは次のような手順で行われます:

  1. データの豊富化またはクリーニング。これはデータの品質と一貫したコンテンツのフォーマットを確保するための軽量なデータ変換ステップです。また、データの豊富化が必要な場合もあります。 
  2. モデルを介してデータをベクトルとしてエンコードする。モデルにはいくつかのトランスフォーマーが含まれています(例:センテンストランスフォーマーなど)
  3. ベクトルデータベースまたはベクトルインデックスにベクトルを挿入する(これについては後述します)
  4. Python APIを介して検索を公開する
  5. 文書のオーケストレーションワークフロー
  6. アプリやUIでのテストと結果の可視化(例:チャットUI)

さて、異なるアーキテクチャコンポーネントを使用して、このワークフローの異なる部分を有効にする方法を見てみましょう。

1)の場合、関係データベースやコンテンツ管理システムを含む他のソースシステムからメタデータを取得する必要があります。

2)の場合、事前学習済みモデルがほとんどの場合は好まれます。OpenAIモデルは、ホステッドオファリングを通じて提供される最も人気のあるモデルです。プライバシーやセキュリティ上の理由から、ローカルモデルをホストすることもあります。

3)の場合、10億以上のレコードを持つデータセットなどで大規模な類似性検索を実行する場合は、ベクトルデータベースまたはベクトルインデックスが必要です。エンタープライズの観点からは、「検索」を行う前に通常は少し多くのコンテキストがあります。

4)の場合、うれしいニュースは、公開された検索が通常同様のパターンに従うことです。以下のようなコードがあります。

Pineconeから

index = pinecone.Index("example-index")

index.upsert([
    ("A", [0.1, 0.1, 0.1, 0.1], {"genre": "comedy", "year": 2020}),
)


index.query( 
vector=[0.1, 0.1, 0.1, 0.1], 
filter={ 
"genre": {"$eq": "documentary"}, 
"year": 2019 
}, 
top_k=1,
)

 

ここで興味深い行は次のとおりです。

filter={ 
"genre": {"$eq": "documentary"}, 
"year": 2019 
},

 

これは実際に「ジャンル」と「年」に近いベクトルの結果をフィルタリングします。コンセプトやテーマに基づいてベクトルをフィルタリングすることもできます。

エンタープライズ環境では、現在のビジネスフィルタも含まれるため、課題が発生します。データソースからのデータ(テーブル構造やメタデータなど)のモデリングの欠如に対処することが重要です。構造化データと矛盾する誤った表現を少なくするために、テキストの忠実度を向上させることも重要です。このような状況では、”データパイプライニング”戦略が必要であり、エンタープライズの「コンテンツマッチング」が重要になります。

5)に関しては、通常のデータの取り込みの課題に加えて、変化するコーパスに固有の課題があります。新しいドキュメントは、ベクトルを関連付けるために、全体のコーパスの再エンコーディングと再インデックス化が必要になる場合があります。

6)に関しては、これは完全に新しい領域であり、類似性レベルをテストするだけでなく、人間が介入するアプローチが必要です。自動化された検索スコアリングと異なるタイプのコンテキストスコアリングは、容易に達成できるものではありません。

 

Python Vector Index:既存のデータベースに対するより簡単なベクトル検索の代替手段。

 

ベクトルデータベースは、上記の例と同様の文脈検索を可能にする複雑なシステムであり、さらにデータベースの機能(作成、挿入、更新、削除、管理など)も提供します。

ベクトルデータベースの例には、WeaviateとPineconeがあります。どちらもPythonのAPIを公開しています。

時には、より簡単な設定が十分です。より軽量な代替手段として、既に使用しているストレージを使用し、それに基づいたベクトルインデックスを追加することができます。このベクトルインデックスは、コンテキストを持つ検索クエリのみを取得するために使用され、例えば生成AIの使用に適しています。

ベクトルインデックスのセットアップでは、以下の要素があります:

  • 通常のデータストレージ(例:PostgreSQLやディスクディレクトリ内のファイル)が必要な基本操作(作成、挿入、更新、削除)を提供します。
  • データに基づいた高速なコンテキストベースの検索を可能にするベクトルインデックス。

ベクトルインデックスを実装するスタンドアロンのPythonライブラリには、FAISS、Pathway LLM、Annoyなどがあります。

良いニュースは、ベクトルデータベースとベクトルインデックスのLLMアプリケーションワークフローが同じであることです。主な違いは、Python Vector Indexライブラリに加えて、既存のデータライブラリを引き続き「通常の」データ操作とデータ管理に使用することです。例えば、PostgreSQLを使用している場合はPsycopg、ファイルにデータを保存している場合は標準のPythonの「fs」モジュールなどが該当します。

ベクトルインデックスの提唱者は、次の利点に焦点を当てています:

  • データプライバシー:元のデータを安全かつ変更せずに保持し、データの露出リスクを最小限に抑えます。
  • コスト効率:余分なストレージ、計算パワー、ライセンスに関連するコストを削減します。
  • スケーラビリティ:管理するコンポーネントの数を減らすことで、スケーリングを簡素化します。

 

ベクトルデータベースとベクトルインデックスを使用するタイミングはいつですか?

 

ベクトルデータベースは、次のいずれかが真である場合に役立ちます

  • スケールでベクトルデータを扱う特殊なニーズがある場合
  • ベクトルのための専用のアプリケーションを作成している場合
  • 他の種類のアプリケーションで保存されたデータの他の種類の使用を予期しない場合

ベクトルインデックスは、次のいずれかが真である場合に役立ちます

  • データストレージに新しい技術を信頼したくない場合
  • 既存のストレージがPythonから簡単にアクセスできる場合
  • 類似性検索が他の大規模なエンタープライズBIおよびデータベースのニーズの1つである場合
  • ベクトルを既存のスカラーレコードにアタッチする必要がある場合
  • データエンジニアリングチームに対してパイプラインを扱うための統一された方法が必要な場合
  • データに対してインデックスとグラフ構造を使用して、LLMアプリケーションやタスクをサポートする必要がある場合
  • 他のソースからの拡張出力または拡張コンテキストが必要な場合
  • コーパスからトランザクションデータに適用できるルールを作成したい場合

 

エンタープライズベクトル検索の未来

 

ベクトル検索は、開発者にとってゲームチェンジングな機能を提供します。モデルと技術が改善されるにつれて、ベクトルデータベースまたはベクトルインデックスはアプリケーションスタックの重要な一部になることが予想されます。

この概要がPythonでベクトルデータベースとベクトルインデックスの探索のための堅実な出発点を提供することを願っています。最近開発されたベクトルインデックスに興味がある場合は、このオープンソースプロジェクトをご確認ください。アヌプ・スレンドランは、AI製品を市場に導入することに特化したプロダクトおよびプロダクトマーケティングの副社長であり、SAPとKrollに成功裏に売却されたスタートアップと一緒に働いてきました。彼は他の人々にAI製品が組織内の生産性を向上させる方法について教えることを楽しんでいます。

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