أنظمة التوصية2017متوسط11 دقيقة قراءة

التصفية التعاونية العصبية

Neural Collaborative Filtering

He, X. · Liao, L. · Zhang, H. · Nie, L. · Hu, X. · Chua, T.-S. — WWW

المشكلة

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

الإسهام

NCF: إطار عصبي عام يستبدل في تحليل المصفوفات ببنية عصبية قابلة للتعلّم. يقدّم ثلاثة نماذج — تحليل المصفوفات المُعمَّم (GMF) الذي يُعيد إنتاج تحليل المصفوفات التقليدي كحالة خاصة، (MLP) الذي يبني طبقات كثيفة فوق تضمينات ملتصقة لتعلّم تفاعلات لاخطية، وNeuMF الذي يدمج المسارين معاً. يُدرَّب النموذج مع اشتقاق العيّنات السلبية، وحقّق تفوّقاً على BPR وeALS في مجموعتَي MovieLens وPinterest.

الأثر

أثبت NCF أنّ الشبكات العصبية قادرة — بل ينبغي لها — أن تحلّ محل دوال التفاعل المصمَّمة يدوياً في أنظمة التوصية. فتح هذا العمل الباب أمام نماذج التوصية العميقة — من DeepFM وWide & Deep إلى BERT4Rec وDIN — وأحدث تحوّلاً في المجال من نماذج الخطية إلى بنى تتعلّم من طرف إلى طرف. اليوم، يكاد كل نظام توصية تجاري يعتمد على دوال تفاعل عصبية تنحدر من هذه الفكرة.

تخيّل أنك تدير مطعماً وتريد أن تتنبّأ بالأطباق التي سيطلبها كل زبون. الأسلوب القديم — تحليل المصفوفات — يختصر كل زبون في قائمة أرقام تعبّر عن ذوقه: حبّ التوابل 0.8، حبّ الحلويات 0.3، وهكذا. ولكل طبق أرقام مقابلة. حين تريد تخمين ما إذا كان زبون سيحبّ طبقاً معيّناً، تضرب هذه الأرقام وتجمعها. الطريقة تعمل بشكل معقول، لكنها تُفوّت التفاصيل الدقيقة: مثلاً، قاعدة «يحب الحار إلا في الحلويات» لا يمكن لعملية ضرب بسيطة أن تعبّر عنها.

ما يفعله NCF هو أنه يستبدل عملية الضرب تلك بـلجنة تذوّق ذكية: تأخذ ملفّ الزبون وملفّ الطبق، تمرّرهما عبر طبقات متعاقبة تتعلّم أنماط الذوق، ثم تُخرج درجة توافق دقيقة. هذه اللجنة قادرة على تعلّم أي قاعدة ذوقية معقّدة — حتى تلك التي يستحيل على عملية الضرب أن تلتقطها.

التحدّي: كيف تتعلّم من الصمت؟

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

الأسلوب السائد كان تحليل المصفوفات: تمثّل كل مستخدم بمتجه pu\mathbf{p}_u وكل عنصر بمتجه qi\mathbf{q}_i، ثم تتنبّأ بالتفاعل عبر بينهما: y^ui=puTqi\hat{y}_{ui} = \mathbf{p}_u^T \mathbf{q}_i. انتشر هذا الأسلوب بعد مسابقة Netflix، وطوّره BPR (الترتيب البايزي المُخصَّص) ليعمل مع التغذية الراجعة الضمنية.

افتح في المختبر
التغذية الراجعة الصريحة تحمل إشارات واضحة (تقييمات). أمّا الضمنية فلا تُسجّل سوى التفاعلات — والأصفار فيها غامضة المعنى.
تستيقظ التجربة عند وصولك…

لماذا يصطدم الضرب النقطي بسقف؟

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

المستخدم u4u_4 أقرب في سلوكه إلى u1u_1، ثم u3u_3، ثم u2u_2. لكن بمجرد تثبيت مواقع u1u_1 وu2u_2 وu3u_3 في الفضاء الكامن، لن تجد موقعاً لـu4u_4 يحافظ على ترتيبات التشابه الثلاثة في آنٍ واحد. الضرب النقطي يفرض هندسة أكثر جموداً من أن تستوعب أنماط التفاعل الحقيقية — تخيّل أنك تحاول رسم خريطة علاقات صداقة على ورقة مسطّحة، بينما العلاقات الفعلية متشابكة عبر أبعاد كثيرة.

افتح في المختبر
جرّب وضع المستخدم 4 في الفضاء الكامن. أينما وضعته، ستجد أنّ ترتيب تشابه واحداً على الأقل يُنتهك — الضرب النقطي أكثر جموداً مما يلزم.
تستيقظ التجربة عند وصولك…

إطار NCF: دَع الشبكة تتعلّم دالة التفاعل

الفكرة المحورية في NCF بسيطة لكنها عميقة الأثر: استبدل الضرب النقطي الثابت بـشبكة عصبية تتعلّم من البيانات نفسها. بدلاً من أن تفترض أنّ توافق المستخدم مع العنصر يُحسب بضرب نقطي، اترك الشبكة تكتشف بنفسها أي دالة — خطية أو لاخطية — تُعطي أفضل تنبؤ.

يمرّ الإطار بأربع مراحل. أولاً، يتحوّل معرّف المستخدم ومعرّف العنصر إلى متجهات . ثانياً، تُسقط طبقة هذه المتجهات المتفرقة إلى متجهات كامنة كثيفة. ثالثاً — وهنا جوهر الأمر — تمرّ التضمينات عبر طبقات التصفية التعاونية العصبية، وهي الجزء الذي يختلف من نموذج فرعي لآخر. رابعاً، تُنتج طبقة الإخراج درجة تنبؤ بين 0 و1.

y^ui=f(pu,qiΘ)\hat{y}_{ui} = f(\mathbf{p}_u, \mathbf{q}_i \mid \Theta)
تنبؤ NCF — دالة مُتعلَّمة تحلّ محل الضرب النقطيبدلاً من p·q الثابتة، يمكن لـf أن تكون أي بنية عصبية بمعاملات Θ. هذه هي الفكرة المحورية: دَع البيانات هي التي تُحدّد شكل دالة التفاعل.
افتح في المختبر
انقر على كل طبقة لمعرفة دورها. طبقة التضمين تحوّل المعرّفات إلى متجهات، وطبقات التصفية التعاونية العصبية تتعلّم التفاعل، وطبقة الإخراج تتنبّأ باحتمال التفاعل.
تستيقظ التجربة عند وصولك…

ثلاثة نماذج فرعية: GMF وMLP وNeuMF

NCF إطار عامّ وليس نموذجاً واحداً. تطرح الورقة ثلاثة نماذج فرعية تختلف في الطريقة التي تدمج بها تضمينات المستخدم والعنصر:

تحليل المصفوفات المُعمَّم (GMF) يأخذ بين متجهَي تضمين المستخدم والعنصر، ثم يمرّر الناتج عبر طبقة إخراج بأوزان قابلة للتعلّم مع . حين تكون كل الأوزان مساوية للواحد ولا توجد دالة تنشيط، يتحوّل GMF إلى تحليل المصفوفات التقليدي بالضبط. لكنّ الأوزان القابلة للتعلّم تتيح لكل بُعد كامن أن يُسهم بقدر مختلف — بعض الأبعاد أهمّ من غيرها في تحديد التوافق.

البيرسبترون متعدد الطبقات (MLP) يُلصق تضمينَي المستخدم والعنصر في متجه واحد ويمرّره عبر سلسلة من بتنشيط . كل طبقة تستخلص أنماط تفاعل ذات مرتبة أعلى من سابقتها. البنية تأخذ شكل برج يضيق تدريجياً (مثلاً 64←32←16←8)، وهذا التضييق يجبر الشبكة على تكثيف التفاعلات المعقّدة في إشارة تنبؤ مركّزة.

تحليل المصفوفات العصبي (NeuMF) يجمع بين المسارين: يُشغّل GMF وMLP بالتوازي بمجموعتَي تضمين مستقلّتين، ثم يُلصق مخرجاتهما الأخيرة ويمرّر المتجه الموحّد عبر طبقة تنبؤ نهائية. بهذا الشكل يلتقط النموذج خطية تحليل المصفوفات ولاخطية الشبكات العميقة في آنٍ واحد.

افتح في المختبر
بدّل بين GMF وMLP وNeuMF لترى كيف يعالج كل نموذج تضمينات المستخدم والعنصر بطريقة مختلفة.
تستيقظ التجربة عند وصولك…

GMF: حين يدخل تحليل المصفوفات عصر الشبكات العصبية

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

y^ui=σ ⁣(hT(puqi))\hat{y}_{ui} = \sigma\!\left(\mathbf{h}^T (\mathbf{p}_u \odot \mathbf{q}_i)\right)
GMF — ضرب عنصري بأوزان مُتعلَّمة⊙ هو الضرب عنصراً بعنصر. h متجه أوزان مُتعلَّم. σ هي سيغمويد. حين يساوي h واحداً (كل عناصره واحدات) وتكون σ دالة الهوية، نحصل على تحليل المصفوفات التقليدي تماماً.

MLP: تعلّم التفاعلات اللاخطية

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

البنية البرجية تضيق تدريجياً. لو كانت عوامل التنبؤ 8 مثلاً، فإنّ طبقات MLP قد تكون 32←16←8 بحجم تضمين 16 لكل جانب. هذا الاختناق يُجبر الشبكة على تكثيف أنماط التفاعل الأكثر فائدةً للتنبؤ.

y^ui=σ ⁣(hTϕL(ϕ2(ϕ1([pu;qi]))))\hat{y}_{ui} = \sigma\!\left(\mathbf{h}^T \, \phi_L(\ldots \phi_2(\phi_1([\mathbf{p}_u;\,\mathbf{q}_i])))\right)
تنبؤ MLP — طبقات كثيفة متراكبة فوق تضمينات ملتصقة[p;q] هو الإلصاق. كل φ طبقة كثيفة مع ReLU. عبر L طبقة تتجرّد فيها السمات تدريجياً، تُضغط المعلومات إلى تنبؤ نهائي عبر h وسيغمويد.

NeuMF: الجمع بين أفضل ما في المسارين

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

تُلصق الطبقتان الأخيرتان من كلا المسارين ويُغذّى المتجه الموحّد لعصبون إخراج وحيد بتنشيط سيغمويد. α يتحكّم في موازنة الإسهام بين المسارين عند التهيئة بـ.

y^ui=σ ⁣(hT[puGqiGGMF;  ϕL((puM,qiM))MLP])\hat{y}_{ui} = \sigma\!\left(\mathbf{h}^T \left[\underbrace{\mathbf{p}_u^G \odot \mathbf{q}_i^G}_{\text{GMF}} ;\; \underbrace{\phi_L(\ldots(\mathbf{p}_u^M, \mathbf{q}_i^M))}_{\text{MLP}}\right]\right)
NeuMF — دمج GMF وMLPمساران متوازيان بتضمينات منفصلة (G لـGMF وM لـMLP). تُلصق مخرجاتهما وتُسقط على درجة نهائية. النموذج يجمع بين نمذجة التفاعل الخطية واللاخطية.
افتح في المختبر
تابع كيف يسري زوج مستخدم-عنصر عبر مسارَي GMF وMLP ثم يندمجان في تنبؤ نهائي واحد.
تستيقظ التجربة عند وصولك…

التدريب: الإنتروبيا التقاطعية الثنائية واشتقاق العيّنات السلبية

من القرارات التصميمية المفصلية في NCF أنه يتعامل مع مهمة التوصية باعتبارها تصنيفاً ثنائياً وليس انحداراً. لكل تفاعل مُشاهَد (u,i)(u, i) تكون التسمية 1. أمّا الأزواج التي لم يُشاهَد فيها تفاعل، فتُسحب منها عيّنات عشوائية بتسمية 0 لتكون أمثلة سلبية — وهذا ما يُعرف بـ. عدد العيّنات السلبية لكل عيّنة إيجابية مُعامل قابل للضبط، ووجدت الورقة أنّ النسبة المثلى تتراوح بين 3 و6.

هي الإنتروبيا التقاطعية الثنائية (خسارة اللوغاريتم)، وهي الخيار الطبيعي هنا لأنّ النموذج يُخرج احتمال تفاعل المستخدم uu مع العنصر ii. هذا أنسب من مربّع الخطأ حين يكون الهدف ثنائياً، لأنّ الإنتروبيا التقاطعية تُعاقب التنبؤات الخاطئة الواثقة بشدّة أكبر بكثير.

L=(u,i)Y+logy^ui(u,j)Ylog(1y^uj)L = -\sum_{(u,i) \in \mathcal{Y}^+} \log \hat{y}_{ui} - \sum_{(u,j) \in \mathcal{Y}^-} \log(1 - \hat{y}_{uj})
الإنتروبيا التقاطعية الثنائية مع اشتقاق العيّنات السلبيةY⁺ = التفاعلات المُشاهَدة (الإيجابيات)، Y⁻ = أزواج غير مُشاهَدة مُشتقَّة (السلبيات). الحدّ الأول يدفع التنبؤات نحو 1 للإيجابيات، والثاني يدفعها نحو 0 للسلبيات.
افتح في المختبر
انقر على الخلايا لتشاهد كيف يُنشئ اشتقاق العيّنات السلبية أزواج تدريب من مصفوفة تفاعل متفرّقة.
تستيقظ التجربة عند وصولك…

التدريب المسبق: تمهيد NeuMF للانطلاق

تدريب NeuMF من تهيئة عشوائية ليس سهلاً، لأنّ النموذج غير محدّب ومليء بالنقاط . الحلّ الذي تقترحه الورقة: درِّب GMF وMLP كلاً على حدة باستخدام محسِّن Adam أولاً، ثم خُذ المعاملات التي تعلّمها كلّ منهما واستخدمها لتهيئة NeuMF. الأوزان الوحيدة التي تبدأ من الصفر هي أوزان طبقة الإخراج في النموذج المدمج، وتُهيَّأ كتركيبة موزونة يتحكّم فيها المعامل α (يُضبط عند 0.5 لإسهام متساوٍ من كل مسار).

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

الفكرة نفسها في شيفرة برمجية

NeuMF — التمرير الأمامي الكاملpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-np.clip(x, -500, 500)))

def relu(x):
    return np.maximum(0, x)

def neumf_predict(user_id, item_id, params):
    """التمرير الأمامي لـ NeuMF: تشغيل GMF + MLP بالتوازي."""
    # --- مسار GMF ---
    p_gmf = params['user_emb_gmf'][user_id]   # تضمين المستخدم لـ GMF
    q_gmf = params['item_emb_gmf'][item_id]   # تضمين العنصر لـ GMF
    gmf_out = p_gmf * q_gmf                    # ضرب عنصري

    # --- مسار MLP ---
    p_mlp = params['user_emb_mlp'][user_id]
    q_mlp = params['item_emb_mlp'][item_id]
    x = np.concatenate([p_mlp, q_mlp])         # إلصاق التضمينات
    for W, b in params['mlp_layers']:
        x = relu(W @ x + b)                    # طبقة كثيفة + ReLU

    # --- الدمج ---
    concat = np.concatenate([gmf_out, x])      # دمج المسارين
    score = sigmoid(params['h'] @ concat)       # التنبؤ النهائي
    return score  # احتمال التفاعل

ما الذي أظهرته التجارب؟

اختبرت الورقة نماذجها على مجموعتَي بيانات: MovieLens 1M (مليون تقييم من 6 آلاف مستخدم على 4 آلاف فيلم، حُوِّلت إلى تغذية راجعة ضمنية) وPinterest (1.5 مليون تفاعل من 55 ألف مستخدم على 9,900 صورة، وهي ضمنية بطبيعتها). مقاييس التقييم كانت معدّل الإصابة (Hit Rate) ومقياس NDCG عند أعلى K عنصر، بأسلوب «اترك واحداً للاختبار» (leave-one-out).

جاءت النتائج واضحة ومتّسقة: NeuMF تفوّق على كل خطوط الأساس في كلتا المجموعتين. ترتيب الأداء ثابت دائماً: NeuMF > MLP > GMF > BPR > eALS > ItemKNN. كلّما زاد عمق بنية البيرسبترون متعدد الطبقات تحسّن الأداء، وهذا يؤكد أنّ إضافة طبقات لاخطية تُحدث فرقاً حقيقياً. نسبة اشتقاق العيّنات السلبية مهمّة أيضاً — عيّنة سلبية واحدة لكل إيجابية أضعفت الأداء، في حين أنّ 3 إلى 6 عيّنات حقّقت التوازن الأفضل.

والأهمّ من ذلك أنّ استراتيجية التدريب المسبق حسّنت أداء NeuMF باستمرار مقارنةً بالتهيئة العشوائية، مما يُثبت جدوى التدريب على مرحلتين.

لماذا غيَّر NCF مسار أبحاث التوصية؟

  1. 2009

    BPR — الترتيب البايزي المُخصَّص

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

  2. 2017

    NCF — التصفية التعاونية العصبية

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

  3. 2018

    شبكة الاهتمام العميق (DIN)

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

  4. 2019

    BERT4Rec

    طبّق فكرة نمذجة اللغة المُقنَّعة من BERT على التوصية التسلسلية — بإخفاء عناصر من سجلّ المستخدم والتنبؤ بها اعتماداً على السياق ثنائي الاتجاه.

  5. 2020

    التصفية التعاونية بالشبكات البيانية العصبية

    وسّع أفكار NCF عبر نشر التضمينات على الرسم البياني لتفاعلات المستخدمين والعناصر، ممّا مكّن من التقاط أنماط ترابط من مراتب أعلى.

فكرة NCF — أنّ دالة التفاعل ينبغي أن تُتعلَّم — فكرة بسيطة، لكنها أعادت رسم ملامح مجال بأكمله. كل نموذج توصية رئيسي منذ 2017، من DIN إلى BERT4Rec، يقف على هذا الأساس.

المرجعHe, Liao, Zhang, Nie, Hu, Chua. Neural Collaborative Filtering. WWW, 2017.

مصطلحات هذه الورقة