قم بإنشاء نظام توصية الفيلم الخاص بك باستخدام 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. تعد منصات دفق الفيديو أكبر مثال هنا التي تستخدم تصنيف المستخدم ومتوسط ​​التقييم والمحتوى ذي الصلة لتقديم اقتراحات مخصصة.