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

milvus-logo
LFAI
  • Home
  • Blog
  • البحث القائم على الكلمات الرئيسية

البحث القائم على الكلمات الرئيسية

  • Scenarios
February 05, 2021
Rahul Yadav

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

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

يستخدم Tokopedia Search Elasticsearch للبحث عن المنتجات وترتيبها. لكل طلب بحث، نقوم أولاً بالاستعلام من Elasticsearch، الذي يقوم بترتيب المنتجات وفقًا لاستعلام البحث. يقوم ElasticSearch بتخزين كل كلمة كسلسلة من الأرقام التي تمثل رموز ASCII (أو UTF) لكل حرف. ينشئ فهرسًا مقلوبًا لاكتشاف المستندات التي تحتوي على كلمات من استعلام المستخدم بسرعة، ثم يعثر على أفضل تطابق بينها باستخدام خوارزميات تسجيل درجات مختلفة. لا تولي خوارزميات تسجيل الدرجات هذه اهتمامًا كبيرًا لما تعنيه الكلمات، بل لمدى تكرار ورودها في المستند، ومدى قربها من بعضها البعض، وما إلى ذلك. من الواضح أن تمثيل ASCII يحتوي على معلومات كافية لنقل الدلالات (ففي النهاية نحن البشر يمكننا فهمها). لسوء الحظ، لا توجد خوارزمية جيدة للكمبيوتر لمقارنة الكلمات المشفرة بترميز ASCII حسب معناها.

تمثيل المتجهات

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

Blog_How we used semantic search to make our search 10x smarter_2.png مدونة_كيف استخدمنا البحث الدلالي لجعل بحثنا أكثر ذكاءً 10 مرات_2.png

حدد محرك بحث تشابه التضمين

الآن بعد أن أصبح لدينا متجهات الميزات، فإن المشكلة المتبقية هي كيفية استرداد المتجهات المتشابهة مع المتجه الهدف من الحجم الكبير من المتجهات. عندما يتعلق الأمر بمحرك البحث عن التضمينات، جربنا POC على عدة محركات متاحة على Github، بعضها مثل FAISS وVearch وMilvus.

نحن نفضل Milvus على المحركات الأخرى بناءً على نتائج اختبار التحميل. من ناحية، لقد استخدمنا FAISS من قبل على فرق أخرى وبالتالي نود تجربة شيء جديد. مقارنةً بـ Milvus، فإن FAISS هو أكثر من مكتبة أساسية، وبالتالي ليس مناسبًا تمامًا للاستخدام. عندما تعلمنا المزيد عن ميلفوس، قررنا أخيرًا اعتماد ميلفوس لميزتيه الرئيسيتين:

  • ميلفوس سهل الاستخدام للغاية. كل ما عليك فعله هو سحب صورة Docker الخاصة به وتحديث المعلمات بناءً على السيناريو الخاص بك.

  • يدعم المزيد من الفهارس ولديه وثائق داعمة مفصلة.

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

خدمة مجموعة ميلفوس العنقودية

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

يوفر Milvus كلاً من Mishards، وهو برنامج وسيط لتجزئة المجموعة، و Milvus-Helm للتكوين. في Tokopedia نستخدم كتب تشغيل Ansible لإعداد البنية التحتية، لذا أنشأنا كتاب تشغيل لتنسيق البنية التحتية. يوضح الرسم البياني أدناه من وثائق ميلفوس كيف يعمل ميشاردز:

Blog_How we used semantic search to make our search 10x smarter_3.png مدونة_كيف استخدمنا البحث الدلالي لجعل بحثنا أكثر ذكاءً 10 مرات_3.png

تقوم Mishards بتتابع الطلب من المنبع إلى وحداته الفرعية التي تقسم طلب المنبع، ثم تجمع نتائج الخدمات الفرعية وتعيدها إلى المنبع. البنية الشاملة للحل العنقودي القائم على Mishards موضحة أدناه: Blog_How we used semantic search to make our search 10x smarter_4.jpegمدونة_كيف استخدمنا البحث الدلالي لجعل بحثنا أذكى 10 مرات_4.jpeg

توفر الوثائق الرسمية مقدمة واضحة لـ Mishards. يمكنك الرجوع إلى Mishards إذا كنت مهتمًا.

في خدمة الكلمات الرئيسية إلى الكلمات الرئيسية الخاصة بنا، قمنا بنشر عقدة واحدة قابلة للكتابة، وعقدتين للقراءة فقط، ومثيل واحد من Mishards للبرامج الوسيطة في GCP، باستخدام Milvus ansible. لقد كانت مستقرة حتى الآن. إن أحد المكونات الضخمة التي تجعل من الممكن الاستعلام بكفاءة عن مجموعات البيانات التي يبلغ عددها مليون أو مليار أو حتى تريليون متجه التي تعتمد عليها محركات البحث عن التشابه هو الفهرسة، وهي عملية تنظيم البيانات التي تسرّع البحث عن البيانات الضخمة بشكل كبير.

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

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

ماذا بعد ذلك؟

Blog_How we used semantic search to make our search 10x smarter_5.jpeg مدونة_كيف استخدمنا البحث الدلالي لجعل بحثنا أذكى 10 مرات_5.jpeg

كما هو موضح أعلاه، لا يوجد حل يناسب الجميع، فنحن نريد دائمًا تحسين أداء النموذج المستخدم للحصول على التضمينات.

أيضًا، من وجهة نظر تقنية، نريد تشغيل نماذج تعلم متعددة في نفس الوقت ومقارنة النتائج من التجارب المختلفة. شاهد هذه المساحة لمزيد من المعلومات عن تجاربنا مثل البحث عن الصور والبحث عن الفيديو.


المراجع:

  • مستندات ميشاردز :https://milvus.io/docs/v0.10.2/mishards.md
  • ميشاردز: https://github.com/milvus-io/milvus/tree/master/shards
  • ميلفوس-هيلم: https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus


تمت إعادة نشر مقالة المدونة هذه من: https://medium.com/tokopedia-engineering/how-we-used-semantic-search-to-make-our-search-10x-smarter-bd9c7f601821

اقرأ قصص المستخدمين الآخرين لمعرفة المزيد عن صنع الأشياء باستخدام ميلفوس.

Like the article? Spread the word

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