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

milvus-logo
LFAI
الصفحة الرئيسية
  • دليل المستخدم
  • Home
  • Docs
  • دليل المستخدم

  • المخطط وحقول البيانات

  • التدريب العملي

التدريب العملي على تصميم المخطط

تُعد أنظمة استرجاع المعلومات (IR)، والمعروفة أيضًا باسم البحث، ضرورية لتطبيقات الذكاء الاصطناعي المختلفة مثل التوليد المعزز للاسترجاع (RAG) والبحث عن الصور والتوصية بالمنتجات. تتمثل الخطوة الأولى في تطوير نظام استرجاع المعلومات في تصميم نموذج البيانات، والذي يتضمن تحليل متطلبات العمل، وتحديد كيفية تنظيم المعلومات، وفهرسة البيانات لجعلها قابلة للبحث الدلالي.

يدعم Milvus تحديد نموذج البيانات من خلال مخطط تجميع. وتنظم المجموعة البيانات غير المهيكلة مثل النصوص والصور، إلى جانب تمثيلاتها المتجهة، بما في ذلك المتجهات الكثيفة والمتناثرة بدقة مختلفة تستخدم للبحث الدلالي. بالإضافة إلى ذلك، يدعم Milvus تخزين وتصفية أنواع البيانات غير المتجهة التي تسمى "Scalar". تشمل الأنواع العددية BOOL و INT8/16/32/64 و FLOAT/DOUBLE و VARCHAR و JSON و Array.

Example data schema designed for searching news article مثال على مخطط بيانات مصمم للبحث في مقالة إخبارية

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

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

مثال على ذلك: البحث عن الأخبار

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

  • للبحث عن الصور من خلال النص، يمكننا تضمين الصور في متجهات عبر نموذج تضمين متعدد الوسائط يمكنه تعيين بيانات النص والصورة في نفس المساحة الكامنة.

  • يتم تضمين النص الموجز لمقالة ما في متجهات عبر نموذج تضمين النص.

  • للتصفية استنادًا إلى وقت النشر، يتم تخزين التواريخ كحقل قياسي ويلزم وجود فهرس للحقل القياسي للتصفية الفعالة. يمكن تخزين هياكل بيانات أخرى أكثر تعقيدًا مثل JSON في عدد قياسي وإجراء بحث مصفى على محتوياتها (فهرسة JSON ميزة قادمة).

  • لاسترداد الصورة المصغرة للصور بالبايت وعرضها على صفحة نتائج البحث، يتم تخزين عنوان url الخاص بالصورة أيضًا. وبالمثل، لنص الملخص والعنوان. (بدلاً من ذلك، يمكننا تخزين بيانات النص الخام وبيانات ملف الصورة كحقول قياسية إذا لزم الأمر).

  • لتحسين نتيجة البحث على النص الملخص، نقوم بتصميم نهج بحث هجين. بالنسبة لأحد مسارات الاسترجاع، نستخدم نموذج التضمين العادي لتوليد متجه كثيف من النص، مثل OpenAI's text-embedding-3-large أو نموذج bge-large-en-v1.5 المفتوح المصدر. هذه النماذج جيدة في تمثيل الدلالات الإجمالية للنص. والمسار الآخر هو استخدام نماذج التضمين المتناثر مثل BM25 أو SPLADE لتوليد متجه متناثر، يشبه البحث في النص الكامل الذي يجيد استيعاب التفاصيل والمفاهيم الفردية في النص. يدعم Milvus استخدام كليهما في نفس مجموعة البيانات بفضل ميزة المتجهات المتعددة. يمكن إجراء البحث على متجهات متعددة في عملية واحدة hybrid_search().

  • أخيرًا، نحتاج أيضًا إلى حقل معرّف لتحديد كل صفحة أخبار فردية، يشار إليه رسميًا باسم "كيان" في مصطلحات ميلفوس. يُستخدم هذا الحقل كمفتاح أساسي (أو "pk" اختصارًا).

اسم الحقل

article_id (المفتاح الأساسي)

العنوان

المؤلف_المعلومات

نشر_ت

صورة_url

متجه_الصورة

ملخص

ملخص_المتجه_الكثيف

ملخص_ملخص_المتجه_الكثيف

النوع

INT64

VARCHAR

JSON

INT32

VARCHAR

FLOAT_VECTOR

VARCHAR

FLOAT_VECTOR

متناثر_مُتجه_مُتفرق

تحتاج إلى فهرس

N

N

N (الدعم قريبًا)

Y

N

Y

N

Y

Y

كيفية تنفيذ مخطط المثال

إنشاء مخطط

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

لإعداد مخطط، نستخدم create_schema() لإنشاء كائن مخطط و add_field() لإضافة حقول إلى المخطط.

from pymilvus import MilvusClient, DataType

collection_name = "my_collection"

# client = MilvusClient(uri="http://localhost:19530")
client = MilvusClient(uri="./milvus_demo.db")

schema = MilvusClient.create_schema(
    auto_id=False,
)

schema.add_field(field_name="article_id", datatype=DataType.INT64, is_primary=True, description="article id")
schema.add_field(field_name="title", datatype=DataType.VARCHAR, max_length=200, description="article title")
schema.add_field(field_name="author_info", datatype=DataType.JSON, description="author information")
schema.add_field(field_name="publish_ts", datatype=DataType.INT32, description="publish timestamp")
schema.add_field(field_name="image_url", datatype=DataType.VARCHAR,  max_length=500, description="image URL")
schema.add_field(field_name="image_vector", datatype=DataType.FLOAT_VECTOR, dim=768, description="image vector")
schema.add_field(field_name="summary", datatype=DataType.VARCHAR, max_length=1000, description="article summary")
schema.add_field(field_name="summary_dense_vector", datatype=DataType.FLOAT_VECTOR, dim=768, description="summary dense vector")
schema.add_field(field_name="summary_sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR, description="summary sparse vector")

قد تلاحظ الوسيطة uri في MilvusClient ، والتي تُستخدم للاتصال بخادم ميلفوس. يمكنك تعيين الوسيطات على النحو التالي.

  • إذا كنت تحتاج فقط إلى قاعدة بيانات متجهية محلية للبيانات ذات النطاق الصغير أو النموذج الأولي، فإن تعيين الوسيطة كملف محلي، على سبيل المثال./milvus.db ، هي الطريقة الأكثر ملاءمة، حيث تستخدم تلقائيًا Milvus Lite لتخزين جميع البيانات في هذا الملف.

  • إذا كان لديك حجم كبير من البيانات، على سبيل المثال أكثر من مليون ناقل، يمكنك إعداد خادم Milvus أكثر أداءً على Docker أو Kubernetes. في هذا الإعداد، يُرجى استخدام عنوان الخادم والمنفذ كـ uri، على سبيل المثالhttp://localhost:19530. إذا قمت بتمكين خاصية المصادقة على Milvus، استخدم "<your_username>: <your_password>" كرمز مميز، وإلا فلا تقم بتعيين الرمز المميز.

  • إذا كنت تستخدم Zilliz Cloud، الخدمة السحابية المدارة بالكامل لـ Milvus، فاضبط uri و token ، والتي تتوافق مع نقطة النهاية العامة ومفتاح واجهة برمجة التطبيقات في Zilliz Cloud.

أما بالنسبة إلى auto_id في MilvusClient.create_schema ، فإن المعرف التلقائي هو سمة للحقل الأساسي الذي يحدد ما إذا كان سيتم تمكين الزيادة التلقائية للحقل الأساسي. نظرًا لأننا قمنا بتعيين الحقلarticle_id كمفتاح أساسي ونريد إضافة معرف المقالة يدويًا، قمنا بتعيين auto_id False لتعطيل هذه الميزة.

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

تعريف الفهرس

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

index_params = client.prepare_index_params()

index_params.add_index(
    field_name="image_vector",
    index_type="AUTOINDEX",
    metric_type="IP",
)
index_params.add_index(
    field_name="summary_dense_vector",
    index_type="AUTOINDEX",
    metric_type="IP",
)
index_params.add_index(
    field_name="summary_sparse_vector",
    index_type="SPARSE_INVERTED_INDEX",
    metric_type="IP",
)
index_params.add_index(
    field_name="publish_ts",
    index_type="INVERTED",
)

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

هناك العديد من أنواع المؤشرات والمقاييس. لمزيد من المعلومات حولها، يمكنك الرجوع إلى نوع فهرس Milvus ونوع مقياس Milvus.

إنشاء مجموعة

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

client.create_collection(
    collection_name=collection_name,
    schema=schema,
    index_params=index_params,
)

يمكننا التحقق من أن المجموعة قد تم إنشاؤها بنجاح من خلال وصف المجموعة.

collection_desc = client.describe_collection(
    collection_name=collection_name
)
print(collection_desc)

اعتبارات أخرى

تحميل الفهرس

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

كيفية تعريف نموذج البيانات للمستأجرين المتعددين

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

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

جرب Managed Milvus مجاناً

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

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

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