エンベディング(埋め込み)、または特徴ベクトルとしても知られているものは、人工知能が任意の種類のデータを表現する際のネイティブな方法であり、様々なAIツールやアルゴリズムとの使用に適しています。これらはテキスト、画像、音声、およびビデオを表現することができます。オープンソースのテキスト埋め込みモデルの使用やクラウドサービスのAPIを呼び出すなど、特徴ベクトルデータを生成するための多くのオプションがあります。

Chromaでは、一般的な埋め込みモデルに対する軽量なラッパーを提供し、これをアプリケーションで簡単に使用することができます。Chromaコレクションを作成する際、テキストデータを保存および更新する際に自動的にテキストベクトルを計算する埋め込み関数を設定することができます。

注意: Chromaのカプセル化された埋め込み関数を使用せずにベクトルを計算することもできます。事前にテキストベクトルデータを計算するために任意の埋め込みモデルを選択することができます。

Chromaから埋め込み関数を取得するには、chromadb.utilsからembedding_functionsモジュールをインポートします。

from chromadb.utils import embedding_functions

デフォルトモデル: all-MiniLM-L6-v2

デフォルトでは、ChromaはSentence Transformersのall-MiniLM-L6-v2モデルを使用してベクトルを計算します。この埋め込みモデルは、文やドキュメントのベクトルを作成することができます。この埋め込みモデルの機能はローカルマシン上で実行され、モデルファイルのダウンロードが必要です(これは自動的に行われます)。

default_ef = embedding_functions.DefaultEmbeddingFunction()

Transformersモデル

Chromaは任意のSentence Transformersモデルを使用してベクトルを計算することもできます。

sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")

任意のmodel_nameパラメーターを渡すことで、使用するSentence Transformersモデルを選択することができます。デフォルトでは、Chromaはall-MiniLM-L6-v2を使用します。モデル名はHugging Faceで検索することができます。

OpenAIモデル

ChromaはOpenAIの埋め込みAPIに便利なラッパーを提供しています。これにはOpenAIインターフェイスの呼び出しとAPIキーが必要です。APIキーはOpenAIアカウントに登録することで取得することができます。

この埋め込み関数はopenai Pythonパッケージに依存しており、pip install openaiを使用してインストールすることができます。

openai_ef = embedding_functions.OpenAIEmbeddingFunction(
                api_key="YOUR_API_KEY",
                model_name="text-embedding-ada-002"
            )

AzureなどのプラットフォームでOpenAIの埋め込みモデルを使用する場合は、api_baseおよびapi_typeパラメーターを使用することができます。

openai_ef = embedding_functions.OpenAIEmbeddingFunction(
                api_key="YOUR_API_KEY",
                api_base="YOUR_API_BASE_PATH",
                api_type="azure",
                model_name="text-embedding-ada-002"
            )

カスタム埋め込み関数

Chromaでは、EmbeddingFunctionベースクラスのメソッドを実装することで、独自の埋め込み関数を作成して使用することができます。

from chromadb.api.types import Documents, EmbeddingFunction, Embeddings

class MyEmbeddingFunction(EmbeddingFunction):
    def __call__(self, texts: Documents) -> Embeddings:
        return embeddings