BGE M3
BGE-M3 debe su nombre a sus capacidades de multilingüismo, multifuncionalidad y multigranularidad. Con capacidad para más de 100 idiomas, BGE-M3 establece nuevos hitos en tareas de recuperación multilingüe y multilingüe cruzada. Su capacidad única para realizar recuperación densa, recuperación multivectorial y recuperación dispersa dentro de un mismo marco lo convierte en la opción ideal para una amplia gama de aplicaciones de recuperación de información (RI).
Milvus se integra con el modelo BGE M3 mediante la clase BGEM3EmbeddingFunction. Esta clase gestiona el cálculo de las incrustaciones y las devuelve en un formato compatible con Milvus para la indexación y la búsqueda. Para utilizar esta función, es necesario instalar FlagEmbedding.
Para utilizar esta función, instale las dependencias necesarias:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
A continuación, instancie la función 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`.
)
Parámetros:
nombre_modelo(cadena)
Nombre del modelo que se utilizará para la codificación. El valor por defecto es BAAI/bge-m3.
dispositivo(cadena)
El dispositivo a utilizar, con cpu para la CPU y cuda:n para el enésimo dispositivo GPU.
use_fp16(bool)
Si se utiliza precisión de punto flotante de 16 bits (fp16). Especifique False cuando el dispositivo sea cpu.
Para crear incrustaciones para documentos, utilice el método 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)
El resultado esperado es similar al siguiente:
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)
Para crear incrustaciones para consultas, utilice el método 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)
El resultado esperado es similar al siguiente:
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)