Predicting Movie Ratings

سیستم‌های پیشنهاد کننده

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

دلیل دومی که می‌خواهیم به مسئله سیستم‌های پیشنهاد کننده بپردازیم آن است که تا الان مشاهده کرده‌اید که انتخاب خصوصیت‌‌ها بسیار مهم و بر کارایی الگوریتم شما بسیار تاثیرگذارند. برخی مسائل و نه همه مسائل یادگیری ماشین وجود دارند که به صورت خودکار می‌توانند خصوصیت‌ها را برای شما انتخاب کنند و سیستم‌های پیشنهاد کننده جزء این مسائل قرار می‌گیرند.

فرض کنید وبسایتی داریم که در آن کاربران می‌توانند به فیلم‌های مطرح شده از صفر تا پنج نمره دهند.

فیلم آلیس (1) باب (2) کارول(3) دیو(4)
Love at Last 5 5 0 0
Romance Forever 5 ؟ ؟ 0
Cute Puppies of Love ؟ 4 0 ؟
Nonstop Car Chases 0 0 5 4
Sword Vs. Karate 0 0 5 ؟

برای فرمول بندی مسئله پارامترهای زیر را معرفی می‌کنیم:

تعداد کاربران \(n_u = \)

تعداد فیلم‌ها \(n_m = \)

اگر کاربر \(j\) به فیلم \(i\) امتیاز داده باشد \(r(i,j) = 1\)

(تنها در صورتی تعریف می‌شود که \(r(i,j) = 1\)). امتیازی که از طرف کاربر \(j\) به فیلم \(i\) داده شده \(y(i,j) = \)

مسئله این است که می‌خواهیم نمره فیلم‌هایی که کاربر به آن نمره نداده را پیش‌بینی کنیم. بنابراین کاری که توسط سیستم پیشنهاد کننده انجام می‌شود این است که سعی می‌کند نمره محصولاتی که کاربر به آن نمره نداده را پیش‌بینی کند و بر اساس آن محصول را به کاربر پیشنهاد دهد.

مثلا در نمونه بالا می‌توان دریافت که آلیس و باب طرفدار فیلم‌های رمانتیک هستند در حالیکه کارول و دیو طرفدار فیلم‌های اکشن هستند و بر این اساس می‌توان به آن‌ها فیلم‌های دیگری پیشنهاد داد.

پیشنهاد بر اساس محتوا

می‌خواهیم یکی از رویکردهای ساختن یک سیستم پیشنهاد کننده با عنوان پیشنهاد کننده بر اساس محتوا را معرفی کنیم.

در مثال مطرح شده (جدول بالا) \(n_u=4\) و \(n_m=5\). چگونه مقادیری که تعیین نشده‌اند (علامت سوال‌ها) را پیش‌بینی کنیم؟

بیایید فرض کنیم که برای هر یک از این فیلم‌ها یک سری خصوصیت داشته باشیم، به صورت خاص مثلا دو خصوصیت \(x_1\) و \(x_2\) را داشته باشیم که به ترتیب مقیاسی از میزان رمانتیک یا اکشن بودن فیلم را به ما می‌دهند.

\(x_1\)
(romance)
\(x_2\)
(action)
0.9 0
1.0 0.01
0.99 0
0.1 1.0
0 0.9

بنابراین با فرض \(x_0=1\) می‌توانیم هر فیلم را به صورت برداری از این خصوصیت‌ها معرفی کنیم. مثلا برای فیلم‌های اول و دوم می‌توان نوشت:

$$ x^{(1)} = \begin{bmatrix} 1 \\ 0.9 \\ 0 \end{bmatrix} \quad x^{(2)} = \begin{bmatrix} 1 \\ 1 \\ 0.01 \end{bmatrix} $$

برای هر کاربر \(j\) پارامترهای \(\theta^{(j)} \in \mathbb{R}^3\) را یاد می‌گیریم و بوسیله \((\theta^{(j)})^Tx^{(i)}\) پیش‌بینی می‌کنیم کاربر \(j\) فیلم \(i\) را چگونه دسته‌بندی می‌کند. به صورت رسمی اگر بخواهیم مسئله را فرمول‌بندی کنیم، چنین می‌نویسیم:

\(r(i,j) = 1\) if user \(j\) has rated movie \(i\) (\(0\) otherwise)

\(y(i,j) =\) rating by user \(j\) on movie \(i\) (if defined)

\(\theta^{(j)} = \) parameter vector for user \(j\)

\(x^{(i)} = \) feature vector for movie \(i\)

for user \(j\), movie \(i\), predicted rating: \((\theta^{(j)})^Tx^{(i)}\)

برای یادگرفتن \(\theta^{(j)}\) (پارامتر برای کاربر \(j\)) خواهیم داشت:

$$ \min_{\theta^{(j)}} \frac{1}{2} \sum_{i:r(i,j)=1} \left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)^2 +\frac{\lambda}{2}\sum_{k=1}^{n}(\theta^{(j)}_{k})^2 $$

و برای یادگیری \(\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}\):

$$\begin{eqnarray} \min_{\theta^{(1)},\theta^{(2)},...,\theta^{(n_u)}} \frac{1}{2} \sum_{j=1}^{n_u} &\sum_{i:r(i,j)=1}& \left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)^2 \\ &+&\frac{\lambda}{2}\sum_{j=1}^{n_u}\sum_{k=1}^{n}(\theta^{(j)}_{k})^2 \end{eqnarray}$$

که در آن منظور از \(i:r(i,j)=1\) در عبارت جمع آن است که تنها روی عبارت‌هایی که کاربر نظر خود را ارائه داده است جمع صورت گیرد.

اگر بخواهیم این مسئله بهینه سازی را به روش Gradient Descent حل کنیم، برای \(k=0\) خواهیم داشت:

$$ \theta_{k}^{(j)} := \theta_{k}^{(j)} - \alpha\sum_{i:r(i,j)=1} \left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)x_{k}^{(i)} $$

و برای \(k \neq 0\):

$$\begin{eqnarray} \theta_{k}^{(j)} &:=& \theta_{k}^{(j)} - \\ &\quad&\alpha\left(\sum_{i:r(i,j)=1}\left((\theta^{(j)})^Tx^{(i)}-y^{(i,j)}\right)x_{k}^{(i)} + \lambda \theta_{k}^{(j)} \right) \end{eqnarray}$$