تحليل القيمة الفردية مقابل عامل المصفوفة في أنظمة التوصية

في الآونة الأخيرة ، بعد مشاهدة فصل أنظمة التوصية في دورة التعلم الآلي للبروفيسور أندرو نج ، وجدت نفسي منزعجًا جدًا من عدم فهم كيفية عمل عامل المصفوفة.

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

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

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

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

أنظمة التوصية

أنظمة التوصية (RS) هي مجرد طرق آلية للتوصية بشيء لشخص ما. يتم استخدام هذه الأنظمة على نطاق واسع من قبل شركات التجارة الإلكترونية وخدمات البث والمواقع الإخبارية. يساعد على تقليل احتكاك المستخدمين عند محاولة العثور على شيء يحلو لهم.

من المؤكد أن RS ليست شيئًا جديدًا: فقد ظهرت منذ عام 1990 على الأقل. في الواقع ، يمكن أن يُعزى جزء من الضجيج الحديث عن تعلم الآلة إلى الاهتمام بـ RS. في عام 2006 ، حققت Netflix نجاحًا كبيرًا عندما رعت مسابقة للعثور على أفضل فئة RS لأفلامها. كما سنرى قريبًا ، يرتبط هذا الحدث بفوضى التسمية التي تلت ذلك.

تمثيل المصفوفة

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

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

عامل المصفوفة

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

يمكن تمثيل هذه العملية بصيغة خطية من النوع التالي:

حيث xₘ عبارة عن متجه عمود مع قيم ميزات الفيلم m و θᵤ هو متجه عمود آخر مع الأوزان التي يعطيها المستخدم u لكل ميزة. كل مستخدم لديه مجموعة مختلفة من الأوزان ولكل فيلم مجموعة مختلفة من القيم لميزاته.

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

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

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

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

لتوضيح الأمور ، يمكننا فصل الحرفين و x ووضعهما في المصفوفات الخاصة بهم (مثل P و Q ). هذا هو عامل المصفوفة بشكل فعال ، ومن هنا جاء الاسم الذي استخدمه البروفيسور نج.

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

تحليل القيمة الفردية

أدخل تحليل القيمة الفردية (SVD). يعد SVD طريقة رائعة لتحليل مصفوفة إلى ثلاث مصفوفات أخرى ( A = UΣVᵀ ). تضمن طريقة عمل SVD أن تحمل هذه المصفوفات الثلاثة بعض الخصائص الرياضية الرائعة.

هناك العديد من التطبيقات لـ SVD. أحدها هو تحليل المكونات الرئيسية (PCA) ، والذي يعمل فقط على تقليل مجموعة البيانات ذات البعد n إلى البعد k ( k <n ).

لن أقدم لك أي تفاصيل أخرى عن SVDs لأنني لا أعرف نفسي. النقطة المهمة هي أنه ليس نفس الشيء كما فعلنا مع عامل المصفوفة. أكبر دليل هو أن SVD ينشئ 3 مصفوفات بينما ينشئ Funk's Matrix Factorization 2 فقط.

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

تحاول خوارزميات عامل المصفوفة المستخدمة لأنظمة التوصية العثور على مصفوفتين: P ، Q مثل P * Q تطابق قيم KNOWN لمصفوفة الأداة. ظهر هذا المبدأ في ورقة SVD ++ الشهيرة بعنوان "Factorization يلتقي الحي" والتي استخدمت للأسف اسم "SVD ++" لخوارزمية ليس لها أي علاقة على الإطلاق بـ SVD .

للسجل ، أعتقد أن Funk ، وليس مؤلفي SVD ++ ، اقترح أولاً عامل المصفوفة المذكور لأنظمة التوصية. في الواقع ، يعد SVD ++ ، كما يوحي اسمه ، امتدادًا لعمل Funk.

يعطينا Xavier Amatriain صورة أكبر:

لنبدأ بالإشارة إلى أن الطريقة التي يشار إليها عادةً باسم "SVD" والتي يتم استخدامها في سياق التوصيات لا تتحدث بدقة عن التحليل الرياضي للقيمة المفردة لمصفوفة ، بل هي طريقة تقريبية لحساب التقريب منخفض الرتبة للمصفوفة عن طريق تقليل خسارة الخطأ التربيعية. الطريقة الأكثر دقة ، وإن كانت أكثر عمومية ، لتسمية هذا ستكون عامل المصفوفة. تم تقديم الإصدار الأولي من هذا النهج في سياق جائزة Netflix بواسطة Simon Funk في مدونته الشهيرة Try This at Home. من المهم أن نلاحظ أن نهج "SVD الحقيقي" قد تم تطبيقه بالفعل على نفس المهمة قبل سنوات ، دون نجاح عملي كبير.

تحتوي ويكيبيديا أيضًا على معلومات مماثلة مدفونة في مقالة تحليل المصفوفة (أنظمة التوصية):

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

كي تختصر:

1. SVD هو أسلوب رياضي معقد إلى حد ما يقوم بتحليل المصفوفات إلى ثلاث مصفوفات جديدة ولها تطبيقات عديدة ، بما في ذلك PCA و RS.

2. طبق Simon Funk إستراتيجية ذكية جدًا في مسابقة Netflix لعام 2006 ، حيث قام بتحويل المصفوفة إلى مجموعتين أخريين واستخدام النسب المتدرج للعثور على القيم المثلى للميزات والأوزان. إنه ليس SVD ، لكنه استخدم هذا المصطلح على أي حال لوصف أسلوبه.

3. المصطلح الأكثر ملاءمة لما فعله فونك هو عامل المصفوفة.

4. بسبب النتائج الجيدة والشهرة التي تلت ذلك ، لا يزال الناس يطلقون على تلك التقنية اسم SVD لأنه ، حسنًا ، هكذا أطلق عليها المؤلف.

آمل أن يساعد هذا في توضيح الأمور قليلاً.