BGE M3
BGE-M3 ist benannt nach seinen Fähigkeiten in Bezug auf Mehrsprachigkeit, Multifunktionalität und Multigranularität. Mit der Unterstützung von über 100 Sprachen setzt BGE-M3 neue Maßstäbe für mehrsprachige und sprachübergreifende Abfrageaufgaben. Seine einzigartige Fähigkeit, Dense Retrieval, Multi-Vektor Retrieval und Sparse Retrieval innerhalb eines einzigen Frameworks durchzuführen, macht es zur idealen Wahl für ein breites Spektrum von Information Retrieval (IR) Anwendungen.
Milvus lässt sich über die Klasse BGEM3EmbeddingFunction in das BGE M3-Modell integrieren. Diese Klasse übernimmt die Berechnung von Einbettungen und gibt sie in einem mit Milvus kompatiblen Format zur Indizierung und Suche zurück. Um diese Funktion zu nutzen, muss FlagEmbedding installiert sein.
Um diese Funktion zu nutzen, installieren Sie die erforderlichen Abhängigkeiten:
pip install --upgrade pymilvus
pip install "pymilvus[model]"
Dann instanziieren Sie die 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`.
)
Parameter:
model_name(string)
Der Name des für die Kodierung zu verwendenden Modells. Der Wert ist standardmäßig BAAI/bge-m3.
device(Zeichenkette)
Das zu verwendende Gerät, wobei cpu für die CPU und cuda:n für das n-te GPU-Gerät steht.
use_fp16(bool)
Ob die 16-Bit-Gleitkommagenauigkeit (fp16) verwendet werden soll. Geben Sie False an, wenn das Gerät cpu ist.
Um Einbettungen für Dokumente zu erstellen, verwenden Sie die Methode 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)
Die erwartete Ausgabe ist ähnlich wie die folgende:
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)
Um Einbettungen für Abfragen zu erstellen, verwenden Sie die Methode 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)
Die erwartete Ausgabe ist ähnlich wie die folgende:
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)