كيف نعمل على جودة وسرعة اختيار التوصيات

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

كيف نعمل على جودة وسرعة اختيار التوصيات

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

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

سأخبرك كيف حللنا هذه المشاكل.

اختيار المرشحين

كيف يمكن تقليل عدد المستندات قيد النظر بآلاف المرات في بضعة أجزاء من الثانية، دون أي تدهور فعلي في جودة التصنيف؟

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

لقد تطور مبدأنا في اختيار المرشحين، وفي الوقت الحالي وصلنا إلى مخطط متعدد المراحل:

كيف نعمل على جودة وسرعة اختيار التوصيات

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

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

خطوة ALS في وقت التشغيل

كيف تأخذ في الاعتبار تعليقات المستخدمين مباشرة بعد النقر؟

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

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

المبدأ العام لتشكيل وتحلل مصفوفة مستند المستخدمدعونا يكون لدينا مستخدمين ومستندات n. بالنسبة لبعض المستخدمين، فإن علاقتهم بمستندات معينة معروفة. ثم يمكن تمثيل هذه المعلومات كمصفوفة mxn: الصفوف تتوافق مع المستخدمين، والأعمدة تتوافق مع المستندات. وبما أن الشخص لم ير معظم المستندات، فستظل معظم خلايا المصفوفة فارغة، بينما سيتم ملء الخلايا الأخرى. لكل حدث (مثل، عدم الإعجاب، النقر) يتم توفير بعض القيمة في المصفوفة - ولكن دعونا نفكر في نموذج مبسط حيث يقابل الإعجاب الرقم 1، ويقابل عدم الإعجاب الرقم -1.

دعونا نحلل المصفوفة إلى قسمين: P (m x d) و Q (d x n)، حيث d هو بُعد تمثيل المتجه (عادةً ما يكون رقمًا صغيرًا). بعد ذلك، سيتوافق كل كائن مع متجه الأبعاد (للمستخدم - صف في المصفوفة P، للمستند - عمود في المصفوفة Q). ستكون هذه المتجهات بمثابة تضمينات للكائنات المقابلة. للتنبؤ بما إذا كان المستخدم سيحب المستند، يمكنك ببساطة مضاعفة التضمينات الخاصة به.

كيف نعمل على جودة وسرعة اختيار التوصيات
إحدى الطرق الممكنة لتحليل المصفوفة هي ALS (المربعات الصغرى البديلة). سنقوم بتحسين وظيفة الخسارة التالية:

كيف نعمل على جودة وسرعة اختيار التوصيات

هنا rui هو تفاعل المستخدم u مع المستند i، وqi هو متجه المستند i، وpu هو متجه المستخدم u.

ثم يتم العثور على متجه المستخدم الأمثل من وجهة نظر متوسط ​​مربع الخطأ (لمتجهات المستندات الثابتة) تحليليًا عن طريق حل الانحدار الخطي المقابل.

وهذا ما يسمى "خطوة ALS". وخوارزمية ALS نفسها هي أننا نقوم بالتناوب بإصلاح إحدى المصفوفات (المستخدمين والمقالات) وتحديث المصفوفة الأخرى، وإيجاد الحل الأمثل.

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

التصفية التعاونية الموزعة

كيف يمكن إجراء تحليل المصفوفة الموزعة التزايدية والعثور بسرعة على تمثيلات المتجهات للمقالات الجديدة؟

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

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

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

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

كيف نعمل على جودة وسرعة اختيار التوصيات

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

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

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

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

نقل إلى منطقة مجال آخر

كيفية استخدام تعليقات المستخدمين على المقالات النصية لإنشاء تمثيل متجه للفيديو؟

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

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

اختتام

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

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

المصدر: www.habr.com

إضافة تعليق