|
今年は大規模AIモデルの応用が爆発的に成長しました。中でも、LangChainやHaystackといったエンドツーエンドの大規模言語モデル応用フレームワークが、ベクトルデータベースに注目を集めています。 ベクター データベース (ベクター データベースとも呼ばれます) は、簡単に言えば、ベクター形式でデータを管理、保存、取得するデータベースです。 ベクトルデータベースはなぜ AI にとってそれほど重要なのでしょうか?高次元データの処理における本質的な利点から、ベクターデータベースは画像処理からレコメンデーションシステムまで、あらゆる分野で陰ながら重要な役割を果たしていることは間違いありません。主な機能は以下のとおりです。
したがって、ベクトルデータベースはAIに記憶を与えると言えるでしょう。記憶には、記録と保存だけでなく、検索と管理も含まれます。人間の記憶と同じように、私たちは卒業写真からクラスメイトをいつでも認識できますし、友人と会話をするときには往年の思い出を振り返ることがよくあります。 では、ベクター データベースはどのように機能するのでしょうか?ベクター データベースの中核は、数学モデルを使用したベクター データの管理です。 では、ベクトルとは一体何でしょうか?簡単に言うと、ベクトルとは方向と大きさの両方を持つ数値オブジェクトです。ベクトルデータベースでは、画像やテキストなどの複雑なデータをベクトルで表現することができます。 各データセグメントは高次元空間のベクトルに変換され、管理されます。類似するデータセグメントを見つける必要がある場合、データベースはすべてのエントリを走査してフィルタリングする必要はありません。代わりに、ベクトル間の距離を計算することでデータをマッチングします。ベクトルが近いほど、データの類似性が高いと判断されます。この方法は非常に効率的で、従来のリレーショナルデータベースと比較して、大量のデータをより高速に処理できます。 以下はテキストベクターストレージの例の図です。 以下は、画像のベクトル化の保存と取得の例の図です。 周知の通り、汎用的な大規模モデルの実行には膨大な計算リソースが必要となるため、多くの大規模モデルはMaaSをベースとしており、その結果、民営化コストが高額になります。一方、特定の業界に特化した大規模モデルアプリケーションでは、データセキュリティ要件が厳しく、セキュリティと専門性を実現するために、関連するビジネス知識やドメイン知識との緊密な統合が求められる場合が多くあります。LangChainのようなフレームワークは、業界特有の大規模モデルアプリケーションに典型的なソリューションを提供し、オープンソースのベクトルデータベースは、LangChainのようなソリューションを根本的にサポートしています。実際、ベクトルデータベースは、エンタープライズナレッジベース、レコメンデーションシステム、ドキュメント管理など、多くのアプリケーションシナリオでも非常に有用です。そのため、ベクトルデータベースは、大規模モデルアプリケーション開発において人気の高い技術となっています。 優れたオープンソースベクターデータベースプロジェクト8つオープンソースコミュニティは、ベクターデータベースの開発に計り知れない貢献をしてきました。多くのオープンソースベクターデータベースプロジェクトは、パフォーマンス、柔軟性、堅牢性において優れています。以下は、現在利用可能な優れたオープンソースベクターデータベースプロジェクト8つです。これらのプロジェクトは、AIソリューションに最適なテクノロジーの選択肢となるはずです。 1. ミルバスhttps://github.com/milvus-io/milvus Milvusは、Zillizが提供する高度にカスタマイズ可能なオープンソースのベクターデータベースで、組み込み類似検索などのAIアプリケーションをサポートするように設計されています。Milvus 2.0がリリースされました。これは、ストレージと計算を分離したクラウドネイティブなベクターデータベースです。Milvus 2.0のすべてのコンポーネントはステートレスをサポートしており、アプリケーション全体の柔軟性と耐障害性が向上しています。 Milvus は、Faiss、Annoy、HNSW などの主流のベクトル検索ライブラリ上に構築されており、数百万、数十億、さらには数兆のベクトルを含む高密度のベクトル データセットで類似性検索を実行するように設計されています。 Milvusは、データシャーディング、データ永続化、ストリーミングデータの取り込み、ベクターデータとスカラーデータのハイブリッド検索など、多くの高度な機能をサポートしています。最適な可用性と耐障害性を実現するには、Kubernetesを使用してMilvusをデプロイすることをお勧めします。 Milvusは共有ストレージアーキテクチャを採用し、ストレージとコンピューティングを分離することで、コンピューティングノードに水平方向のスケーラビリティを提供します。データプレーンとコントロールプレーンの分離の原則に従い、Milvusはアクセスレイヤー、コーディネーションサービス、ワーカーノード、ストレージの4つのレイヤーで構成されています。これらのレイヤーは、スケーリングとディザスタリカバリの観点から、互いに独立して動作できます。 以下は Milvus のアーキテクチャ図です。 Milvus の主な機能は次のとおりです。
詳細については、公式ウェブサイトをご覧ください:https://milvus.io デモ: https://milvus.io/milvus-demos/ ドキュメント: https://milvus.io/docs 2. ファイスhttps://github.com/facebookresearch/faiss FacebookのAI研究チームが開発したベクトルデータベースであるFaissは、高次元ベクトル検索に優れています。非常に効率的なベクトルライブラリであるため、リアルタイム性が求められるアプリケーションに最適です。Faissは、類似度検索と高密度ベクトルクラスタリングのための高性能ライブラリです。そのアルゴリズムは、RAMサイズを超えるサイズのベクトルセットも含め、あらゆるサイズのベクトルセットを検索できます。また、評価とパラメータ調整のためのサポートコードも含まれています。FaissはC++で記述され、Python/NumPyの完全なラッパーを使用しており、一般的に使用されるアルゴリズムの一部はGPU上に実装されています。 Faiss は、ベクトルのインデックスのセットを保存し、それらを比較する関数を提供することで検索を実行します。 現在、Faiss は GitHub で 24,000 以上のスターを獲得しています。 CPU と GPU に基づいた Python のインストール方法は次のとおりです。 上記のうち 1 つだけをインストールできます。後者は前者のスーパーセットであるため、同時に 2 つをインストールすることはできません。 3. イライラさせるhttps://github.com/spotify/annoy Annoy(近似最近傍法、Oh Yeah)は、Spotifyが開発した軽量かつ強力なベクターデータベースです。大規模なデータセットを高速に検索できるように設計されており、迅速な応答時間を必要とするアプリケーションに最適です。C++ライブラリですが、Pythonでも使用できます。 大規模な読み取り専用ファイル データ構造を作成し、これらの構造をメモリにマップして、多くのプロセスが同じデータを共有できるようにします。 ANNOYは、本質的にランダム投影と木構造に基づくアルゴリズムです。2015年にSpotify在籍中のErik Bernhardsson氏によって開発されました。ANNOYは、100~1000次元の密なデータセットを対象に検索を実行するように設計されています。最近傍点を計算するために、点集合を半分に分割し、各集合にk個の要素が含まれるまで再帰的に処理を進めます。通常、kは約100です(下の図を参照)。 Annoy の主な機能の公式説明は次のとおりです。
Pythonでannoyをインストールする: Python で annoy を使用する: 4. Nmslibhttps://github.com/nmslib/nmslib Nmslib(非計量空間ライブラリ)は、非計量空間におけるオープンソースのベクトルデータベースです。高性能でクロスプラットフォームな類似検索ライブラリであり、類似検索手法を評価するためのツールキットでもあります。コアライブラリはサードパーティに依存しません。 このプロジェクトの目標は、一般的な検索方法、近似検索方法、さまざまなメトリック空間アクセス方法、非メトリック空間方法など、一般的な空間と非メトリック空間の両方で検索するための包括的なツールキットを作成することです。 Nmslibは、新しい検索手法や距離関数を追加できる拡張可能なライブラリです。C++、Python、Javaでの使用をサポートしており、例えばJavaなどの言語を使用してクエリサーバーを構築できます。 5. クドラントhttps://github.com/qdrant/qdrant Qdrantは、ベクターデータベースとベクター類似性検索エンジンを含むオープンソースプロジェクトです。ベクターデータの保存、検索、管理のための便利なAPIセットを提供し、ペイロードデータも同時に保存できます。これにより、カスタムデータフィルタリングが容易になり、様々なニューラルネットワーク、セマンティックベースマッチング、ファセット検索、高精度なレコメンデーションなどのアプリケーションで非常に役立ちます。 QdrantはRustで開発されているため、高負荷時でも高い効率と信頼性を維持します。Qdrantは非常に使いやすいです。 (1)Dockerを使い始める (2)Pythonでの使用 インストール: 接続する: qdrant の特徴は次のとおりです。
6. クロマhttps://github.com/chroma-core/chroma Chromaはオープンソースの組み込みベクターデータベースです。Chromaを使えば、LLMアプリケーションを簡単に構築できます。Chromaは非常にシンプルで使いやすく、柔軟性が高く、様々なアプリケーションシナリオのニーズに対応できるように設計されています。サードパーティの埋め込みモデルを使用したクエリとメタデータフィルタリングをサポートしています。 以下は、Chroma と OpenAI 埋め込みと組み合わせて使用されるアーキテクチャの概略図です。 Docker ベースの Chromadb については、以下を参照してください。
実際のアプリケーション開発では、Python で Chroma を使用するのも非常に簡単です。 インストール: 4 つのコア API の使用: Chroma の主な機能は次のとおりです。
7. ランスDBhttps://github.com/lancedb/lancedb LanceDBは、永続ストレージをサポートするオープンソースのベクトル検索データベースです。このオープンソースプロジェクトは、埋め込みデータの検索、フィルタリング、管理を大幅に簡素化します。 LanceDBのコアはRustで開発され、Lance(高性能機械学習ワークロード向けに設計されたオープンソースの列フォーマット)を使用して構築されています。PythonやJavaScriptなどの言語でAPIを使用してLanceDBを操作できます。 Python は次のように使用されます。 インストール: 検索: LanceDB の主な機能は次のとおりです。
8. ベクトラhttps://github.com/Stevenic/vectra VectraはNode.js用のネイティブベクターデータベースで、PineconeやQdrantと機能的に似ていますが、Pineconeとは異なり、ローカルファイルを使用して構築されます。各Vectraインデックスはディスク上のフォルダに対応しています。このフォルダには、インデックス内のすべてのベクターとそのメタデータを含む`index.json`ファイルが含まれています。インデックスを作成する際に、メタデータのプロパティを指定できます。`index.json`ファイルには、これらのフィールドのみが保存されます。プロジェクトのその他のメタデータは、GUIDが指定されたファイルに保存されます。 実行時にはVectraインデックス全体がメモリにロードされるため、検索効率は非常に高く、リアルタイムでも検索可能です。ただし、チャットボットのように長いコンテキストを保持する必要があるシナリオには適していません。Vectraは、小規模なコーパス、静的データ、質疑応答形式のドキュメント検索などのアプリケーションに適しています。 Node.js では次のように使用されます。 インストール: インスタンスを作成します。 インデックスを作成します。 インデックスにデータを追加します。 データ取得: 結論はこれらのオープンソースベクターデータベースはそれぞれ独自の機能を備えています。プロジェクトの具体的なニーズに応じて選択してください。高速データ取得を必要とするプロジェクトの場合は、Annoyが最適かもしれません。ただし、非計量空間を扱うプロジェクトの場合は、Nmslibが最適な選択肢となるかもしれません。適切なベクターデータベースは、AIソリューションにおいてメモリスポンジとして機能し、AIが推論するだけでなく、データを記憶・取得できるようにすることで、AIアプリケーションの有効性を向上させます。 |