BGE M3
BGE-M3は、多言語、多機能、多グラニュラリティに対応することから命名されました。100以上の言語をサポートするBGE-M3は、多言語およびクロスリンガル検索タスクにおいて新たなベンチマークを打ち立てます。単一のフレームワークで高密度検索、マルチベクトル検索、スパース検索を実行できるユニークな機能により、幅広い情報検索(IR)アプリケーションに理想的な選択肢となっています。
MilvusはBGEM3EmbeddingFunctionクラスを使用してBGE M3モデルと統合されています。このクラスはエンベッディングの計算を処理し、Milvusと互換性のあるフォーマットでインデックスや検索用に返します。この機能を使用するには、FlagEmbeddingがインストールされている必要があります。
この機能を使用するには、必要な依存関係をインストールします:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
次に、BGEM3EmbeddingFunctionをインスタンス化します:
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
bge_m3_ef = BGEM3EmbeddingFunction(
model_name='BAAI/bge-m3', # Specify the model name
device='cpu', # Specify the device to use, e.g., 'cpu' or 'cuda:0'
use_fp16=False # Specify whether to use fp16. Set to `False` if `device` is `cpu`.
)
パラメータ
model_name(string)
エンコーディングに使用するモデルの名前。デフォルトはBAAI/bge-m3。
device(string)
使用するデバイス。CPUにはcpu、n番目のGPUデバイスにはcuda:nを指定します。
use_fp16(bool)
16ビット浮動小数点精度(fp16)を利用するかどうか。デバイスが cpuの場合はFalseを指定します。
ドキュメントの埋め込みを作成するには、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 = bge_m3_ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", docs_embeddings)
# Print dimension of dense embeddings
print("Dense document dim:", bge_m3_ef.dim["dense"], docs_embeddings["dense"][0].shape)
# Since the sparse embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse document dim:", bge_m3_ef.dim["sparse"], list(docs_embeddings["sparse"])[0].shape)
期待される出力は以下のようなものです:
Embeddings: {'dense': [array([-0.02505937, -0.00142193, 0.04015467, ..., -0.02094924,
0.02623661, 0.00324098], dtype=float32), array([ 0.00118463, 0.00649292, -0.00735763, ..., -0.01446293,
0.04243685, -0.01794822], dtype=float32), array([ 0.00415287, -0.0101492 , 0.0009811 , ..., -0.02559666,
0.08084674, 0.00141647], dtype=float32)], 'sparse': <3x250002 sparse array of type '<class 'numpy.float32'>'
with 43 stored elements in Compressed Sparse Row format>}
Dense document dim: 1024 (1024,)
Sparse document dim: 250002 (1, 250002)
クエリの埋め込みを作成するには、encode_queries()メソッドを使用します:
queries = ["When was artificial intelligence founded",
"Where was Alan Turing born?"]
query_embeddings = bge_m3_ef.encode_queries(queries)
# Print embeddings
print("Embeddings:", query_embeddings)
# Print dimension of dense embeddings
print("Dense query dim:", bge_m3_ef.dim["dense"], query_embeddings["dense"][0].shape)
# Since the sparse embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse query dim:", bge_m3_ef.dim["sparse"], list(query_embeddings["sparse"])[0].shape)
期待される出力は以下のようなものです:
Embeddings: {'dense': [array([-0.02024024, -0.01514386, 0.02380808, ..., 0.00234648,
-0.00264978, -0.04317448], dtype=float32), array([ 0.00648045, -0.0081542 , -0.02717067, ..., -0.00380103,
0.04200587, -0.01274772], dtype=float32)], 'sparse': <2x250002 sparse array of type '<class 'numpy.float32'>'
with 14 stored elements in Compressed Sparse Row format>}
Dense query dim: 1024 (1024,)
Sparse query dim: 250002 (1, 250002)