モデル2Vec
Model2Vecは、Sentence Transformerモデルをコンパクトな静的モデルに変換する、軽量で高性能な埋め込み技術です。モデルサイズを最大50倍縮小し、推論を最大500倍高速化します。Model2Vecは、リソースに制約のあるデバイスに最適です。
MilvusはModel2VecEmbeddingFunctionクラスを介してModel2Vecのモデルと統合します。このクラスは、事前に学習されたModel2Vecモデルを使って文書やクエリをエンコードし、Milvusのインデックスと互換性のある密なベクトルとしてエンベッディングを返すためのメソッドを提供します。
Hugging Face HubからのモデルのロードとローカルのModel2Vecモデルのアップロードの両方をサポートしており、様々な環境での展開に柔軟性を提供します。
この機能を使うには、必要な依存関係をインストールする:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
次に、Model2VecEmbeddingFunctionをインスタンス化します:
from pymilvus import model
model2vec_ef = model.dense.Model2VecEmbeddingFunction(
model_source='minishlab/potion-base-8M', # or local directory
)
パラメータ
model_source(string)
埋め込みを生成するために使われるModel2Vecモデルのソースを指定する。モデルをロードする2つの方法をサポートする:
Hugging Face Hubからの読み込み(推奨):
- モデル名を文字列で指定する(例:
"minishlab/potion-base-8M")。 - モデルのオプションは以下の通りです:
minishlab/potion-base-8M(デフォルト)minishlab/potion-base-4Mminishlab/potion-base-2Mminishlab/potion-base-32Mminishlab/potion-retrieval-32M
- モデル名を文字列で指定する(例:
ローカルでロード:
- Model2Vecモデルが格納されているローカルファイルパスを指定する(例:
"/path/to/local/model")。
- Model2Vecモデルが格納されているローカルファイルパスを指定する(例:
ドキュメントの埋め込みを作成するには、encode_documents()メソッドを使います:
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
docs_embeddings = model2vec_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension and shape of embeddings
print("Dim:", model2vec_ef.dim, docs_embeddings[0].shape)
期待される出力は以下のようなものです:
Embeddings: [array([ 0.02220882, 0.11436888, -0.15094341, 0.08149259, 0.20425692,
-0.15727402, -0.25320682, -0.00669029, 0.03157463, 0.08974048,
-0.00148778, -0.01803541, 0.00230828, -0.0137875 , -0.19242321,
...
-7.29782460e-03, -2.15345751e-02, -4.13905866e-02, 3.70773636e-02,
5.45082428e-02, 1.36436718e-02, 1.38598625e-02, 3.91175086e-03],
dtype=float32)]
Dim: 256 (256,)
クエリの埋め込みを作成するには、encode_queries()メソッドを使います:
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = model2vec_ef.encode_queries(queries)
# Print embeddings
print("Embeddings:", query_embeddings)
# Print dimension and shape of embeddings
print("Dim", model2vec_ef.dim, query_embeddings[0].shape)
期待される出力は以下のようなものです:
Embeddings: [array([-1.87109038e-02, -2.81724217e-03, -1.67356253e-01, -5.30372337e-02,
1.08304240e-01, -1.09269567e-01, -2.53464818e-01, -1.77880954e-02,
3.05427872e-02, 1.68244764e-01, -7.25950347e-03, -2.52178032e-02,
...
8.60440824e-03, 2.12906860e-03, 1.50156394e-02, -1.29304864e-02,
-3.66544276e-02, 5.01735881e-03, -1.53137008e-02, 9.57900891e-04],
dtype=float32)]
Dim 256 (256,)