الوحدة 3 — تفكيك المصفوفات وSVD
تصفية الجوار جوابها حسابيّ: نقارن كلّ اثنين. تفكيك المصفوفات جوابه بنيويّ: نُفسّر المصفوفة كلّها بعوامل قليلة خفيّة. هذه القفزة المفهوميّة رفعت جودة التوصية بشكل ملحوظ في جائزة Netflix، وهي الأساس النظريّ لكلّ ما سيأتي في النماذج العميقة (الوحدة 6).
الفكرة: عوامل كامنة
نفترض أنّ سلوك التقييم يُلخّصه عدد قليل من الأبعاد المخفيّة. لنقل عوامل. لكلّ مستخدم متجه يقول: كم يُقدّر هذا المستخدم كلّ بُعد (الحدّة، الصعوبة، الطابع العمليّ، إلخ. من دون أن نُسمّي هذه الأبعاد أو نعرفها مسبقًا). ولكلّ عنصر متجه يقول: كم يُعبّر هذا العنصر عن كلّ بُعد.
يُقدَّر تقييم للعنصر بالضرب النقطيّ:
نُطلق على المتجهَين اسم العوامل الكامنة لأنّها لا تُلاحَظ في البيانات؛ ينبثقان من الأمثل. النموذج يُحوّل كلّ مصفوفة حجمها إلى ضرب مصفوفتَي () و ():
عدد صغير عادةً (10 إلى 200)، وهذا التخفيض للأبعاد هو ما يُعمّم إلى الخانات الفارغة.
لماذا لا يكفي SVD الرياضيّ
في الجبر الخطّيّ، لكلّ مصفوفة تفكيك (Singular Value Decomposition). يبدو الحلّ جاهزًا: نبتر بعد أوّل قيم مفردة ونحصل على أفضل تقريب رتبة بمعيار Frobenius. لكنّ هذا لا يعمل هنا لسببَين متكاملَين.
الأوّل: SVD الكلاسيكيّ يفترض معرفة كلّ الخانات. نحن نجهل 95% منها. سدّها بأصفار يقول للنموذج «كلّ ما لم يُسجَّل يستحقّ صفرًا»، وهذا مضاد للحقيقة.
الثاني: لا يوجد تنظيم، فأيّ ضجيج في التقييمات القليلة المعروفة يُعامَل كإشارة.
الحلّ الذي غيّر الميدان: بدل التفكيك المغلق، نبحث عن و اللتَين تُدنيان الخطأ على الخانات المعروفة فقط، مع تنظيم. الطريقة اقترحها Simon Funk في مدوّنة عام 2006 خلال مسابقة Netflix، وأصبحت الأساس المعياريّ.
دالّة الخسارة وFunkSVD
الدالّة التي نُدنيها: