كيف نتوقع المستقبل في بحث Yandex: من إصلاحات الأخطاء إلى استعلامات الاكتشاف

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

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



ماذا يريد المستخدم؟


دعونا نرى كيف تساعد تقنيات Yandex في حل المشكلات ، باستخدام مثال مستخدم وهمي. افترض أنه طبع "حفظ التذكرة" في مربع البحث. ماذا يريد ان يجد؟ لمعرفة المزيد عن تراكم التذاكر ، أم أنه كان على خطأ؟



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

لذا ، أدخل مستخدمنا الخيالي طلب "شراء تذكرة". عند هذه النقطة ، يبدأ دور sjest.(أو اقتراحات البحث). Sajest يساعد المستخدم على صياغة الطلب ، لإكماله بشكل صحيح.



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

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

تم إكمال هذه المهمة ، ولكن لا يزال لدى المستخدم أسئلة. ما الذي سيبحث عنه بعد ذلك؟ ربما يريد أن يعرف كيفية الوصول إلى المعرض؟ نعم ، يطبع Lavrushinsky per. 10 للتحقق من العنوان.



هل يمكننا توقع هذا الطلب؟ نعم. ونحن نقوم بهذا منذ بعض الوقت. توجد مثل هذه الكتلة - "يُطلب أيضًا" في نهاية المشكلة. يعرض الاستعلامات التي يسألها الناس عادة بعد الدخول في حقل البحث. في ذلك سنرى طلبنا بعنوان معرض تريتياكوف.



نعمل على زيادة احتمالية الطلب بناءً على طلب مستخدم سابق. أكمل النظام المهمة الثانية - توقع الطلب التالي .

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



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

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



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

كيف تعمل؟


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

1. توصيات مفيدة! بالطبع ، نريد الطلبات التي نوصي بها للمستخدم لتناسب اهتماماته. يجب أن تكون مفيدة وذات صلة.

2. قابلية التوسع. نأمل أن يكون النظام جيدًا: سيكون هناك المزيد والمزيد من المستخدمين ، وسيزداد عدد الطلبات. ونريد زيادة التغطية لتلك التي يمكننا تقديم توصيات بشأنها.

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

بعد أن قررنا رغباتنا ، لنرى كيف يمكنك تحقيقها.

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



يمكن إجراء التصفية بطرق مختلفة. في Yandex ، نستخدم kNN (أقرب جيران ك) لهذا الغرض- خوارزمية التصنيف الأساسية في التعلم الآلي ، والمعروفة باسم "البحث عن أقرب جار". باستخدام هذه الخوارزمية ، نريد تصفية قاعدة البيانات: حدد أقرب الاستعلامات إلى ما قد يثير اهتمام المستخدم. للقيام بذلك ، نريد مقارنة طلب المستخدم وتلك الطلبات التي نحن على استعداد للتوصية بها في مساحة المتجه.

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



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

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

كيف نحصل على احتمال النقرة التالية؟ نظامنا يعمل بالفعل ، لذلك نقوم ببساطة بجمع التعليقات من المستخدمين - وبالتالي نقوم تدريجياً بتحسين نظام التوصيات الخاص بنا.



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



تذكر الآن أننا صاغنا رغبات عامة لنظام التوصيات الخاص بنا. ودعنا نرى كيف يمكننا تنفيذها في البنية الناتجة.

على سبيل المثال ، أردنا قابلية التوسع من حيث تحسين القاعدة. طريقة التنفيذ لدينا لديها جميع الخصائص اللازمة لمثل هذا التحجيم. لا يجب أن نحتفظ بالقاعدة بأكملها في الذاكرة: بمجرد أن تتسع القاعدة كثيرًا بحيث لا تتناسب مع مجموعة واحدة ، يمكننا تقسيمها إلى قسمين. وإذا مررنا سابقًا بمجموعة واحدة مع kNN واخترنا أفضل 100 ، والتي سنصنفها ، الآن يمكننا أن نذهب إلى مجموعتين بشكل منفصل ونختار ، على سبيل المثال ، أفضل 50 في كل منها. أو ، بشكل عام ، تقسيم المجموعات حسب الموضوعات والمشي مع KNN فقط على الموضوعات المطلوبة.

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

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

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



أين يعمل؟


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



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

All Articles