أنظمة التوصية2018متقدم11 دقيقة قراءة
PinSage: شبكات التفاف بيانية لأنظمة التوصية على نطاق الويب
PinSage: Graph Convolutional Neural Networks for Web-Scale Recommender Systems
Ying, R. · He, R. · Chen, K. · Eksombatchai, P. · Hamilton, W. L. · Leskovec, J. — KDD
المشكلة
شبكات الالتفاف البيانية حققت نتائج مبهرة في البحث الأكاديمي، لكن المشكلة الحقيقية كانت التوسّع: كيف تُشغّل هذه الشبكات على رسم بياني فيه مليارات العُقد وعشرات المليارات من الأضلاع؟ الطرق التقليدية تحتاج مصفوفة لابلاس الكاملة أثناء — وهذا مستحيل عملياً حين تتعامل مع 3 مليارات عقدة. GraphSAGE خفّف المشكلة بأخذ عيّنات من الجيران، لكنه ظلّ يفترض أن الرسم البياني كاملاً يتسع في ذاكرة GPU. وعلى الجانب الآخر، الاعتماد على المحتوى وحده — كالسمات البصرية والتعليقات النصية — يضيّع معلومات العلاقات بين العناصر: صورة حاجز سرير تشبه بصرياً سياج حديقة، لكن جيرانها في الرسم البياني يكشفون أنها تنتمي إلى أثاث غرف النوم.
الإسهام
PinSage: شبكة التفاف بيانية قابلة للتوسّع تبني تضمينات لكل عقدة بدمج بنية الرسم البياني مع سمات المحتوى. أبرز ابتكاراتها: تحديد الجوار عبر بدلاً من التوسّع الثابت بعدد القفزات، ممّا يعطي كل جار وزن أهمية حقيقي (تحسّن 46%). ثم بنية مُنتِج-مستهلِك تفصل أخذ العيّنات على CPU عن التدريب على GPU. وتدريب بالمنهج التدريجي يُصعّب الأمثلة السلبية تدريجياً (تحسّن 12%). وأخيراً أنبوب لتوليد تضمينات 3 مليارات عقدة دفعة واحدة. عند نشره في Pinterest حقّق تحسّناً بنسبة 150% في معدل الإصابة مقارنة بأفضل خط مرجعي.
الأثر
PinSage كان أول نشر صناعي حقيقي لشبكة عصبية بيانية، وأثبت عملياً أن شبكات الالتفاف البيانية ليست مجرد أدوات أكاديمية بل تصلح لأنظمة إنتاجية تخدم مئات الملايين. رسم المخطط الأساسي للتعلم البياني على نطاق واسع: التفافات موضعية، وعيّنات مرجَّحة بالأهمية، وتدريب بالمنهج التدريجي. أفكاره أثّرت مباشرة في أنظمة لاحقة في Uber وAlibaba وغيرها، وأصبح مفهوم جوار المشي العشوائي أداة أساسية في أدوات التعلم الآلي على الرسوم البيانية.
تخيّل أنك انتقلت لمدينة جديدة وتبحث عن مطاعم جيدة. يمكنك قراءة قائمة كل مطعم بنفسك، لكن هذا بطيء ولا يعطيك الصورة الكاملة. الأذكى أن تسأل جيرانك: «أين تأكلون؟» — ثم تُعطي وزناً أكبر لجارك الذوّاق مقارنة بشخص لا تعرفه في الطرف الآخر من المدينة، وفي النهاية تمزج ترشيحاتهم لتكوّن ذوقك الخاص.
PinSage يفعل الشيء ذاته تماماً: كل صورة في الرسم البياني تسأل جيرانها عن ملامحهم، وتُرجّح إجاباتهم بحسب قوة العلاقة البنيوية، ثم تبني يجمع بين محتوى الصورة نفسها وهوية الجوار الجماعية.
Pinterest بوصفه رسماً بيانياً ثنائي الأطراف ضخماً
في Pinterest نوعان من الكيانات: الصور (pins) ومعها بياناتها الوصفية، واللوحات (boards) وهي مجموعات يصنعها المستخدمون. كل مرة يحفظ مستخدمٌ صورةً في لوحة يُنشأ ضلع بينهما، والنتيجة : الصور ترتبط باللوحات واللوحات ترتبط بالصور، لكن لا يوجد ارتباط مباشر بين صورتين.
حجم هذا الرسم البياني عند نشر الورقة كان هائلاً: 3 مليارات عقدة (2 مليار صورة + مليار لوحة) و18 مليار ضلع. القيمة الأساسية هنا أن صورتين في اللوحة نفسها ترتبطان ضمنياً — فمستخدم يحفظ وصفة معكرونة ولوح تقطيع خشبي في لوحة «أفكار للمطبخ» يُخبر النظام أن هذين العنصرين ينتميان معاً. هذه إشارة لا يلتقطها أيّ مصنّف صور مهما كانت دقّته.
الفكرة الجوهرية هنا أن هوية الصورة لا تتحدّد ببكسلاتها وحدها، بل أيضاً بالصور التي تجاورها. صورة حاجز سرير قد تبدو لنموذج رؤية حاسوبية وكأنها سياج حديقة، لكن جوارها في الرسم البياني — أثاث غرف نوم ومراتب وطاولات جانبية — يكشف تصنيفها الحقيقي. ما يتعلّمه PinSage هو دمج هاتين الإشارتين: الصورة الذاتية من بصريات ونصوص، والسمات المُجمَّعة من جيرانها في الرسم البياني.
لماذا تعجز شبكات الالتفاف البيانية التقليدية عن التعامل مع مليارات العقد
التقليدي يحتاج ضرب سمات العقد في مصفوفة لابلاس الكاملة عند كل طبقة — مصفوفة بـ 3 مليارات صف وعمود. هذا مستحيل عملياً.
GraphSAGE حلّ جزءاً من المشكلة: بدلاً من الكاملة، يأخذ عدداً ثابتاً من الجيران لكل عقدة. لكنه ظلّ يفترض أن الرسم البياني كاملاً يتسع في ذاكرة GPU، وكان يُعامل كل جار بنفس الأهمية بصرف النظر عن قوة العلاقة.
PinSage يتجاوز القيدين معاً: يستخدم المشي العشوائي لتحديد جوار مرجَّح بالأهمية، وبنية مُنتِج-مستهلِك لا تُبقي على GPU إلا الحالية بينما يُجهّز CPU الدفعة التالية.
الابتكار الأول: المشي العشوائي يُحدّد جواراً أذكى
أخذ جميع العقد ضمن قفزات ينفجر أسّياً، فالعقدة المشهورة قد تجرّ معها ملايين الجيران. بدلاً من ذلك، يُطلق PinSage سلسلة مشيات عشوائية قصيرة من العقدة المستهدفة ويحسب كم مرة مرّ بكل جار. الجيران الأكثر زيارةً هم الأكثر أهمية — لأنهم يظهرون على مسارات عديدة من العقدة المستهدفة، وهذا دليل على ارتباط بنيوي قوي.
تخيّل الأمر كممرّات حديقة عامة: الممرّات الأكثر اهتراءً تدلّك على الوجهات الأهم. عقدة زيرَت 50 مرة من أصل 200 مشية أهمّ بكثير من عقدة زيرَت مرة واحدة.
رياضياً، أعداد الزيارات هذه تُقارب درجات بالنسبة للعقدة المستهدفة. نختار أعلى عقدة من حيث الزيارات لتصبح جوار العقدة، ونستخدم أعداد الزيارات المُقيَّسة أوزانَ أهمية أثناء .
التفاف PinSage: اجمع، حوِّل، ادمج
في كل طبقة، تمرّ كل عقدة بثلاث خطوات لتحديث تمثيلها. تخيّل العقدة مديراً يُلخّص آراء فريقه بعد اجتماع:
الخطوة الأولى — الجمع والتحويل: سمات كل جار تمرّ عبر مشتركة بين جميع الجيران، فتُنتج تمثيلاً مُحوَّلاً لكل منهم.
الخطوة الثانية — التجميع بالأهمية: نأخذ المتوسط المُرجَّح للسمات المُحوَّلة باستخدام أوزان المشي العشوائي. هذا أشبه بتصويت مُرجَّح — الجيران المهمّون لهم صوت أعلى.
الخطوة الثالثة — الدمج مع الذات: متجه الجوار المُجمَّع يُسلسَل مع تمثيل العقدة الحالي، ثم يمرّ عبر طبقة كثيفة أخرى ويُقيَّس. الناتج هو تمثيل العقدة الجديد، مُعزَّز بسياق الجوار.
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def pinsage_convolve(h_self, h_neighbors, alpha_weights, Q, q, W, w):
"""طبقة التفاف PinSage واحدة لعقدة واحدة.
h_self: (d,) — متجه سمات العقدة نفسها
h_neighbors: (T, d) — سمات الجيران المُعاينين (T جار)
alpha_weights:(T,) — أوزان الأهمية من المشي العشوائي (مجموعها 1)
Q, q: (m, d) و (m,) — معاملات تحويل الجوار
W, w: (d, d+m) و (d,) — معاملات الدمج
"""
# الخطوة 1-2: حوّل كل جار، ثم اجمع بالمتوسط المرجَّح
n_u = np.relu(Q @ (alpha_weights @ h_neighbors) + q) # (m,)
# الخطوة 3: سلسل مع الذات، حوّل، قيّس
combined = np.concatenate([h_self, n_u]) # (d+m,)
z_u = W @ combined + w # (d,)
z_u = z_u / (np.linalg.norm(z_u) + 1e-8) # الكرة الواحدية
return z_u
# كدّس K طبقة: مخرج الطبقة k يصبح مدخل الطبقة k+1.
# لكل طبقة معاملات Q و W خاصة — مشتركة بين جميع العقد.الابتكار الثاني: التجميع بالأهمية يحلّ محل التجميع المنتظم
في GraphSAGE كل الجيران المُعاينين يُسهمون بالتساوي: أو يُعامل كل جار بنفس الوزن. PinSage يستبدل هذا بـ التجميع بالأهمية — متوسط مُرجَّح يكون فيه وزن كل جار هو عدد زياراته المُقيَّس من المشي العشوائي.
الأثر ملموس جداً: لو أطلقت 200 مشية عشوائية من صورة وصفة معكرونة، وزارت لوحة «أدوات الطبخ» 50 مرة بينما زارت لوحة «طرائف عشوائية» مرتين فقط، فإن لوحة أدوات الطبخ تُسهم بصوت أعلى 25 ضعفاً في التمثيل النهائي. بهذه الطريقة يتشكّل تمثيل العقدة أساساً من جيرانه الأكثر ارتباطاً بنيوياً، دون أن يُخفّفه جيران بعيدون أو عَرَضيون.
التدريب: خسارة الهامش الأقصى مع سلبيات صعبة مجدولة بالمنهج
هدف التدريب واضح: دفع تضمينات الصور المترابطة لتقترب من بعضها، وإبعاد الصور غير المترابطة. أزواج التدريب تأتي من سجلات سلوك المستخدمين: صورتان حُفظتا في اللوحة نفسها خلال ساعة واحدة تُعدّان زوجاً إيجابياً. أما صورة مُختارة عشوائياً فتُشكّل زوجاً سلبياً — والاحتمال الأغلب أنها غير مرتبطة.
دالة الخسارة هي : تشترط أن يتجاوز بين صورة الاستعلام ونظيرتها الإيجابية الضرب النقطي مع كل بهامش لا يقلّ عن .
مشكلة السلبيات السهلة. صورة مُختارة عشوائياً من ملياري صورة تختلف في الغالب اختلافاً بديهياً عن الاستعلام — كأنك تسأل «هل وصفة معكرونة مرتبطة بدراجة نارية؟» النموذج يتعلم هذه الفوارق الواضحة بسرعة ثم يتوقف عن التحسّن.
الحل: سلبيات صعبة عبر ترتيب الصفحات الشخصي. يحسب PinSage درجات PageRank الشخصي لكل صورة استعلام ويختار السلبيات الصعبة من المرتبة 2000–5000 — صور مرتبطة نوعاً ما لكنها ليست تطابقات حقيقية. هذا يُجبر النموذج على تعلّم فوارق دقيقة.
التدريجي يمنع السلبيات الصعبة من إرباك نموذج لم يُدرَّب بعد. في يحصل النموذج على سلبية صعبة لكل مثال، بدءاً من الصفر. يُتقن أولاً الفوارق الواضحة ثم يواجه تدريجياً فوارق أدقّ — كطالب يبدأ بالجمع ثم ينتقل إلى الجبر. هذا المنهج وحده حقّق تحسّناً بنسبة 12%.
التوسع إلى المليارات: بنية المُنتِج-المستهلِك واستنتاج MapReduce
تدريب على مليارات العقد يتطلب تنسيقاً دقيقاً بين CPU وGPU. يستخدم PinSage أنبوب مُنتِج-مستهلِك: بينما يُعالج GPU الدُّفعة الحالية (تمرير أمامي، تمرير عكسي، تحديث التدرّجات)، يُحضّر CPU في الوقت ذاته جوار العقد ويجلب سماتها للدُّفعة التالية. النتيجة أن GPU — المورد الأغلى — لا يُضيّع لحظة انتظار.
أما بعد التدريب، فلتوليد تضمينات لكل العقد البالغة 3 مليارات، يستخدم PinSage أنبوب MapReduce من مرحلتين. المرحلة الأولى تُسقط سمات كل عقدة إلى الفضاء منخفض الأبعاد. المرحلة الثانية تربط كل عقدة بسمات جيرانها المُسقَطة وتحسب التجميع. الفائدة الأساسية أن سمات كل عقدة تُسقَط مرة واحدة فقط، حتى لو ظهرت كجار لآلاف العقد الأخرى.
النتائج: تحسّن 150% ونشر في الإنتاج
قُيِّم PinSage على مهمتين: توصية الصور المرتبطة (أعطِ صورة استعلام ورتّب الصور الأقرب إليها) وتوصية الصفحة الرئيسية (رشّح للمستخدم صوراً يُرجَّح أن يحفظها).
في التقييم دون اتصال على مهمة الصور المرتبطة، حقّق PinSage معدل إصابة 67% ومتوسط رتبة عكسية 0.59 — أي تحسّن نسبي 150% في معدل الإصابة و60% في MRR مقارنة بأفضل خط مرجعي (Pixie، أسلوب قائم على المشي العشوائي). أساليب المحتوى وحده — السمات البصرية والنصية ومزيجهما — سجّلت نتائج أقل بكثير.
دراسات الاستئصال أكّدت أثر كل ابتكار: التجميع بالأهمية مع السلبيات الصعبة (PinSage الكامل) تفوّق باستمرار على التجميع بالقيمة العظمى والمتوسط وعلى النسخ بدون سلبيات صعبة. كذلك أظهر توزيع التضمينات أن متجهات PinSage أكثر انتشاراً في الفضاء (تفرطح 0.43 مقابل 2.49 للتضمينات النصية)، ما يعني استغلالاً أفضل لفضاء التمثيل.
وفي اختبارات A/B الحية داخل Pinterest، رفعت توصيات PinSage التفاعل بشكل قابل للقياس، واعتُمد النظام لخدمة التوصيات عبر المنصة بأكملها.
لماذا غيَّر PinSage التعلم الآلي على الرسوم البيانية
قبل PinSage، كانت الشبكات العصبية البيانية أدوات أكاديمية بامتياز — نتائج مبهرة على Cora وCiteseer (بضعة آلاف عقدة)، لكن لم يُثبت أحدٌ أنها تعمل على النطاق الحقيقي. PinSage أثبت ثلاثة أمور رسمت ملامح المجال:
أولاً، أن بنية الرسم البياني سمة قوية تُكمّل سمات المحتوى. مثال حاجز السرير مقابل سياج الحديقة أصبح المثال المرجعي لأهمية سياق الرسم البياني.
ثانياً، أن الهندسة الذكية تجعل الالتفاف البياني عملياً: جوار المشي العشوائي، وتدريب المُنتِج-المستهلِك، واستدلال MapReduce ليست إسهامات نظرية — إنها ابتكارات هندسة أنظمة حوّلت فكرة بحثية إلى نظام إنتاجي.
ثالثاً، أن استراتيجية التدريب لا تقلّ أهمية عن البنية المعمارية: التجميع بالأهمية والتعلم بالمنهج أسهما بمكاسب أداء (46% + 12%) تفوق أي تغيير معماري.
2017
GraphSAGE
قدّم فكرة التعلم الاستقرائي على الرسوم البيانية بأخذ عيّنات من الجوار وتجميعها. مكّن الشبكات البيانية من التعميم على عُقد جديدة لم تُشاهد أثناء التدريب، لكنه تطلّب تحميل الرسم البياني كاملاً في ذاكرة GPU.
2018
PinSage
وسّع الالتفاف البياني إلى 3 مليارات عقدة باستخدام جوار المشي العشوائي والتجميع بالأهمية والتعلم بالمنهج التدريجي. أول نشر صناعي حقيقي لشبكة عصبية بيانية.
2019
توصيات Alibaba البيانية
أنظمة تضمين بيانية واسعة النطاق في Alibaba اعتمدت أفكاراً مشابهة في المشي العشوائي وأخذ العيّنات لتوصيات التجارة الإلكترونية، بانيةً على المخطط الذي رسمه PinSage.
2019
التعلم البياني في Uber Eats
طبّقت Uber الشبكات العصبية البيانية على توصيات توصيل الطعام، وكيّفت نمط تدريب المُنتِج-المستهلِك ليعمل مع رسوم بيانية ديناميكية تربط المطاعم بالأطباق.
2020
شبكات المحوِّلات البيانية
دمجت آلية انتباه المحوِّل مع بنية الرسم البياني، مستفيدةً من نموذج تجميع الجوار الذي ساعد PinSage في ترسيخه.
المرجعYing, He, Chen, Eksombatchai, Hamilton, Leskovec. Graph Convolutional Neural Networks for Web-Scale Recommender Systems. KDD, 2018.
مصطلحات هذه الورقة
- الشبكات العصبية الرسومية (البيانية)Graph Neural Network (GNN)
- الالتفاف الرسوميGraph Convolution
- تمرير الرسائلMessage Passing
- المشي العشوائيRandom Walk
- التجميع بالأهميةImportance Pooling
- العيّنة السلبيةNegative Sample
- التعلم المتدرج (المنهجي)Curriculum Learning
- نظام التوصيةRecommender System
- التضمينEmbedding
- رسم بياني ثنائي الأطرافBipartite Graph
- خسارة الهامش الأقصىMax-Margin Loss
- MapReduceMapReduce
- تصنيف العُقدNode Classification
- مصفوفة التجاورAdjacency Matrix
- التصفية التعاونيةCollaborative Filtering