فیلترینگ همکارانه(Collaborative Filtering)، یکی از رایجترین روش های استفاده شده در ساخت سیستمهای توصیهدهنده هوشمند است که با گردآوری اطلاعات بیشتری درباره کاربران، میتواند بهترین توصیهها را ارائه دهد.
بیشتر وبسایتها مانند آمازون، یوتیوب و نتفلیکس از فیلترینگ همکارانه به عنوان بخشی از سیستمهای پیشنهاد دهنده پیچیدهی خود استفاده میکنند.
فیلترینگ همکارانه یک تکنیک است که میتواند اقلامی را که کاربر ممکن است پسندیده باشد بر اساس واکنشهای کاربران مشابه فیلتر کند. این تکنیک با جستجو در یک گروه بزرگ از افراد و پیدا کردن یک مجموعه کوچکتر از کاربران با سلیقههای مشابه با یک کاربر خاص عمل میکند. این به اقلامی که آنها دوست دارند نگاه میکند و آنها را ترکیب کرده و یک لیست رتبهبندی شده از پیشنهادها ایجاد میکند.
برای ساخت یک سیستم که به طور خودکار میتواند به کاربران مواردی را به عنوان پیشنهادات مبتنی بر ترجیحات دیگر کاربران پیشنهاد دهد، اولین مرحله پیدا کردن کاربران یا موارد مشابه است. مرحله دوم پیشبینی امتیازات مواردی است که تا کنون توسط یک کاربر امتیاز داده نشدهاند. بنابراین، شما به پاسخ این سوالات نیاز دارید:
۱. چگونه مشخص میشود که کاربران یا موارد چگونه به یکدیگر شباهت دارند؟
۲. با توجه به اینکه میدانید کدام کاربران شبیه به هم هستند، چگونه میتوانید امتیازی را که یک کاربر به یک مورد میدهد بر اساس امتیازهای کاربران مشابه، محاسبه کنید؟
۳. چگونه میتوانید دقت امتیازهای محاسبه شده را اندازهگیری کنید؟
دو سوال اول پاسخ مشخصی ندارند. فیلترینگ همکارانه خانوادهای از الگوریتمها است که در آن چندین روش برای پیدا کردن کاربران یا موارد مشابه و چندین روش برای محاسبه امتیاز بر اساس امتیازهای کاربران مشابه وجود دارد. بسته به انتخابهایی که انجام میدهید، به یک نوع رویکرد فیلترینگ همکارانه میرسید. در این مقاله، شما متوجه انواع مختلف روشهای پیدا کردن شباهت و پیشبینی امتیازها خواهید شد.
یک نکته مهم برای در نظر گرفتن این است که در یک رویکرد کاملاً مبتنی بر فیلترینگ همکارانه، شباهت تنها بر اساس امتیاز (صریح یا ضمنی) که یک کاربر به یک مورد میدهد، محاسبه میشود. به عنوان مثال، دو کاربر ممکن است مشابه در نظر گرفته شوند اگر از ده فیلم علیرغم تفاوت بزرگی در سن آنها، به یکسان امتیاز دهند.
دسته اول شامل الگوریتمهای مبتنی بر حافظه است که در آن تکنیکهای آماری برای کل مجموعه دادهها بهکار میروند تا پیشبینیها محاسبه شوند.
برای یافتن امتیاز R که یک کاربر U به یک مورد I میدهد، رویکرد شامل موارد زیر است:
یافتن کاربران مشابه با U که به مورد I امتیاز دادهاند
محاسبه امتیاز R بر اساس امتیازهای کاربرانی که در مرحله قبلی پیدا شدهاند
شما هر کدام از این موارد را در بخشهای بعدی بهطور دقیق خواهید دید.
چگونگی یافتن کاربران مشابه بر اساس امتیازها
برای درک مفهوم شباهت، ابتدا یک مجموعه داده ساده ایجاد میکنیم.
داده شامل چهار کاربر A، B، C و D است که به دو فیلم امتیاز دادهاند. امتیازات در لیستها ذخیره شدهاند و هر لیست شامل دو عدد است که امتیاز هر فیلم را نشان میدهد:
- امتیازات A: [1.0، 2.0].
- امتیازات B: [2.0، 4.0].
- امتیازات C: [2.5، 4.0].
- امتیازات D: [4.5، 5.0].
برای شروع با یک اشاره بصری، امتیازات دو فیلم داده شده توسط کاربران را روی یک نمودار رسم کرده و الگویی را جستجو کنید. نمودار به شکل زیر است:
در نمودار بالا، هر نقطه نمایانگر یک کاربر است و بر اساس امتیازاتی که به دو فیلم دادهاند، رسم شدهاند.
نگاه کردن به فاصله بین نقاط به نظر یک روش خوب برای تخمین شباهت است، درست است؟ میتوانید با استفاده از فرمول فاصله اقلیدسی بین دو نقطه، فاصله را محاسبه کنید.
پس از تعیین لیستی از کاربران مشابه یک کاربر U، شما باید امتیاز R را که کاربر U به یک مورد I خاص خواهد داد، محاسبه کنید. دوباره، مانند شباهت، شما میتوانید این کار را به چندین روش انجام دهید.
میتوانید پیشبینی کنید که امتیاز R کاربر به یک مورد I نزدیک به میانگین امتیازات داده شده به I توسط 5 یا 10 کاربر برتر مشابه با U خواهد بود.
روشهایی که در مثالهای بالا توضیح داده شدهاند، جایی است که ماتریس امتیازات برای پیدا کردن کاربران مشابه بر اساس امتیازاتی که از آنها میگیرند استفاده میشود، به نام فیلترینگ همکاریای کاربر یا کاربر-کاربر است. اگر از ماتریس امتیازات برای پیدا کردن موارد مشابه بر اساس امتیازات داده شده به آنها توسط کاربران استفاده شود، آنگاه این رویکرد به عنوان فیلترینگ همکاریای مبتنی بر آیتم شناخته میشود.
این دو رویکرد در نظریه ریاضی کاملاً مشابه هستند، اما بین آنها تفاوت مفهومی وجود دارد. اینجاست که دو رویکرد با یکدیگر مقایسه میشوند:
مبتنی بر کاربر: برای یک کاربر U، با یک مجموعه از کاربران مشابه که بر اساس بردارهای امتیازدهی شامل امتیازات دادهشده به موارد تعیین میشود، امتیاز برای یک مورد I که تاکنون امتیاز نگرفته است، با انتخاب N کاربر از لیست شباهتی که مورد I را امتیاز دادهاند و محاسبه امتیاز بر اساس این N امتیازها پیدا میشود.
مبتنی بر آیتم : برای یک مورد I، با یک مجموعه از موارد مشابه که بر اساس بردارهای امتیازدهی شامل امتیازات کاربران دریافتی تعیین میشود، امتیاز توسط یک کاربر U که آن را امتیاز نداده است، با انتخاب N مورد از لیست شباهتی که توسط U امتیاز داده شدهاند و محاسبه امتیاز بر اساس این N امتیازها پیدا میشود.
رویکرد مبتنی بر مورد توسط آمازون توسعه داده شده است. در یک سیستم که تعداد کاربران بیشتری از موارد دارد، فیلترینگ مبتنی بر آیتم نسبت به مبتنی بر کاربر سریعتر و پایدارتر است. این موثر است زیرا معمولاً میانگین امتیاز دریافتی توسط یک مورد به همان سرعتی که میانگین امتیاز داده شده توسط یک کاربر به موارد مختلف تغییر نمیکند. همچنین این رویکرد بهتر از رویکرد مبتنی بر کاربر عمل میکند هنگامی که ماتریس امتیازات پراکنده است.
اگرچه، رویکرد مبتنی بر آیتم برای مجموعهدادههایی با موارد اکسپلور یا سرگرمی مانند MovieLens عملکرد ضعیفی دارد و توصیههایی که به کاربران هدف داده میشود بسیار واضح به نظر میرسد.
الگوریتمهای مبتنی بر مدل، به روشهایی اطلاق میشود که شامل یک مرحله برای کاهش یا فشردهسازی ماتریس کاربر-مورد بزرگ اما پراکنده است. برای درک این مرحله، داشتن یک فهم اولیه از کاهش ابعاد بسیار مفید است.
در ماتریس کاربر-مورد، دو بعد وجود دارد:
1. تعداد کاربران
2. تعداد موارد
اگر ماتریس اغلب خالی باشد، کاهش ابعاد میتواند عملکرد الگوریتم را از نظر هم فضا و هم زمان بهبود ببخشد. میتوانید از روشهای مختلفی مانند تجزیه ماتریس یا اتوانکدرها برای این کار استفاده کنید.
تجزیه ماتریس را میتوان به عنوان شکستن یک ماتریس بزرگ به تولید حاصلضرب دو ماتریس کوچکتر دانست. این مشابه تجزیه عددی است، که در آن ۱۲ میتواند به شکل ۶ × ۲ یا ۴ × ۳ نوشته شود. در مورد ماتریسها، ماتریس A با ابعاد m × n میتواند به حاصلضرب دو ماتریس X و Y با ابعاد به ترتیب m × p و p × n کاهش یابد.
بسته به الگوریتم استفاده شده برای کاهش ابعاد، تعداد ماتریسهای کاهش یافته ممکن است بیشتر از دو باشد.
ماتریسهای کاهش یافته در واقع کاربران و موارد را به صورت جداگانه نشان میدهند. سطرهای m در ماتریس اول کاربران را نشان میدهند و ستونهای p درباره ویژگیها یا ویژگیهای کاربران اطلاعاتی ارائه میدهند. به همین ترتیب، برای ماتریس مورد، n مورد و p ویژگی وجود دارد. در ادامه مثالی از نحوه تجزیه ماتریس آورده شده است.
در تصویر بالا، ماتریس به دو ماتریس کاهش یافته تقسیم میشود. کسی که در سمت چپ است، ماتریس کاربر با m کاربر است و کسی که در بالا است، ماتریس مورد با n مورد است. امتیاز ۴ کاهش یافته یا تجزیه شده به:
1. بردار کاربر (۲، -۱)
2. بردار مورد (۲.۵، ۱)
دو ستون در ماتریس کاربر و دو ردیف در ماتریس مورد، عوامل نهان نامیده میشوند و نشان دهنده ویژگیهای مخفی درباره کاربران یا موارد هستند. تفسیر ممکن از تجزیه ممکن است به این شکل باشد:
- فرض کنید در بردار کاربری (u، v)، u نشاندهنده این است که چقدر یک کاربر دوست دارد که ژانر ترسناک باشد و v نشاندهنده این است که چقدر آنها از ژانر عاشقانه خوششان میآید.
- بردار کاربر (۲، -۱) بنابراین نشاندهنده یک کاربر است که از فیلمهای ترسناک خوششان میآید و آنها را به صورت مثبت امتیاز میدهند و از فیلمهایی که عاشقانه هستند و امتیازات منفی میدهند انتقاد دارند.
- فرض کنید در بردار مورد (i، j)، i نشان دهنده این است که چقدر یک فیلم به ژانر ترسناک تعلق دارد و j نشان دهنده این است که چقدر این فیلم به ژانر عاشقانه تعلق دارد.
- فیلم (۲.۵، ۱) امتیاز ۲.۵ ترسناک و امتیاز ۱ عاشقانه دارد. ضرب آن با بردار کاربر با استفاده از قوانین ضرب ماتریس به شما میدهد (۲ × ۲.۵) + (-۱ × ۱) = ۴.
بنابراین، فیلم به ژانر ترسناک تعلق داشت و کاربر ممکن است آن را ۵ امتیاز دهد، اما درجه ورود آهسته عاشقانه باعث میشود امتیاز نهایی به ۴ کاهش یابد.
در مثال، دو عامل پنهان برای ژانرهای فیلم داشتیم، اما در سناریوهای واقعی، این عوامل پنهان نیاز به تجزیه و تحلیل زیادی ندارند. این الگوها در دادهها وجود دارند که به طور خودکار نقش خود را ایفا میکنند، بدون این که معنای پایه آنها را بازگشتی کنید.
تعداد عوامل پنهان تاثیری بر توصیهها دارد به نحوی که هر چه تعداد عوامل بیشتر باشد، توصیهها به شخصیتها نزدیکتر میشوند. اما تعداد زیادی از عوامل پنهان میتواند به اورفیتینگ در مدل منجر شود.
یکی از الگوریتمهای محبوب برای تجزیه ماتریس، الگوریتم تجزیه مقادیر تکین (SVD) است. SVD زمانی به معرض توجه قرار گرفت که تجزیه ماتریس عملکرد خوبی در مسابقه جایزه Netflix ارائه داد. الگوریتمهای دیگر شامل PCA و تغییرات آن، NMF و غیره میباشند.
در مقاله بعدی، قصد داریم الگوریتمهای فیلترینگ همکارانه را به زبان پایتون پیادهسازی کنیم. با استفاده از این الگوریتمها، میتوانیم به طور اتوماتیک به کاربران پیشنهادهایی در مورد مواردی که ممکن است آنها را جذب کند، ارائه دهیم. در این پیادهسازی، قرار است از کتابخانههایی مانند Surprise استفاده کنیم که امکان ایجاد سیستمهای توصیه با الگوریتمهای مختلف را در زبان پایتون فراهم میکنند. این الگوریتمها عبارتند از: الگوریتمهای مبتنی بر K-Nearest Neighbours (k-NN)، مدلهای مبتنی بر ماتریس مانند Singular Value Decomposition (SVD) و روشهای مبتنی بر افزایش بعد مانند Principle Component Analysis (PCA).