🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية

BM25

BM25 هي دالة ترتيب تُستخدم في استرجاع المعلومات لتقدير مدى صلة المستندات باستعلام بحث معين. تعمل هذه الدالة على تحسين نهج تردد المصطلح الأساسي من خلال دمج تطبيع طول المستند وإشباع تردد المصطلح. يمكن ل BM25 إنشاء تضمينات متفرقة من خلال تمثيل المستندات كمتجهات لدرجات أهمية المصطلحات، مما يسمح باسترجاع وترتيب فعال في مساحات متجهات متفرقة.

يتكامل ميلفوس مع نموذج BM25 باستخدام فئة BM25EmbeddingFunction. تتعامل هذه الفئة مع حساب التضمينات وتعيدها بتنسيق متوافق مع Milvus للفهرسة والبحث. من الضروري لهذه العملية بناء محلل للتضمين الرمزي.

لاستخدام هذه الميزة، قم بتثبيت التبعيات اللازمة:

pip install --upgrade pymilvus
pip install "pymilvus[model]"

لإنشاء مُحلل ترميز بسهولة، تقدم Milvus محللاً افتراضياً لا يتطلب سوى تحديد لغة النص.

مثال:

from pymilvus.model.sparse.bm25.tokenizers import build_default_analyzer
from pymilvus.model.sparse import BM25EmbeddingFunction

# there are some built-in analyzers for several languages, now we use 'en' for English.
analyzer = build_default_analyzer(language="en")

corpus = [
    "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.",
]

# analyzer can tokenize the text into tokens
tokens = analyzer(corpus[0])
print("tokens:", tokens)

المعلمات:

  • اللغة(سلسلة)

    لغة النص المراد ترميزه. الخيارات الصالحة هي en (الإنجليزية)، de (الألمانية)، fr (الفرنسية)، ru (الروسية)، sp (الإسبانية)، it (الإيطالية)، pt (البرتغالية)، zh (الصينية)، jp (اليابانية)، kr (الكورية).

الناتج المتوقع مشابه لما يلي:

tokens: ['artifici', 'intellig', 'found', 'academ', 'disciplin', '1956']

تقوم خوارزمية BM25 بمعالجة النص عن طريق تقسيمه أولاً إلى رموز باستخدام محلل مدمج، كما هو موضح مع رموز اللغة الإنجليزية مثل "artifici" و "intellig" و "academ". ثم تقوم بجمع إحصائيات حول هذه الرموز، وتقييم تواترها وتوزيعها عبر المستندات. يقوم جوهر BM25 بحساب درجة أهمية كل رمز بناءً على أهميته، حيث تحصل الرموز النادرة على درجات أعلى. تتيح هذه العملية الموجزة ترتيبًا فعالاً للمستندات حسب أهميتها بالنسبة للاستعلام.

لجمع إحصائيات عن مجموعة المستندات، استخدم طريقة fit():

# Use the analyzer to instantiate the BM25EmbeddingFunction
bm25_ef = BM25EmbeddingFunction(analyzer)

# Fit the model on the corpus to get the statstics of the corpus
bm25_ef.fit(corpus)

ثم استخدم تشفير_المستندات() لإنشاء تضمينات للمستندات:

docs = [
    "The field of artificial intelligence was established as an academic subject in 1956.",
    "Alan Turing was the pioneer in conducting significant research in artificial intelligence.",
    "Originating in Maida Vale, London, Turing grew up in the southern regions of England.",
    "In 1956, artificial intelligence emerged as a scholarly field.",
    "Turing, originally from Maida Vale, London, was brought up in the south of England."
]

# Create embeddings for the documents
docs_embeddings = bm25_ef.encode_documents(docs)

# Print embeddings
print("Embeddings:", docs_embeddings)
# Since the output embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse dim:", bm25_ef.dim, list(docs_embeddings)[0].shape)

الناتج المتوقع مشابه لما يلي:

Embeddings:   (0, 0)        1.0208816705336425
  (0, 1)        1.0208816705336425
  (0, 3)        1.0208816705336425
...
  (4, 16)        0.9606986899563318
  (4, 17)        0.9606986899563318
  (4, 20)        0.9606986899563318
Sparse dim: 21 (1, 21)

لإنشاء تضمينات للاستعلامات، استخدم الأسلوب encode_queries():

queries = ["When was artificial intelligence founded", 
           "Where was Alan Turing born?"]

query_embeddings = bm25_ef.encode_queries(queries)

# Print embeddings
print("Embeddings:", query_embeddings)
# Since the output embeddings are in a 2D csr_array format, we convert them to a list for easier manipulation.
print("Sparse dim:", bm25_ef.dim, list(query_embeddings)[0].shape)

الناتج المتوقع مشابه لما يلي:

Embeddings:   (0, 0)        0.5108256237659907
  (0, 1)        0.5108256237659907
  (0, 2)        0.5108256237659907
  (1, 6)        0.5108256237659907
  (1, 7)        0.11554389108992644
  (1, 14)        0.5108256237659907
Sparse dim: 21 (1, 21)

ملاحظات:

عند استخدام دالة التضمين BM25EmbeddingFunction، لاحظ أنه لا يمكن تبادل عمليات ترميز_الاستعلامات( ) وترميز المستندات() رياضيًا. لذلك، لا يتوفر bm25_ef(النصوص) المنفذة.

جدول المحتويات

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟