BGE M3
BGE-M3 doit son nom à ses capacités en matière de multilinguisme, de multifonctionnalité et de multigranularité. Capable de prendre en charge plus de 100 langues, BGE-M3 établit de nouvelles références dans les tâches de recherche multilingue et interlinguistique. Sa capacité unique à effectuer une recherche dense, une recherche multi-vectorielle et une recherche éparse dans un cadre unique en fait un choix idéal pour un large éventail d'applications de recherche d'informations (RI).
Milvus s'intègre au modèle BGE M3 à l'aide de la classe BGEM3EmbeddingFunction. Cette classe gère le calcul des embeddings et les renvoie dans un format compatible avec Milvus pour l'indexation et la recherche. Pour utiliser cette fonction, FlagEmbedding doit être installé.
Pour utiliser cette fonctionnalité, installez les dépendances nécessaires :
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Ensuite, instanciez la fonction 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`.
)
Paramètres:
nom_modèle(chaîne)
Le nom du modèle à utiliser pour l'encodage. La valeur par défaut est BAAI/bge-m3.
device(chaîne)
Le périphérique à utiliser, avec cpu pour le CPU et cuda:n pour le nième périphérique GPU.
use_fp16(bool)
Utiliser ou non la précision de la virgule flottante 16 bits (fp16). Spécifier False si le périphérique est cpu.
Pour créer des embeddings pour les documents, utilisez la méthode 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)
Le résultat attendu est similaire à ce qui suit :
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)
Pour créer des embeddings pour des requêtes, utilisez la méthode 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)
Le résultat attendu est similaire à ce qui suit :
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)