كيف تعلمنا أن نوصي بالأفلام ولماذا لا تعتمد فقط على التقييمات



تخيل أنك تريد قضاء المساء في مشاهدة فيلم ، ولكن لا تعرف أيهما تختار. غالبًا ما يجد مستخدمو Yandex أنفسهم في نفس الموقف ، لذلك يضع فريقنا توصيات يمكن العثور عليها في Search and Air. يبدو أن هذا معقد: نأخذ تقييمات المستخدمين ، وبمساعدتهم ندرب السيارة للعثور على الأفلام التي من المحتمل أن تعطي 5 نقاط ، نحصل على قائمة جاهزة من الأفلام. لكن هذا النهج لا يعمل. لماذا ا؟ هذا ما سأخبرك به اليوم.

القليل من التاريخ. في عام 2006 ، أطلقت Netflix مسابقة تعلم الآلة لجائزة Netflix. إذا نسيت فجأة ، فإن الشركة لم تبث بعد على الإنترنت ، ولكن استأجرت أفلامًا على DVD. ولكن حتى ذلك الحين ، كان من المهم بالنسبة لها أن تتوقع تصنيف المستخدم من أجل التوصية بشيء له. لذا ، فإن جوهر المسابقة: للتنبؤ بتصنيفات المشاهدين أفضل بنسبة 10٪ (وفقًا لمقياس RMSE) من Cinematch ، نظام توصيات Netflix. كانت هذه واحدة من أولى المسابقات الجماعية من هذا النوع. أدت الفائدة إلى زيادة مجموعة البيانات الضخمة (أكثر من 100 مليون تصنيف) ، بالإضافة إلى جائزة قدرها مليون دولار.

انتهت المسابقة في عام 2009. وصلت فرق BellKor Pragmatic Chaos و The Ensemble إلى خط النهاية بنفس النتيجة (RMSE = 0.8567) ، لكن The Ensemble احتلت المركز الثاني لأنها أرسلت الحل بعد 20 دقيقة من المنافسين. يمكن العثور على النتائج والعمل هنا . لكن الشيء الأكثر إثارة للاهتمام هو مختلف. إذا كنت تعتقد أن القصص المتكررة في المؤتمرات المتخصصة ، لم تظهر الخوارزميات الفائزة في الإنتاج في خدمة بث الفيديو التي تم إطلاقها قريبًا. لا يمكنني التحدث عن أسباب قرارات الآخرين ، لكني سأخبركم لماذا فعلنا الشيء نفسه.

التصنيف الشخصي


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



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

أسئلة عينة في تولوك


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

مشكلة الأداة


عندما يبحث المستخدم عن فيلم معين (أو يرغب في استئجار قرص DVD محدد) ، يجب أن تتوقع الخدمة تصنيف هذا الفيلم بعينه. تم حل هذه المشكلة بالضبط في مسابقة جائزة Netflix ، حيث تم استخدام مقياس RMSE. لكن التوصيات تحل مشكلة مختلفة: لا تحتاج إلى تخمين الصف ، ولكن للعثور على فيلم ستتم مشاهدته في النهاية. ويقوم مقياس RMSE بعمل ضعيف لهذا. على سبيل المثال ، عقوبة توقع تقييم 2 بدلاً من 1 هي نفسها تمامًا مثل 5 بدلاً من 4. ولكن لا يجب أن يوصي نظامنا أبدًا بالأفلام التي يضعها المستخدم 2! تعتبر المقاييس المستندة إلى القائمة أكثر ملاءمة لهذه المهمة ، مثل Precision @ K أو Recall @ K أو MRR أو NDCG. لا يسعني إلا أن أخبركم بالمزيد عنها (ولكن إذا لم تكن مهتمًا بالمقاييس ، فقط تخطي الفقرة التالية).

لنبدأ بالمقياس.MRR (يعني رتبة متبادلة). سنلقي نظرة على الموضع في الترتيب الذي سيكون الفيلم الذي تفاعل معه المستخدم (على سبيل المثال ، شاهد أو أشاد) في فترة الاختبار. مقياس MRR هو الموضع العكسي لمتوسط ​​المستخدم لهذا الفيلم. بمعنى آخرMRR=1|U|u=1|U|1ranku. يقوم هذا المقياس ، على عكس RMSE ، بتقييم القائمة بأكملها ، ولكن للأسف ، لا ينظر إلا إلى العنصر الأول الذي تم تخمينه. ومع ذلك ، من السهل تعديل المقياس للتخلص من هذا العيب. يمكننا حساب مجموع المواقف العكسية لجميع الأفلام التي تفاعل معها المستخدم. يُطلق على هذا المقياس متوسط ​​تصنيف الضرب التبادلي. يأخذ هذا المقياس في الاعتبار جميع الأفلام التي تم تخمينها في الإصدار. لاحظ أن الموضع k في العائد يتلقى وزنًا 1 / k لفيلم خمن ووزن 0 لفيلم آخر. غالبًا ما يتم استخدام 1 / log (k) بدلاً من 1 / k: من المرجح أن يتوافق هذا مع احتمالية تمرير المستخدم إلى الموضع k. النتيجة هي مقياس DCG (مكسب تراكمي مخفض)DCG=1|U|u=1|U|pos=1Ngainposmax(1,log(pos)). لكن مساهمة مستخدمين مختلفين في المقياس مختلفة: بالنسبة لشخص ما خمنت جميع الأفلام ، بالنسبة لشخص لم نخمن أي شيء. لذلك ، كقاعدة عامة ، يتم تطبيع هذا المقياس. قسّم DCG لكل مستخدم إلى أفضل تصنيف DCG لذلك المستخدم. يسمى المقياس الناتج NDCG (الكسب التراكمي المخصوم المعياري). يتم استخدامه على نطاق واسع لتقييم جودة الترتيب.

لذلك ، كل مهمة لها مقياسها الخاص. لكن المشكلة التالية ليست واضحة.

مشكلة الاختيار


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

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



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

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

كيف تعمل توصياتنا


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

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

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

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

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

التوصية DSSM


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

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



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

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

استنتاج


الآن توصياتنا متاحة بالفعل في بحثنا (على سبيل المثال ، حسب الطلب [ماذا ترى] ) ، في خدمة Yandex.Air ، ويتم استخدام نسخة معدلة من هذه التقنية أيضًا في Yandex.Stations. لكن هذا لا يعني أنه يمكننا الاسترخاء. نحن ندرب باستمرار نماذج جديدة ، ونطبق المزيد والمزيد من البيانات ، ونجرب مناهج جديدة للتدريب ومقاييس جودة جديدة. في رأيي ، كلما كبرت المنطقة ، زادت صعوبة تطويرها. ولكن هذا هو الاهتمام الرئيسي للمتخصصين.

All Articles