BGE M3
سُميBGE-M3 نظرًا لقدراته في تعدد اللغات وتعدد الوظائف وتعدد الحبيبات. وبفضل قدرته على دعم أكثر من 100 لغة، يضع BGE-M3 معايير جديدة في مهام الاسترجاع متعدد اللغات واللغات. إن قدرتها الفريدة على إجراء الاسترجاع الكثيف والاسترجاع متعدد النواقل والاسترجاع المتناثر في إطار واحد يجعلها خيارًا مثاليًا لمجموعة واسعة من تطبيقات استرجاع المعلومات (IR).
يتكامل ميلفوس مع نموذج BGE M3 باستخدام فئة BGEM3EmbeddingFunction. تتعامل هذه الفئة مع حساب التضمينات وتعيدها بتنسيق متوافق مع 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`.
)
المعلمات:
اسم_النموذج(سلسلة)
اسم النموذج المراد استخدامه للترميز. القيمة الافتراضية إلى BAAI/bge-m3.
الجهاز(سلسلة)
الجهاز المراد استخدامه، مع استخدام cpu لوحدة المعالجة المركزية و cuda:n لجهاز وحدة معالجة الرسومات رقم n.
use_fp16(bool)
ما إذا كان يجب استخدام دقة الفاصلة العائمة 16 بت (fp16). حدد خطأ عندما يكون الجهاز هو وحدة المعالجة المركزية.
لإنشاء تضمينات للمستندات، استخدم الأسلوب 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)