こんにちは。
最近、NVIDIA-Certified Associate: Generative AI and LLMs (NCA-GENL)を習得しました。
その際に知っておいた方が良い基礎知識とコードの書き方を共有したいと思います。
生成AIのチュートリアル:
1.ベクトルデータベース (Vector Database)とは?
ベクトルデータベースは、ベクトル化したデータを保存、管理、クエリするために設計されたデータベースの一種。
ベクトルデータベースは、非構造化データ(テキスト、画像、音声、動画など)を類似性検索が可能。
また、キーワードの一致だけでなく、与えられたクエリに「意味的に類似している」データアイテムを見つけることができる。(セマンティック検索機能)
大規模言語モデル(LLM)やGPTモデルなどに不可欠。
2.ChromaDBとは?
ChromaDBは、オープンソースのベクトルデータベース。
軽量で使いやすいように設計されており、データの保存、Embedding、検索を行うためのツールを提供。
色々なEmbeddingモデル(SentenceTransfotmerベースやOpenAIのAPI)をサポートし、ローカルで実行することも、クライアント・サーバーソリューションとして実行することもできるため、効率的なセマンティック検索機能を提供。
その他のオープンソースのベクトルデータベースのメリットとデメリット
データベース | メリット | デメリット |
---|---|---|
ChromaDB | - 開発者フレンドリー: LLM開発者にとって、セットアップと使用が非常に簡単。 - シームレスなLLM連携: LangChain、HuggingFace、および様々なEmbeddingモデルとの連携。 - デプロイ: インメモリ、ファイルベース (DuckDB)、またはよりスケーラブルなバックエンド (ClickHouse) で実行。 - コミュニティ: 開発者向けのサポートとリソースが豊富。 |
- スケーラビリティの限界: 数十億のベクトルやペタバイト級のデータ向けには設計されておらず、非常に大規模なデータセットには最適ではない。 - 機能: コアとなるベクトル検索とRAGに重点を置いており、他のオプションは少なめ。 |
Milvus | - スケーラビリティ: 数十億のベクトルを処理し、クラスター全体で水平にスケールするように設計。 - パフォーマンス: 高スループットと低レイテンシーのベクトル検索。 - インデックスオプション: パフォーマンスと精度を微調整するための様々なインデックスアルゴリズムを提供。 |
- 運用上の複雑さ: 小規模なプロジェクトやチームにとっては、セットアップ、管理、運用がより複雑でリソースを消費。 - リソース要件: 分散デプロイメントにはかなりのインフラが必要。 - 新規ユーザー: 分散型である事と豊富な機能のため、新規ユーザーには難しい。 |
Qdrant | パフォーマンス: Rustで書かれており、高速性、効率性、および低いリソース消費。 - ペイロードフィルタリング: 添付されたメタデータ (JSONペイロード) に基づいて検索結果をフィルタリングする機能があり、複雑なコンテキスト検索。 - リアルタイム更新: データとリアルタイムインデックス作成を効率的に処理。 |
- 新規ユーザー: フィルタリング機能を完全に習得するには勉強が必要。 - 特化: 多機能ではあるが汎用データベースではない。 |