Data Scientist & Machine Learning Engineer @SabaIdea
سیستم پیشنهاددهنده اولیه فیلیمو (Jump Start Recommendation System)

مقدمه
یکی از اهداف ما در فیلیمو بهبود تجربه کاربران تازهوارد است. پیش از این در صفحه اصلی (Homepage) فیلیمو، برای پیشنهاد دادن فیلم به کاربران جدید یک صفحه عمومی داشتیم که نتیجه برآیند انتخابهای کلی کاربران بود. بعدتر برای بهبود تجربه کاربران جدید یک سیستم پیشنهاددهنده اولیه ساختیم که کاربران با انتخاب حداقل سه فیلم یا سریال، سلیقه اولیه خود را معرفی میکنند و طبق این سلیقه اولیه، فیلمها در صفحه اصلی نمایش داده میشوند. به مرور که کاربر فیلمهای بیشتری تماشا میکند سلیقه اولیه او به سلیقه شخصیسازی شده تبدیل و صفحه اصلی بر اساس امتیازات جدید کاربر، ساخته میشود.
این مساله که در مورد همه کاربران جدید در سیستمهای پیشنهاددهنده وجود دارد را «شروع سرد» میگوییم. اصطلاح شروع سرد (cold start) از مدل کار کردن موتور ماشین گرفته شده. وقتی هوا سرد است، با روشن شدن ماشین، اجزا آن به درستی کار نمیکند و بعد از رسیدن به دمای مطلوب و اصطلاحا گرم شدن موتور، میتوان ماشین را به راحتی به حرکت در آورد. در موتورهای پیشنهاددهنده هم «شروع سرد» به این معنی است که شرایط هنوز برای موتور بهینه نیست تا بهترین نتیجه ممکن را پیشنهاد دهد. شروع سرد موقعی اتفاق میافتد که یک کاربر جدید یا یک فیلم جدید وارد سیستم شود و سیستم در مورد آن اطلاعات خاصی ندارد. پس برای پیشنهاد دادن دچار مشکل میشود. در شروع سرد، دو دسته اصلی وجود دارد:
- شروع سرد آیتمها
- شروع سرد کاربران
در این مقاله قصد داریم مساله شروع سرد کاربران را که یکی از چالشهای ما در فیلیمو بود، بررسی کنیم.

سیستم پیشنهاددهنده اولیه
این سیستم دو بخش اصلی دارد. بخش اول انتخاب فیلمهای منتخب برای نمایش به کاربران و بخش دوم پیدا کردن کاربران (فعال) مشابه (بر اساس فیلمهای انتخاب شده) و محاسبه امتیاز اولیه.
- فیلمهای منتخب
برای انتخاب فیلم از بین هزاران فیلم نیاز به روشی داریم که تا جای ممکن طیف وسیعی از سلایق را پوشش دهد و محبوبیت بالایی داشته باشد. یکی از بهترین روشها روش یادگیری فعال (Active Learning) است که حالتهای مختلفی دارد. در این مقاله (لینک) طبقهبندی آن توضیح داده شده است.
در این روش، سیستم یک امتیاز بر اساس استراتژیهای مختلف به تمام فیلمها میدهد. استراتژیهایی مانند محبوبیت یا آنتروپی (انتخاب آیتمهایی که بیشترین اختلاف آرا را دارند) یا ترکیب آنها و بعد از بین آنها فیلمهایی با بیشترین امتیاز را به کاربران نمایش میدهد. پیشنهاد میکنم برای درک بهتر جزئیات این روش، ارائه دکتر الهی (لینک) را مشاهده کنید.
در نسخه اول از روش غیر شخصیسازی شده استفاده میکنیم و به تمامی کاربران، فیلمهای مشابهی نشان میدهیم. برای بیشتر کردن طیف سلیقه کاربران، ابتدا همه فیلمها خوشهبندی میشوند سپس بر اساس امتیاز سلیقه کلی (استراتژی محبوبیت) هر خوشه را مرتب کرده و فیلمی که بیشترین امتیاز را دارد انتخاب میشود.
- خوشهبندی فیلمها
برای خوشهبندی فیلمها از الگوریتم Hierarchical clustering استفاده شده و به هر فیلم یک برچسب شماره خوشه اختصاص مییابد.
- امتیازدهی به فیلمها در هر خوشه
برای محاسبه سلیقه کلی کاربران از امتیازات به دست آمده از الگوریتم شخصی سازی شده (variational autoencoder) استفاده میکنیم و آن را در فرمول زیر قرار میدهیم (از این فرمول برای انتخاب بهترین فیلمها در سایت imdb استفاده شده است) :
GS = (n ÷ (n + i)) × M + (i ÷ (n + i)) × ?
M = میانگین امتیاز فیلم برای همه کاربران
n = تعداد حضور فیلم در لیست تماشای کاربران
i = حداقل تعداد حضور فیلم در لیست تماشای کاربران برای محاسبه سلیقه کلی (در حال حاضر ۲۰)
C = میانگین تعداد حضور فیلم در لیست تماشای کاربران
با محاسبه امتیاز کلی برای هر فیلم در هر خوشه، هر فیلمی که امتیاز بیشتری داشته داشته باشد به عنوان نماینده آن خوشه انتخاب میشود. در نهایت با استفاده از امتیاز سلیقه همه کاربران، فیلمهای منتخب مرتب میشوند.
در دیاگرام زیر فرآیند این مرحله نمایش داده شده اند.


- پیدا کردن کاربران مشابه
- اضافه کردن فیلمهای مشابه به لیست انتخابی کاربر
برای تقویت لیست انتخابی کاربران و بهبود نتایج، از سیستم پیشنهاددهنده فیلم به فیلم استفاده کردیم. در بعضی از موارد، یافتن کاربران مشابه با داشتن ۳ فیلم، مخصوصا اگر فیلمها بسیار محبوب باشد، نتیجه خوبی ندارد. بنابراین با استفاده از این سیستم، تعدادی فیلم مشابه به ازای هر فیلم انتخابی (بر اساس تعداد انتخابهای کاربران) در نظر گرفته و لیست انتخابی کاربران را تقویت کرده و در نهایت نتایج دقیقتری تولید میشود.
- محاسبه امتیاز اولیه کاربر جدید بر اساس امتیازات کاربران مشابه
این لیست تقویت شده را به عنوان یک لیست تماشا شده توسط کاربر جدید در نظر گرفته و به عنوان ورودی به همراه لیست تماشای همه کاربران به الگوریتم شخصی سازی شده (VAE) میدهیم. با استفاده از لایه میانی این الگوریتم، یک فضای برداری برای همه لیست تماشای کاربران تشکیل میشود. سپس از کتابخانه FAISS استفاده کرده و شبیهترین بردارها یا در واقع لیست تماشای کاربران را پیدا میکنیم. در نهایت ۵ کاربر (فعال) مشابه بر اساس این لیست تماشا انتخاب شده و میانگین امتیازات آنها را به کاربر جدید اختصاص میدهیم.

بر اساس این امتیازات و توضیحاتی که در پست قبلی داده شده است، یک صفحه اولیه برای کاربر ساخته میشود.
در دیاگرام زیر فرآیند یافتن امتیاز کاربران جدید شرح داده شده.

آنالیز رفتار کاربران در انتخاب فیلمهای کاندید
برای آنالیز رفتار کاربران در انتخاب فیلم، ابتدا ترتیب نمایش فیلمها را بررسی کردیم. برای این کار ترتیب نمایش که به صورت پیشفرض بر اساس امتیاز سلیقه کلی بود را یک بار با ترتیب تصادفی و یک بار با برعکس امتیازات کلی مورد آزمایش قرار دادیم.
تعداد فیلمهای نمایش داده شده حدود ۸۰ فیلم است و بازههای زمانی تست، در هر حالت، یک ماه در نظر گرفته شده.
- رفتار کاربران در انتخاب فیلمها با امتیازات کلی
جدول زیر، تعداد انتخاب کابران در هر جایگاه را نشان میدهد. بر اساس این اعداد بیشتر کاربران ۱۰ فیلم اول را انتخاب کردهاند.

نمودار زیر تعداد انتخابهای کاربران در جاهای مختلف را نشان میدهد. همانطور که مشاهده میشود جایگاه ۱ تا ۱۰ بیشترین انتخاب را دارند.

- رفتار کاربران در انتخاب فیلمها با ترتیب برعکس امتیازات کلی
با برعکس کردن امتیازات، کاربران زیادی جایگاههای آخر را انتخاب کردند اما تعداد قابل توجهی از کاربران فقط ۳ فیلم اول را انتخاب کرده و به نظر میرسد توجهی به انتخاب فیلمها ندارند.


- رفتار کاربران در انتخاب فیلمها با ترتیب تصادفی
همانطور که میبینید در این حالت، باز هم فیلمهای جایگاه ۱ تا ۱۰ بیشتر مورد توجه کاربران است.


نتیجهگیری
نتیجه این که تعداد قابل توجهی از کاربران، به جای در نظر گرفتن فیلمهای مورد علاقه خود، توجه بیشتری به فیلمهای ابتدایی لیست که آنها دسترسی آنها راحتتر است، دارند. در واقع کاربران تازهوارد اهمیتی به انتخاب دقیقتر برای داشتن پیشنهاد بهتر نمیدهند. حالا باید دنبال راهحلهایی برای افزایش دقت کاربران برای انتخاب محتوا باشیم.
قدم بعدی
هدف از بررسی این سیستم، بهبود تجربه کاربران تازهوارد است اما در هر دو بخش اصلی بر اساس دادههایی که از رفتار کاربران جمعآوری میکنیم اصلاحاتی قابل انجام است. در بخش اول در حال بررسی و تست استراتژیهای دیگری هستیم که فیلمهای منتخب مناسبتری به کاربران ارائه شود و در بخش دوم الگوریتم و فرمولهای جدید را مورد ارزیابی قرار میدهیم.
مطلبی دیگر از این انتشارات
داکرفایل چند مرحله ای برای ایمیج سبک و سریع در Golang
مطلبی دیگر از این انتشارات
طرح کسب درآمد از آپارات بروز شد
مطلبی دیگر از این انتشارات
نظارت بر کارایی فرآیندهای نرمافزاری یا APM چیست؟