قم بإنشاء نظام توصية الفيلم الخاص بك باستخدام Python
نشرت: 2021-03-09هل تتساءل كيف تقترح Netflix أفلامًا تناسب اهتماماتك كثيرًا؟ أو ربما ترغب في بناء نظام يمكنه تقديم مثل هذه الاقتراحات لمستخدميه أيضًا؟
إذا كانت إجابتك بنعم ، فقد وصلت إلى المكان الصحيح حيث ستعلمك هذه المقالة كيفية إنشاء نظام توصية للأفلام باستخدام Python.
ومع ذلك ، قبل أن نبدأ في مناقشة "كيف" يجب أن نكون على دراية بـ "ماذا".
جدول المحتويات
نظام التوصيات: ما هو؟
أصبحت أنظمة التوصية جزءًا لا يتجزأ من حياتنا اليومية. من بائعي التجزئة عبر الإنترنت مثل Amazon و Flipkart إلى منصات الوسائط الاجتماعية مثل YouTube و Facebook ، تستخدم كل شركة رقمية كبرى أنظمة توصية لتوفير تجربة مستخدم مخصصة لعملائها.
تتضمن بعض أمثلة أنظمة التوصيات في حياتك اليومية ما يلي:
- الاقتراحات التي تحصل عليها من أمازون عند شراء المنتجات هي نتيجة لنظام التوصية.
- يستخدم YouTube نظام الاقتراحات لاقتراح مقاطع الفيديو التي تناسب ذوقك.
- لدى Netflix نظام توصية مشهور لاقتراح العروض والأفلام وفقًا لاهتماماتك.
يقترح نظام التوصية منتجات المستخدمين باستخدام البيانات. قد تكون هذه البيانات حول اهتمامات المستخدم وتاريخه وما إلى ذلك. إذا كنت تدرس التعلم الآلي والذكاء الاصطناعي ، فلا بد من دراسة أنظمة التوصية لأنها تزداد شعبية وتقدمًا.
أنواع أنظمة التوصية
هناك نوعان من أنظمة التوصية:
1. نظم التوصية التعاونية
يقترح نظام التوصية التعاوني عناصر وفقًا لتشابه المستخدمين المماثلين لهذا العنصر. يقوم بتجميع المستخدمين ذوي الاهتمامات والأذواق المتشابهة ويقترح منتجاتهم وفقًا لذلك.
على سبيل المثال ، افترض أنك أنت ومستخدم آخر قد أحببت Sholay. الآن ، بعد مشاهدة Sholay وإعجابها ، أحب المستخدم الآخر Golmaal. نظرًا لأن لديك أنت والمستخدم الآخر اهتمامات مماثلة ، فإن نظام التوصية يقترح عليك مشاهدة Golmaal بناءً على هذه البيانات. هذا هو التصفية التعاونية.
2. نظم التوصية على أساس المحتوى
يقترح نظام التوصية المستند إلى المحتوى عناصر بناءً على البيانات التي يتلقاها من المستخدم. يمكن أن يعتمد على بيانات صريحة ("إبداءات الإعجاب" ، "المشاركات" ، إلخ) أو بيانات ضمنية (سجل المشاهدة). سيستخدم نظام التوصية هذه البيانات لإنشاء ملف تعريف خاص بالمستخدم ويقترح عناصر بناءً على هذا الملف الشخصي.
بناء نظام أساسي لتوصية الفيلم
الآن بعد أن غطينا أساسيات أنظمة التوصية ، فلنبدأ في بناء نظام توصية للأفلام.
يمكننا البدء في بناء نظام توصية للأفلام مبني على Python باستخدام مجموعة بيانات MovieLens الكاملة . تحتوي مجموعة البيانات هذه على أكثر من 26 مليون تصنيف ، و 750.000 من تطبيقات العلامات المطبقة على أكثر من 45000 فيلم. توجد بيانات جينوم العلامة الموجودة في مجموعة البيانات هذه مع أكثر من 12 مليون درجة ذات صلة.
نحن نستخدم مجموعة البيانات الكاملة لإنشاء نظام أساسي لتوصية الأفلام. ومع ذلك ، فأنت حر في استخدام مجموعة بيانات أصغر لهذا المشروع. أولاً ، سيتعين علينا استيراد جميع المكتبات المطلوبة:
قد يقترح نظام توصية الأفلام الأساسي المستند إلى Python أفلامًا وفقًا لشعبية الفيلم ونوعه. يعمل هذا النظام على أساس الفكرة القائلة بأن الأفلام الشعبية ذات الاستحسان النقدي لديها احتمالية عالية لإعجاب الجمهور العام. ضع في اعتبارك أن نظام توصية الأفلام هذا لا يقدم اقتراحات مخصصة.
لتنفيذه ، سنقوم بفرز الأفلام وفقًا لشعبيتها وتصنيفها وتمرير حجة النوع للحصول على أفضل أفلام النوع:
إدخال
م = ي. read_csv ("../ input / movies_metadata.csv")
md.head ()
انتاج |
بالغ | ينتمي إلى المجموعة | تبرع | الأنواع | فيديو | هوية شخصية | imdb_id | العنوان الأصلي | نظرة عامة | إيرادات | لقب | |||||||
خطأ شنيع | ('id'L 10194،' name ':' Toy Story Collection ') | 30000000 | [{'id': 16، 'name': 'Animvation'}… | خطأ شنيع | 862 | tt0114709 | قصة لعبة | تعيش ألعاب آندي بسعادة بقيادة وودي ... | 373554033 | قصة لعبة | |||||||
1 | خطأ شنيع | ن | 65000000 | {{'id': 12، 'name': 'Adventure'}… | خطأ شنيع | 8844 | tt0113497 | جومانجي | عندما الأشقاء جودي وبيتر ... | 262797249 | جومانجي | ||||||
2 | خطأ شنيع | ('id': 119050، 'name': 'Grumpy Old Men) | 0 | {{'id': 10749، 'name': 'Romance'}… | خطأ شنيع | 15602 | tt0113228 | عجوز غاضب | حفل زفاف عائلي يعيد إشعال ... | 0 | Grumpier كبار السن من الرجال | ||||||
3 | خطأ شنيع | ن | 16000000 | {{'id': 35، 'name': 'Comedy'}… | خطأ شنيع | 31357 | tt0114885 | في انتظار الزفير | تعرض للغش وسوء المعاملة وتدوس ... | 81452156 | في انتظار الزفير |
إدخال
md ['genres'] = md ['genres']. fillna ('[]'). تطبيق (literal_eval). تطبيق (lambda x: [i ['name'] لـ i in x] إذا كانت isinstance (x ، قائمة ) آخر [])
صيغة الرسم البياني لدينا
لإنشاء مخططنا لأفضل الأفلام ، استخدمنا تصنيفات TMDB. سنستخدم صيغة التقييم المرجح من IMDB لإنشاء مخططنا ، وهو كالتالي:
التقييم المرجح (WR) = (iaouaouaouaouaouaou)
هنا ، تشير v إلى عدد الأصوات التي حصل عليها الفيلم ، و m هو الحد الأدنى لعدد الأصوات التي يجب أن يحصل عليها الفيلم على الرسم البياني ، و R تعني متوسط تصنيف الفيلم ، و C هي متوسط التصويت للتقرير بأكمله .
بناء المخططات
الآن بعد أن أصبح لدينا مجموعة البيانات والصيغة في مكانها الصحيح ، يمكننا البدء في إنشاء المخطط. سنضيف فقط تلك الأفلام إلى مخططاتنا التي حصلت على 95٪ من الأصوات كحد أدنى. سنبدأ بإنشاء أفضل 250 مخططًا.
إدخال
voice_counts = md [md ['votes_count']. notnull ()] ['votes_count']. astype ('int')
votes_averages = md [md ['votes_average']. notnull ()] ['votes_average']. astype ('int')
C = votes_averages.mean ()
ج
انتاج |
5.244896612406511
إدخال
م = votes_counts.quantile (0.95)
م
انتاج |
434.0
إدخال
md ['year'] = pd.to_datetime (md ['release_date'] ، الأخطاء = 'coerce'). طبق (lambda x: str (x) .split ('-') [0] if x! = np. نان آخر np.nan)
إدخال
مؤهل = md [(md ['votes_count']> = m) & (md ['votes_count']. notnull ()) & (md ['votes_average']. notnull ())] [['title'، 'year '،' votes_count '،' votes_average '،' popular '،' genres ']]
مؤهل ['votes_count'] = مؤهل ['votes_count']. astype ('int')
مؤهل ['votes_average'] = مؤهل ['votes_average']. astype ('int')
مؤهل
انتاج |
(2274 ، 6)
كما ترى ، للحصول على مكان في مخططنا ، يجب أن يحصل الفيلم على 434 صوتًا على الأقل. ربما لاحظت أن متوسط التقييم الذي يجب أن يحصل عليه الفيلم للدخول في مخططنا هو 5.24.
إدخال
def weighted_rating (x):
v = x ['votes_count']
R = x ['votes_average']
العودة (v / (v + m) * R) + (m / (m + v) * C)
إدخال
مؤهل ['wr'] = Qualified.apply (التقييم الموزون ، المحور = 1)
إدخال
مؤهل = Qualified.sort_values ('wr' ، تصاعدي = خطأ) .head (250)
مع وضع كل هذا في مكانه الصحيح ، فلنقم ببناء المخطط:
أفضل الأفلام بشكل عام
إدخال
Qualified.head (15)
انتاج |
لقب | عام | التصويت_العد | التصويت_متوسط | شعبية | الأنواع | كتاب | |
15480 | نشأه | 2010 | 14075 | 8 | 29.1081 | [أكشن ، إثارة ، خيال علمي ، غموض ، أ ... | 7.917588 |
12481 | فارس الظلام | 2008 | 12269 | 8 | 123.167 | [دراما ، أكشن ، جريمة ، إثارة] | 7.905871 |
22879 | واقع بين النجوم | 2014 | 11187 | 8 | 32.2135 | [مغامرة ، دراما ، خيال علمي] | 7.897107 |
2843 | نادي القتال | 1999 | 9678 | 8 | 63.8696 | [دراما] | 7.881753 |
4863 | سيد الخواتم: زمالة الخاتم | 2001 | 8892 | 8 | 32.0707 | [مغامرة ، فانتازيا ، أكشن] | 7.871787 |
292 | لب الخيال | 1994 | 8670 | 8 | 140.95 | [إثارة ، جريمة] | 7.868660 |
314 | الخلاص من شاوشانك | 1994 | 8358 | 8 | 51.6454 | [دراما ، جريمة] | 7.864000 |
7000 | سيد الخواتم: عودة الملك | 2003 | 8226 | 8 | 29.3244 | [مغامرة ، فانتازيا ، أكشن] | 7.861927 |
351 | فورست غامب | 1994 | 8147 | 8 | 48.3072 | [كوميديا ، دراما ، رومانسية] | 7.860656 |
5814 | سيد الخواتم: البرجين | 2002 | 7641 | 8 | 29.4235 | [مغامرة ، فانتازيا ، أكشن] | 7.851924 |
256 | حرب النجوم | 1977 | 6778 | 8 | 42.1497 | [مغامرة ، أكشن ، خيال علمي] | 7.834205 |
1225 | العودة إلى المستقبل | 1985 | 6239 | 8 | 25.7785 | [مغامرة ، كوميديا ، خيال علمي ، عائلة] | 7.820813 |
834 | الاب الروحي | 1972 | 6024 | 8 | 41.1093 | [دراما ، جريمة] | 7.814847 |
1154 | الإمبراطورية تضرب | 1980 | 5998 | 8 | 19.471 | [مغامرة ، أكشن ، خيال علمي] | 7.814099 |
46 | Se7en | 1995 | 5915 | 8 | 18.4574 | [جريمة ، غموض ، إثارة] |
Voila ، لقد أنشأت نظامًا أساسيًا لتوصية الأفلام يعتمد على Python!
سنقوم الآن بتضييق نطاق اقتراحات نظام التوصية لدينا بحيث تستند إلى النوع حتى يمكن أن تكون أكثر دقة. بعد كل شيء ، ليس من الضروري أن يحب الجميع الأب الروحي على حد سواء.
تضييق النوع
لذلك ، سنقوم الآن بتعديل نظام التوصية الخاص بنا ليكون أكثر تحديدًا للأنواع:
إدخال
s = md.apply (lambda x: pd.Series (x ['genres']) ، المحور = 1) .stack (). reset_index (المستوى = 1 ، قطرة = صحيح)
s.name = 'النوع'
gen_md = md.drop ("الأنواع" ، المحور = 1). انضم (ق)
إدخال
def build_chart (النوع ، النسبة المئوية = 0.85):
df = gen_md [gen_md ['genre'] == genre]
votes_counts = df [df ['votes_count']. notnull ()] ['votes_count']. astype ('int')
voice_averages = df [df ['votes_average']. notnull ()] ['votes_average']. astype ('int')
C = votes_averages.mean ()
م = votes_counts.quantile (النسبة المئوية)
مؤهل = df [(df ['votes_count']> = m) & (df ['votes_count']. notnull ()) & (df ['votes_average']. notnull ())] [['title'، 'year '،' votes_count '،' votes_average '،' popular ']]
مؤهل ['votes_count'] = مؤهل ['votes_count']. astype ('int')
مؤهل ['votes_average'] = مؤهل ['votes_average']. astype ('int')
مؤهل ['wr'] = Qualified.apply (lambda x: (x ['votes_count'] / (x ['votes_count'] + m) * x ['votes_average']) + (m / (m + x [' التصويت_حساب ']) * ج) ، المحور = 1)
مؤهل = Qualified.sort_values ('wr' ، تصاعدي = خطأ) .head (250)
عودة مؤهلة
لقد أنشأنا الآن نظامًا للتوصية يقوم بفرز الأفلام من النوع الرومانسي ويوصي بأفضلها. اخترنا النوع الرومانسي لأنه لم يظهر كثيرًا في مخططنا السابق.
أفضل الأفلام في الرومانسية
إدخال
build_chart (الرومانسية). head (15)
انتاج |
لقب | عام | التصويت_العد | التصويت_متوسط | شعبية | كتاب | |
10309 | Dilwale Dulhania Le Jayenge | 1995 | 661 | 9 | 34.457 | 8.565285 |
351 | فورست غامب | 1994 | 8147 | 8 | 48.3072 | 7.971357 |
876 | دوار | 1958 | 1162 | 8 | 18.2082 | 7.811667 |
40251 | اسمك. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | البعض يحبه ساخنا | 1959 | 835 | 8 | 11.8451 | 7.745154 |
1132 | سينما باراديسو | 1988 | 834 | 8 | 14.177 | 7.744878 |
19901 | بابيرمان | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | شارع الغناء | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | الشقة | 1960 | 498 | 8 | 11.9943 | 7.599317 |
38718 | الخادمة | 2016 | 453 | 8 | 16.727405 | 7.566166 |
3189 | اضواء المدينة | 1931 | 444 | 8 | 10.8915 | 7.558867 |
24886 | الطريقة التي ينظر بها | 2014 | 262 | 8 | 5.71127 | 7.331363 |
45437 | في نبضات القلب | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | تايتانيك | 1997 | 7770 | 7 | 26.8891 | 6.981546 |
19731 | المعالجة بالسعادة | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
الآن ، لديك نظام اقتراح أفلام يقترح أفضل الأفلام وفقًا للنوع المختار. نوصي باختبار نظام التوصية هذا مع أنواع أخرى أيضًا مثل الحركة والدراما والتشويق وما إلى ذلك. شارك أفضل ثلاثة أفلام في النوع المفضل لديك الذي يقترحه نظام التوصية في قسم التعليقات أدناه
تعرف على المزيد حول نظام توصية الأفلام
كما لاحظت الآن ، فإن بناء نظام توصية للأفلام مبني على Python بسيط للغاية. كل ما تحتاجه هو القليل من المعرفة بعلوم البيانات وبذل القليل من الجهد لإنشاء نظام توصية يعمل بكامل طاقته.
ومع ذلك ، ماذا لو كنت ترغب في بناء أنظمة توصية أكثر تقدمًا؟ ماذا لو كنت تريد إنشاء نظام توصية قد تفكر شركة كبيرة في استخدامه؟
إذا كنت مهتمًا بمعرفة المزيد عن أنظمة التوصية وعلوم البيانات ، فإننا نوصي بأخذ دورة في علم البيانات. من خلال الدورة التدريبية ، ستتعلم جميع المفاهيم الأساسية والمتقدمة لعلوم البيانات والتعلم الآلي. علاوة على ذلك ، ستدرس من خبراء الصناعة الذين سيرشدونك خلال الدورة لمساعدتك على تجنب الشك والارتباك.
في upGrad ، نقدم دورات متعددة في علوم البيانات والتعلم الآلي. يمكنك اختيار أي شخص مما يلي حسب اهتماماتك:
- دبلوم PG في علوم البيانات
- ماجستير العلوم في علوم البيانات
- شهادة PG في علوم البيانات
- دبلوم PG في التعلم الآلي والذكاء الاصطناعي
- ماجستير العلوم في التعلم الآلي والذكاء الاصطناعي
بصرف النظر عن هذه الدورات ، نقدم العديد من الدورات الأخرى في علم البيانات والتعلم الآلي. تأكد من التحقق منها!
افكار اخيرة
أنت تعرف الآن كيفية إنشاء نظام توصية للأفلام. بعد إنشاء النظام ، تأكد من مشاركته مع الآخرين وإظهار مدى تقدمك. تحتوي أنظمة التوصية على مجموعة متنوعة من التطبيقات ، لذا فإن التعرف عليها سيعطيك بالتأكيد اليد العليا في الصناعة.
التصفية التعاونية هي نوع من نظام التوصية الذي يقترب من بناء نموذج بناءً على تفضيلات المستخدم. يعمل تاريخ المستخدمين كمجموعة بيانات للتصفية التعاونية. التصفية التعاونية من نوعين مذكورين أدناه: تقوم التصفية المستندة إلى المحتوى بجمع البيانات من المستخدم وتقترح العناصر وفقًا لذلك. بعض مزاياها وعيوبها مذكورة أدناه: أصبحت خوارزمية التصفية التعاونية هي خوارزمية القيادة الأساسية للعديد من التطبيقات الشائعة. تركز المزيد والمزيد من الشركات على تقديم محتوى غني ومخصص. على سبيل المثال ، ربما تكون قد شاهدت هذه الرسالة على العديد من مواقع التجارة الإلكترونية ، وقد اشترى العملاء الذين يشترون هذا أيضًا.ما هو التصفية التعاونية وما هي أنواعها؟
1. التصفية التعاونية المستندة إلى المستخدم: الفكرة وراء هذا النوع من التصفية التعاونية هي أننا نأخذ مستخدمًا كأفضلية ، دعنا نقول "أ" ونجد مستخدمين آخرين لديهم تفضيلات مماثلة ثم نوفر "أ" تلك التفضيلات لهؤلاء المستخدمين لم تصادف بعد.
التصفية التعاونية القائمة على العنصر: هنا بدلاً من العثور على المستخدمين الذين لديهم تفضيلات مماثلة ، نجد أفلامًا مشابهة لذوق "أ" ونوصي بالأفلام التي لم يشاهدها بعد. ما هي مزايا وعيوب التصفية على أساس المحتوى؟
مزايا
1. على عكس التصفية التعاونية ، لا يحتاج النموذج إلى جمع بيانات حول مستخدمين آخرين لديهم تفضيلات مماثلة لأنه يأخذ الاقتراحات من المستخدم الأساسي نفسه.
2. يمكن للنموذج أن يوصيك ببعض من أفضل الأفلام وفقًا لتفضيلاتك التي لم يشاهدها سوى عدد قليل من الآخرين.
سلبيات
1. تتطلب هذه التقنية الكثير من المعلومات حول مجال معين ، لذا فإن جودة الميزات التي توفرها هي إلى حد ما نفس الميزات المصممة يدويًا.
2. قدرته على التوصية بالأفلام محدودة لأنه يعمل فقط وفقًا لاهتمامات المستخدمين الحالية. ما التطبيقات الشائعة التي تستخدم خوارزميات التصفية التعاونية؟
فيما يلي بعض التطبيقات التي لها قاعدة مستخدمين مشهورة في جميع أنحاء العالم:
1. يستخدم موقع YouTube هذه الخوارزمية جنبًا إلى جنب مع بعض الخوارزميات القوية الأخرى لتقديم توصيات بالفيديو على الصفحة الرئيسية.
2. تستخدم مواقع التجارة الإلكترونية مثل Amazon و Flipkart و Myntra أيضًا هذه الخوارزمية لتقديم توصيات المنتج.
3. تعد منصات دفق الفيديو أكبر مثال هنا التي تستخدم تصنيف المستخدم ومتوسط التقييم والمحتوى ذي الصلة لتقديم اقتراحات مخصصة.