[OSS紹介#81] Chroma:機械学習プロジェクトを加速する埋め込みデータベースの魅力

この記事について

この記事では、注目のオープンソースソフトウェア(OSS)「Chroma」を紹介します。この記事は、連載第81回となり、特に機械学習を活用したアプリケーション開発において、開発者の生産性を向上させるツールとしてのChromaの魅力を深掘りしていきます。

Chromaは、PythonやJavaScriptを使用して簡単にメモリーを使った大規模言語モデル(LLM)アプリケーションを構築できるオープンソースの埋め込みデータベースです。使いやすさに加え、強力なクエリ機能やフィルタリング機能を備えており、データを効率的に管理・検索することができます。このような機能は、特に自然言語処理を活用したプロジェクトにおいて、その真価を発揮します。

Chromaを使用することで、開発者は自身のデータを使って自然言語でのクエリを行い、関連するドキュメントを簡単に検索することができます。これにより、従来のデータベース以上に直感的なデータ操作が可能となり、開発の流れを一層スムーズにすることが期待されます。今回は、このツールの基本機能やユースケースを詳しく見ていき、どのようにプロジェクトに貢献できるかを考えていきます。

リンク:https://github.com/chroma-core/chroma


本コンテンツは、弊社AI開発ツール「IXV」を用いたOSSツール紹介です。情報の正確性には努めておりますが、内容に誤りが含まれる可能性がございますのでご了承ください。

1. Chromaでできること

Chromaは、オープンソースの埋め込みデータベースであり、PythonやJavaScriptを用いた大規模言語モデル(LLM)アプリケーションの構築を迅速に行うためのツールです。主な機能は以下の通りです。

  • シンプルで使いやすいAPI: 完全に型付けされ、テスト済み、文書化されたAPIを提供し、開発者のストレスを軽減します。
  • 豊富な機能: クエリ、フィルタリング、密度推定などの機能を備え、情報を効率的に取得できます。
  • 統合サポート: LangChainやLlamaIndexなど、さまざまなツールとの統合が可能です。

Chromaは、文書を埋め込みとして格納し、近傍検索を通じて関連する情報を迅速に取得する能力があります。具体的には、以下の機能を持っています。

  • 埋め込みとメタデータの保存
  • ベクトル検索
  • フルテキスト検索
  • ドキュメントストレージ
  • メタデータフィルタリング
  • マルチモーダル検索

この特性により、文書の内容を機械学習モデルが理解しやすい形に変換し、高速な情報検索を実現します。

ChromaはAIネイティブのオープンソースベクトルデータベースであり、初めての方でも手軽に始められる構成が整っています。さらに、スケーラブルなデータベースサービスであるChroma Cloudも提供しており、30秒で開始でき、$5の無料クレジットが含まれています。

2. セットアップ手順

Chromaを使用するためのセットアップは非常に簡単です。以下の手順に従ってください。

2.1 Python環境でのインストール

Pythonクライアントを利用する場合、次のコマンドを実行します。

pip install chromadb

2.2 JavaScript環境でのインストール

JavaScriptを使用する場合、次のコマンドを実行します。

npm install chromadb @chroma-core/default-embed

2.3 クライアント-サーバーモード

クライアント-サーバーモードで利用する場合は、以下のコマンドを実行してデータベースのパスを指定します。

chroma run --path /chroma_db_path

このモードではデータを持続的に使用できるため、アプリケーションの構成に応じて選択できます。

2.4 ライセンスと動作環境

ChromaはApache 2.0ライセンスの下で提供されています。特定の動作環境に関する情報は明示されていませんが、一般的なPythonおよびJavaScriptの互換性があります。

3. 簡単な使い方

Chromaを使った基本的な操作は以下のようになります。

3.1 Chromaの初期設定

初めに、Chromaのクライアントをインスタンス化します。

import chromadb
client = chromadb.Client()

3.2 コレクションの作成

次に、コレクションを作成します。このコレクションは埋め込みとメタデータを格納します。

collection = client.create_collection("all-my-documents")

3.3 ドキュメントの追加

作成したコレクションにドキュメントを追加します。埋め込み、トークン化、インデックス作成は自動で行われます。この際、ユニークなIDをドキュメントに付与する必要があります。

collection.add(
    documents=["This is document1", "This is document2"],
    metadatas=[{"source": "notion"}, {"source": "google-docs"}],
    ids=["doc1", "doc2"],
)

3.4 クエリの実行

追加したドキュメントに対してクエリを実行し、最も関連性の高い結果を取得します。

results = collection.query(
    query_texts=["This is a query document"],
    n_results=2,
)

n_resultsが指定されない場合、デフォルトで10件の結果が返されます。ChromaはColabデモやJupyterノートブックでも実行可能なため、手軽に試すことができます。

3.5 結果の検査

クエリの結果を確認することで、どの文書が最も関連性が高いかを確認できます。例えば、特定の文書と関連する情報も取得できます。

4. 結論

Chromaは、シンプルかつ強力な埋め込みデータベースとして、大規模言語モデルアプリケーションの開発を加速するための優れたツールです。豊富な機能と容易な統合により、開発者は効率的にプロトタイプを作成し、スケールアップすることができます。Apache 2.0ライセンスのもとで提供されているため、自由に利用・改良が可能です。Chromaを活用して、次世代のアプリケーション開発に取り組んでみてはいかがでしょうか。詳細な情報については、Chromaの公式ドキュメントを参照してください。