ChromaDBは、ベクトルデータを効率的に保存し、検索するためのオープンソースのベクトルデータベースです。特に、機械学習モデルや自然言語処理(NLP)で生成される高次元ベクトルを扱うために最適化されています。ChromaDBは、ドキュメントやテキストなどのデータをベクトル形式で保存し、それらのデータ間の類似性検索(Nearest Neighbor Search)を行うことに特化しています。(Chromeに似ていてtypoしそうってこの文章を打ちながら思いましたw)
特徴は以下です。
- ベクトルの高速検索
- ChromaDBは、大量の高次元ベクトルに対する類似度検索を効率的に行うために最適化されています。これにより、BERTやGPTなどのモデルで生成されたベクトルを使って、類似するデータを迅速に検索できます。
- スケーラビリティ: ChromaDBは、大規模なベクトルデータにも対応しており、スケーラブルな形でデータを保存、検索することができます。分散アーキテクチャを採用しているため、クラウド環境や分散システムでの利用も可能です。
- シンプルなAPI
GitHub - amikos-tech/chroma-go: The Go client for Chroma vector database
- 多様な検索メソッドのサポート
- 類似度検索において、L2距離、コサイン類似度など、さまざまな計量手法をサポートしています。ユーザーは、用途に応じて適切な検索手法を選択することができます。
ChromaDBの利用
ChromaDBはクラサバで動かすモードがあるようです。ChromaDBサーバーの起動とかが必要で面倒なのでとりあえずインメモリーの方で動かしてみます。 (とはいえDockerイメージも公開されてるのでシュッと試すことはできそう)
import chromadb # ChromaDBクライアントの初期化 client = chromadb.Client() # コレクション(テーブルに相当)を作成 collection = client.create_collection("my_collection") # サンプルデータ(文とその対応するベクトル) documents = ["I love machine learning", "Natural language processing is fascinating", "ChromaDB makes vector search easy"] embeddings = [ [0.1, 0.2, 0.3], # 仮のベクトル(実際にはモデルから取得) [0.2, 0.1, 0.4], [0.4, 0.5, 0.1] ] # データをコレクションに挿入 collection.add( documents=documents, embeddings=embeddings, ids=["doc1", "doc2", "doc3"] ) # 類似するベクトルの検索 query_vector = [0.1, 0.2, 0.3] # クエリとして使用するベクトル results = collection.query(query_embeddings=[query_vector], n_results=2) # 検索結果の表示 print("Similar documents:", results["documents"])