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

milvus-logo
LFAI
  • Home
  • Blog
  • تقديم تكامل PyMilvus مع نماذج التضمين

تقديم تكامل PyMilvus مع نماذج التضمين

  • Engineering
June 05, 2024
Stephen Batifol

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

والآن، مع تكامل وحدة النموذج في PyMilvus، وهي مجموعة أدوات تطوير البرمجيات Python SDK لـ Milvus، أصبح من الأسهل إضافة نماذج التضمين وإعادة التصنيف. يعمل هذا التكامل على تبسيط تحويل بياناتك إلى متجهات قابلة للبحث أو إعادة ترتيب النتائج للحصول على نتائج أكثر دقة، كما هو الحال في التوليد المعزز للاسترجاع (RAG).

في هذه المدونة، سنستعرض نماذج التضمين الكثيف ونماذج التضمين المتناثرة، ونماذج إعادة التصنيف، وسنوضح كيفية استخدامها عمليًا باستخدام Milvus Lite، وهو إصدار خفيف الوزن من Milvus يمكن تشغيله محليًا في تطبيقات Python الخاصة بك.

التضمينات الكثيفة مقابل التضمينات المتفرقة

قبل أن نطلعك على كيفية استخدام عمليات التكامل الخاصة بنا، دعنا نلقي نظرة على فئتين رئيسيتين من التضمينات المتجهة.

تنقسمتضمينات المتجهات عمومًا إلى فئتين رئيسيتين: التضمينات الكثيفة والتضمينات المتفرقة.

  • التضمينات الكثيفة هي متجهات عالية الأبعاد تكون فيها معظم العناصر أو كلها غير صفرية، مما يجعلها مثالية لترميز دلالات النص أو المعنى الضبابي.

  • أما التضمينات المتفرقة فهي متجهات عالية الأبعاد تحتوي على العديد من العناصر الصفرية، وهي مناسبة بشكل أفضل لترميز المفاهيم الدقيقة أو المتجاورة.

يدعم Milvus كلا النوعين من التضمينات ويوفر بحثًا هجينًا. يتيح لك البحث الهجين إجراء عمليات بحث عبر حقول متجهات مختلفة ضمن نفس المجموعة. يمكن أن تمثل هذه المتجهات أوجهًا مختلفة من البيانات، أو استخدام نماذج تضمين متنوعة، أو استخدام طرق معالجة بيانات مختلفة، ودمج النتائج باستخدام أدوات إعادة الترتيب.

كيفية استخدام تكاملات التضمين وإعادة التصنيف الخاصة بنا

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

مثال 1: استخدام وظيفة التضمين الافتراضية لتوليد متجهات كثيفة

يجب عليك تثبيت العميل pymilvus مع الحزمة model لاستخدام وظائف التضمين وإعادة الترتيب مع ميلفوس.

pip install "pymilvus[model]"

ستعمل هذه الخطوة على تثبيت Milvus Lite، مما يسمح لك بتشغيل Milvus محليًا داخل تطبيق Python الخاص بك. تتضمن أيضًا الحزمة الفرعية للنموذج، والتي تتضمن جميع الأدوات المساعدة للتضمين وإعادة الترتيب.

تدعم الحزمة الفرعية للنموذج نماذج التضمين المختلفة، بما في ذلك نماذج OpenAI، و Sentence Transformers، و BGE-M3، و BM25، و SPLADE، ونماذج Jina AI المدربة مسبقًا.

يستخدم هذا المثال DefaultEmbeddingFunction ، استنادًا إلى نموذج all-MiniLM-L6-v2 Sentence Transformer Sentence Transformer للتبسيط. يبلغ حجم النموذج حوالي 70 ميغابايت وسيتم تنزيله أثناء الاستخدام الأول:

from pymilvus import model

# This will download "all-MiniLM-L6-v2", a lightweight model.
ef = model.DefaultEmbeddingFunction()

# Data from which embeddings are to be generated
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.",
]

embeddings = ef.encode_documents(docs)

print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

يجب أن تكون المخرجات المتوقعة مثل ما يلي:

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,
      -4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,
       2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...
      -4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,
      -4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],
     dtype=float32)]
Dim: 384 (384,)

مثال 2: توليد متجهات متفرقة باستخدام نموذج BM25

BM25 هي طريقة معروفة تستخدم ترددات تكرار الكلمات لتحديد العلاقة بين الاستعلامات والمستندات. في هذا المثال، سنوضح في هذا المثال كيفية استخدام BM25EmbeddingFunction لتوليد تضمينات متفرقة للاستعلامات والمستندات.

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

from pymilvus.model.sparse import BM25EmbeddingFunction

# 1. Prepare a small corpus to search
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.",
]
query = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()

# 2. Fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)

# 3. Store the fitted parameters to expedite future processing.
bm25_ef.save("bm25_params.json")

# 4. Load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")

docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)

مثال 3: استخدام أداة إعادة التصنيف

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

هذا هو المكان الذي يساعد فيه استخدام أداة إعادة التصنيف. أداة إعادة الترتيب هي نموذج متقدم للذكاء الاصطناعي يأخذ مجموعة النتائج الأولية من البحث - غالبًا ما يتم توفيرها من خلال بحث قائم على التضمينات/الرموز - ويعيد تقييمها للتأكد من أنها تتوافق بشكل أوثق مع قصد المستخدم. فهو ينظر إلى ما هو أبعد من المطابقة السطحية للمصطلحات للنظر في التفاعل الأعمق بين استعلام البحث ومحتوى المستندات.

في هذا المثال، سوف نستخدم أداة إعادة التصنيف بالذكاء الاصطناعي "جينا".

from pymilvus.model.reranker import JinaRerankFunction

jina_api_key = "<YOUR_JINA_API_KEY>"

rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)

query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"

documents = [
   "In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
   "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
   "In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
   "The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]

results = rf(query, documents)

for result in results:
   print(f"Index: {result.index}")
   print(f"Score: {result.score:.6f}")
   print(f"Text: {result.text}\n")

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

Index: 1
Score: 0.937096
Text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.

Index: 3
Score: 0.354210
Text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.

Index: 0
Score: 0.349866
Text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.

Index: 2
Score: 0.272896
Text: In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.

ضع نجمة لنا على GitHub وانضم إلى خلافنا!

إذا أعجبك هذا المنشور في المدونة، ففكر في وضع نجمة ميلفوس على GitHub، ولا تتردد في الانضمام إلى خلافنا! 💙

Like the article? Spread the word

استمر في القراءة