أنظمة التوصية1994تأسيسي11 دقيقة قراءة
GroupLens: بنية مفتوحة للتصفية التعاونية في مقالات يوزنِت
GroupLens: An Open Architecture for Collaborative Filtering of Netnews
Resnick, P. · Iacovou, N. · Suchak, M. · Bergstrom, P. · Riedl, J. — CSCW
المشكلة
في عام 1994 كانت شبكة يوزنِت تضمّ أكثر من 8,000 مجموعة إخبارية، وكل يوم يُضاف 100 ميغابايت من المقالات الجديدة. القارئ كان يغرق حرفياً في طوفان من المحتوى — أغلبه لا يهمّه. الأدوات المتاحة لم تكن تسعفه: إما قوائم حجب بالكلمات المفتاحية تحذف مقالات بناءً على اسم الكاتب أو عنوان المقال، أو مشرف بشري وحيد يتحكّم بما يُنشر وما لا يُنشر. المشكلة الجوهرية أن هذه الأدوات لم تكن قادرة على الإجابة عن السؤال الأهم: هل هذا المقال جيّد فعلاً من وجهة نظر هذا القارئ بالذات؟
الإسهام
GroupLens: أول نظام تصفية تعاونية مفتوح وموزَّع. الفكرة بسيطة: كل مستخدم يعطي المقالات التي يقرأها درجة من 1 إلى 5. خوادم مخصّصة تُسمّى "مكاتب البتات الأفضل" (BBB) تجمع هذه وتحسب التشابه بين المستخدمين باستخدام معامل بيرسون، ثم تستخدم هذا التشابه لتتنبّأ بالمقالات التي سيحبّها كل مستخدم. البنية مصمَّمة لتكون مفتوحة — أي عميل أخبار يستطيع المشاركة — وتحمي خصوصية المستخدمين عبر التقييم بأسماء مستعارة.
الأثر
هذه الورقة أسّست حقل أنظمة التوصية كما نعرفه اليوم. التي قدّمها GroupLens — المبنية على المستخدمين — أصبحت الأساس الذي بنت عليه Amazon وNetflix وكل ميزة «أعجب الآخرون أيضاً…» نصادفها يومياً. الفريق البحثي نفسه أنشأ لاحقاً مجموعة بيانات MovieLens التي لا تزال أشهر مرجع معياري في أبحاث التوصية. الأفكار التي انطلقت من هنا تطوّرت إلى التصفية التعاونية المبنية على العناصر ثم إلى — التقنيتان اللتان تقف خلف محرّكات التوصية الحديثة في كل مكان.
تخيّل أنك دخلت قاعة فيها عشرات من نقّاد الكتب، وأنت لا تعرف أحداً منهم. بدل أن تقرأ كل كتاب بنفسك، تجلس وتسمع آراءهم عن كتب سابقة. بعد فترة تكتشف أن ثلاثة منهم ذوقهم يطابق ذوقك تماماً — كل كتاب قرأتموه معاً أعطيتموه الدرجة نفسها تقريباً.
أحد هؤلاء الثلاثة يمتدح رواية جديدة لم تقرأها بعد. دون أن تفتح صفحة واحدة، تستطيع أن تتوقَّع أنها ستعجبك أيضاً. هذه هي فكرة التصفية التعاونية: التوقّع لا يأتي من محتوى الكتاب نفسه، بل من سجلّ أشخاص ثبت أن ذوقهم يشبه ذوقك.
GroupLens حوَّل هذه القاعة إلى نظام يعمل على الإنترنت — لمقالات يوزنِت الإخبارية، وذلك عام 1994.
المشكلة: غرق في الأخبار وجوع للجودة
في عام 1994 كانت يوزنِت بمثابة الميدان العام للإنترنت — أكثر من 8,000 مجموعة إخبارية، و140,000 كاتب نشط، و100 ميغابايت من المحتوى الجديد كل يوم. المشكلة؟ إيجاد مقالة تستحقّ القراءة وسط هذا الكمّ كان أشبه بالبحث عن إبرة في كومة قش.
الأدوات المتاحة كانت بدائية: قوائم حجب بالكلمات المفتاحية تحذف مقالات بناءً على اسم الكاتب أو كلمة في العنوان، ومجموعات يديرها مُشرف بشري وحيد يقرّر ما يُنشَر وما لا يُنشَر، وتصفّح يدوي للعناوين. كلّها أشكال من التصفية المبنية على المحتوى — تسأل: عمَّ يتحدث المقال؟ أو مَن كتبه؟ — لكنها لا تستطيع الإجابة عن السؤال الأهمّ: هل هذا المقال جيّد فعلاً بالنسبة لي أنا؟
الملاحظة الذكية كانت بسيطة: كل يوم ملايين الناس يقرأون مقالات ويكوّنون آراءً عنها — لكن هذه الآراء تتبخّر دون أن يستفيد منها أحد. لا نظام يجمعها، ولا نظام يربط بينها، ولا نظام يستخدمها لمساعدة القارئ التالي.
الفكرة: مَن اتّفقوا في الماضي سيتّفقون مجدداً
الفكرة التي يقوم عليها GroupLens واضحة وقوية: إذا اتّفق شخصان في تقييم مقالات سابقة، فالأرجح أنهما سيتّفقان على المقالات الجديدة أيضاً.
هذا هو جوهر التصفية التعاونية — بدل أن نسأل «ما موضوع المقال؟» نسأل «ما رأي الناس الذين يشبهونك فيه؟». لا يهمّ مَن هؤلاء الناس ولا أين يعيشون — المهمّ أن تاريخ تقييماتهم يتطابق مع تقييماتك، والارتباط الإحصائي وحده كافٍ لاتّخاذ القرار.
النظام يعمل بثلاث خطوات بسيطة:
- جمع التقييمات — بعد أن يقرأ المستخدم مقالة، يمنحها درجة من 1 إلى 5.
- قياس التشابه بين المستخدمين — الخادم يحسب مدى تقارب كل زوج من المستخدمين بناءً على المقالات التي قيّماها معاً.
- التنبؤ — لمقالة لم يقرأها المستخدم بعد، يأخذ النظام تقييمات المستخدمين المشابهين له ويدمجها في مخصّص.
مصفوفة التقييمات: جدول مليء بالفراغات
في قلب التصفية التعاونية بنية بيانات بسيطة جداً: صفوفها مقالات وأعمدتها مستخدمون، وكل خلية فيها تحمل الدرجة التي أعطاها مستخدم معيّن لمقالة معيّنة. الغالبية العظمى من الخلايا فارغة — لا أحد يقرأ كل شيء.
مهمّة النظام إذن واضحة: ملء الفراغات. إذا توقّع النظام أن المستخدم سيعطي مقالة ما درجة 5، يعرضها عليه بارزة. وإذا توقّع أنه سيعطيها 1، يُبعدها عنه. هذه الصياغة — التوصية بوصفها إكمال مصفوفة — هيمنت على أبحاث لثلاثة عقود كاملة، من مسابقة Netflix Prize إلى يومنا هذا.
لتقريب الصورة: تخيّل طاولة كبيرة في مطعم، كل ضيف تذوّق بعض الأطباق لا كلّها. التصفية التعاونية تقول ببساطة: إذا اتّفق ضيفان على تقييم كل طبق جرّباه كلاهما، فالأطباق التي لم يجرّبها أحدهما ستعجبه غالباً بالقدر نفسه الذي أعجبت به الآخر.
ارتباط بيرسون: البحث عن توأم ذوقك
السؤال الجوهري: كيف يقرّر النظام أن مستخدمَين متشابهان؟ الإجابة هي معامل ارتباط بيرسون. النظام يأخذ كل زوج من المستخدمين اللذين قيّما بعض المقالات نفسها، ويحسب مدى اتفاقهما. النتيجة رقم بين -1 و+1: القيمة +1 تعني اتفاقاً تاماً، و-1 تعني اختلافاً تاماً، و0 تعني أن لا علاقة بينهما.
ما يميّز ارتباط بيرسون هنا أنه لا يتأثّر باختلاف المقاييس الشخصية. لو كنتَ من النوع الكريم في التقييم وتعطي درجات بين 3 و5، بينما شخص آخر صارم ويعطي بين 1 و3 — الارتباط سيظلّ +1 ما دمتما ترتّبان المقالات بالترتيب نفسه. السبب أن المعادلة تطرح متوسط كل مستخدم أولاً، فتقيس الاتفاق في نمط الانحرافات لا في الأرقام المطلقة.
وهذا أمر جوهري، لأن الناس يختلفون كثيراً في تفسير المقاييس. ما يعنيه شخص بدرجة 3 قد يكون مكافئاً لدرجة 5 عند شخص آخر — وارتباط بيرسون يتجاوز هذا الاختلاف ويلتقط التوافق الحقيقي.
الطريقة الأبسط لقراءة هذه المعادلة: هل نرتفع معاً وننخفض معاً؟ عندما يمنح كلا المستخدمَين مقالة درجة أعلى من متوسطهما — أي كلا الانحرافين موجبان — يزداد البسط. وعندما يرتفع أحدهما بينما ينخفض الآخر، يتقلّص البسط. أما المقام فدوره ضبط المقياس بحيث تكون النتيجة دائماً بين -1 و+1 مهما كان عدد المقالات المشتركة.
التنبُّؤ: مزج أصوات المجموعة
بعد أن حدّد النظام مَن يشبه مَن، أصبح بإمكانه التنبؤ بتقييم مفقود. المعادلة المستخدمة هي متوسط موزون، حيث تُستخدم معاملات الارتباط نفسها كأوزان:
جمال هذه المعادلة أنها تصحّح نفسها تلقائياً. لنأخذ مثالاً: كريم متوسط تقييماته 3.0، ومنى — التي يتطابق ذوقها مع ذوقه — متوسطها 4.0. إذا أعطت منى مقالة جديدة درجة 5 (نقطة واحدة فوق متوسطها)، فالمعادلة تأخذ هذا الانحراف (+1) وتضيفه إلى متوسط كريم، فيصبح التوقّع 4.0 — لا تنسخ درجة منى كما هي.
والأذكى من ذلك: لو كان لكريم مستخدم يختلف معه دائماً — لنقل خالد بارتباط سالب (-1) — وخالد أعطى المقالة درجة 1 (نقطتان تحت متوسطه 3)، فالارتباط السالب يعكس الإشارة: التوقّع يرتفع. المنطق بسيط — إذا كرهها شخص يختلف معك دائماً، فهذا دليل على أنك ستحبّها.
هذه الخاصية — التعامل بسلاسة مع اختلاف المقاييس وحتى مع المقاييس المعكوسة — كانت من أذكى قرارات التصميم في الورقة. ونصيحة المؤلفين للمستخدمين كانت بسيطة: «أعطِ التقييم الذي كنت تتمنّى أن يتنبّأ به GroupLens.»
الفكرة ذاتها في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def pearson(ratings, u, v):
"""معامل ارتباط بيرسون بين المستخدمَين u وv."""
# إيجاد المقالات التي قيّمها كلاهما
shared = ~np.isnan(ratings[u]) & ~np.isnan(ratings[v])
if shared.sum() < 2:
return 0.0
ru = ratings[u, shared] - np.nanmean(ratings[u])
rv = ratings[v, shared] - np.nanmean(ratings[v])
denom = np.sqrt((ru**2).sum()) * np.sqrt((rv**2).sum())
return (ru @ rv) / denom if denom > 0 else 0.0
def predict(ratings, user, item, top_k=5):
"""تنبّأ بتقييم المستخدم لعنصر ما باستخدام أعلى k مستخدمين ارتباطاً."""
n_users = ratings.shape[0]
# 1. حساب الارتباط مع كل مستخدم آخر
corrs = [pearson(ratings, user, v) for v in range(n_users) if v != user]
# 2. الاحتفاظ فقط بمن قيّموا هذا العنصر، واختيار أعلى k حسب |الارتباط|
neighbors = [(v, corrs[v]) for v in range(n_users)
if v != user and not np.isnan(ratings[v, item])]
neighbors.sort(key=lambda x: abs(x[1]), reverse=True)
neighbors = neighbors[:top_k]
if not neighbors:
return np.nanmean(ratings[user]) # احتياطي: متوسط المستخدم
# 3. المتوسط الموزون لانحرافات الجيران
user_mean = np.nanmean(ratings[user])
num = sum(c * (ratings[v, item] - np.nanmean(ratings[v]))
for v, c in neighbors)
den = sum(abs(c) for _, c in neighbors)
return user_mean + num / den
# هذا كل ما في الأمر. Amazon وNetflix وSpotify بدأت جميعها من هذه الحلقة.البنية المعمارية: انفتاح بالتصميم
لم يكن GroupLens مجرّد خوارزمية، بل منظومة معمارية متكاملة قامت على ثلاثة مبادئ أصبحت لاحقاً معياراً في أنظمة التوصية:
بروتوكول مفتوح — أي عميل أخبار يستطيع الانضمام بشرط واحد: أن يرسل التقييمات بالصيغة المتّفق عليها (معرّف المقال، الاسم المستعار، درجة من 1 إلى 5، ومدة القراءة اختيارياً). فعلياً عُدِّل ثلاثة عملاء مختلفين: Emacs Gnus وNN على يونكس وNewsWatcher على ماكنتوش — كلٌّ منها أدمج التقييمات بطريقته الخاصة.
الفصل بين الجمع والتنبؤ — مكاتب BBB تعمل مستقلة تماماً عن عملاء الأخبار. المكتب يستطيع أن يحسب التوقّعات مسبقاً أثناء الليل بحيث لا ينتظر المستخدم أبداً. والأهمّ أن مكاتب مختلفة تستطيع تجريب خوارزميات مختلفة مع الاعتماد على مجموعة التقييمات نفسها.
الخصوصية عبر الأسماء المستعارة — المستخدمون يُقيِّمون بأسماء مستعارة. كل ما يحتاجه النظام هو أن يعرف أن تقييمَين صدرا من الشخص نفسه، لا مَن يكون ذلك الشخص. هذا التصميم حافظ على دقة الارتباط مع حماية هُوية المستخدم — وهو قرار سبق عصره.
التحديات: البداية الباردة والتوسّع والحوافز
من أهمّ ما في هذه الورقة أنها لم تكتفِ بعرض الحلّ، بل اعترفت بصراحة بالتحديات — وهي تحديات ظلّت تشغل أبحاث أنظمة التوصية لعقود:
مشكلة — عندما ينضمّ مستخدم جديد ليس لديه أي تقييمات بعد، لا يستطيع النظام حساب ارتباطه مع أحد. والأمر نفسه ينطبق على مقالة جديدة لم يقيّمها أحد — لا توقّع ممكن. التجربة التمهيدية بأربعة أشخاص في مينيسوتا أثبتت أن التوقّعات لا تصبح مفيدة إلا بعد فترة «إحماء». هذه المشكلة دفعت لاحقاً نحو الأنظمة الهجينة التي تمزج التصفية التعاونية بالتصفية المبنية على المحتوى.
التوسُّع — حساب ارتباط بيرسون بين كل زوج من المستخدمين مكلف حوسبياً — التعقيد تربيعي بعدد المستخدمين. اقترحت الورقة تجميع مكاتب BBB حسب الجغرافيا أو الاهتمام وتبادل التقييمات داخل كل مجموعة فقط. هذا الاقتراح مهّد الطريق لاحقاً نحو التصفية التعاونية المبنية على العناصر، التي تتوسّع بشكل أفضل لأن العناصر تتغيّر أبطأ من المستخدمين.
مشكلة الحوافز — التقييم يتطلّب جهداً من المستخدم لكن الفائدة تعود أساساً على الآخرين. الإغراء بالانتفاع المجاني واضح: انتظر حتى يُقيِّم غيرك، ثم استفد من التوقّعات دون مساهمة. الورقة أشارت إلى أن عدد التقييمات سيكون على الأرجح أقلّ من العدد الأمثل اجتماعياً — وهي معضلة المنافع العامة الكلاسيكية.
لا تماثل التقييمات — إذا جاءت التقييمات الأولى سلبية، فالقرّاء اللاحقون الذين ربما أحبّوا المقالة لن يروها أصلاً. هذا الانحياز للتقييمات المبكّرة كان بذرة ما يُعرف اليوم بمشكلة «انحياز الشعبية» في أبحاث التوصية الحديثة.
التداعيات الاجتماعية: قبائل أم قرية عالمية؟
من اللافت أن الورقة لم تكتفِ بالجانب التقني، بل طرحت سؤالاً اجتماعياً عميقاً لا يزال محورياً حتى اليوم: هل ستحوّل أنظمة التوصية الإنترنت إلى قبائل منعزلة لا يسمع كل منها إلا صدى صوته؟
المنطق واضح: إذا كان المستخدم لا يرى إلا ما أحبّه أشخاص يشبهونه، فمتى سيصادف رأياً مخالفاً أو فكرة من تخصص آخر؟ الورقة وصفت هذا التوتر بين التصفية المفيدة وغرف الصدى الخطرة — قبل عقود من أن يصبح مصطلح «فقاعة الترشيح» جزءاً من القاموس اليومي.
لكنها قدّمت أيضاً وجهة نظر متفائلة: المجموعات تتشكّل وتتفكك باستمرار، والمستخدم الواحد ينتمي لمجموعات متعددة، والأفكار الجيدة تعبر الحدود بطبيعتها. هل كان هذا التفاؤل في محلّه؟ السؤال لا يزال مفتوحاً.
لماذا غيَّر كل شيء
1992
Tapestry
أول نظام تصفية تعاونية، لكنه يعمل على موقع واحد فقط وببنية متراصّة. كان على المستخدم أن يعرف مسبقاً بالاسم مَن يثق بآرائه.
1994
GroupLens
حساب الارتباط أصبح آلياً، والبنية موزَّعة، والتقييمات بأسماء مستعارة. التوصية أصبحت مسألة حوسبية.
1998
التصفية التعاونية المبنية على العناصر (Amazon)
بدل حساب التشابه بين المستخدمين، حُسب التشابه بين العناصر نفسها — وهذا يتوسّع بشكل أفضل مع ملايين العملاء. من هنا وُلدت عبارة «الذين اشتروا هذا اشتروا أيضاً…».
2006
مسابقة Netflix Prize
عرضت Netflix مليون دولار لمن يُحسِّن نظام توصياتها بنسبة 10%. الأساليب التي هيمنت كانت أساليب تحليل المصفوفات، التي تفكّك مصفوفة التقييمات إلى عوامل كامنة.
2009
فريق BellKor يفوز بمسابقة Netflix
الحلّ الفائز دمج تحليل المصفوفات مع نماذج الجوار — وكلاهما امتداد مباشر لنهج GroupLens القائم على أوزان بيرسون.
2016
التوصيات بالتعلم العميق
التصفية التعاونية العصبية حلّت محلّ الارتباطات المحسوبة يدوياً بتضمينات مُتعلَّمة، لكن الفكرة الأساسية — الاستفادة من تجارب مستخدمين مشابهين — لم تتغيّر.
2023
التوصيات المدعومة بالنماذج اللغوية الكبيرة
النماذج اللغوية الكبيرة أضافت قدرات فهم اللغة الطبيعية إلى التوصية، لكن الإشارات التعاونية المستخلصة من سلوك المستخدمين لا تزال أساسية.
من معاملات بيرسون في GroupLens على يوزنِت، إلى تحليل المصفوفات في Netflix، إلى الشبكات العصبية العميقة في Spotify — الخيط لم ينقطع. كل محرّك توصية حديث هو سليل فكرة واحدة بسيطة: مَن اتّفقوا في الماضي سيتّفقون مجدداً.
المرجعResnick, Iacovou, Suchak, Bergstrom, Riedl. GroupLens: An Open Architecture for Collaborative Filtering of Netnews. CSCW, 1994.
مصطلحات هذه الورقة
- التصفية التعاونيةCollaborative Filtering
- نظام التوصيةRecommender System
- التقييماتRatings
- الارتباطCorrelation
- تشابه جيب التمامCosine Similarity
- تحليل المصفوفاتMatrix Factorization
- التغذية الراجعة الصريحةExplicit Feedback
- انحياز المستخدمUser Bias
- انحياز العنصرItem Bias
- البداية الباردةCold Start