در نوشته قبلی لزوم استفاده از ریکامندر سیستمها رو توضیح دادم و نوشتم که چرا بهشون نیاز داریم. همینطور گفتم که دو رویکرد پالایش مشارکتی و محتوا محور دو رویکرد اصلیای هستند که در ریکامندر سیستمها استفاده میشوند. همینطور رویکرد پالایش مشارکتی و روش زیر مجموعه این رویکرد، یعنی تجزیه ماتریسی رو توضیح دادم. این مطلب ادامه مطلب قبلیه که اگر نخوندید بهتره اول اون رو بخونید.
در تجزیه ماتریسی کاری که میکنیم اینه که از ماتریس امتیازها ویژگیهای کاربر و محصولها رو استخراج میکنیم. پس برای به دست آوردن ویژگیهای قابل اتکا، به شدت وابسته به این هستیم که در ماتریس امتیازها، امتیازهای بیشتری وجود داشته باشد. این به این معناست که برای مثال، هر چه کاربرها فیلمهای بیشتری را امتیاز داده باشند، ما هم ویژگیهای بامعنیتری برای آن کاربرها و آن فیلمها استخراج میکنیم.
اما وقتی یک فیلم جدید ساخته میشه چطور؟ هنوز هیچ کاربری به این قیلم رای نداده، پس هیچ اطلاعاتی در مورد این فیلم نداریم و نمیتونیم بردار ویژگیهای این فیلم رو بسازیم. واضحه که در این صورت نمیشه از تجزیه ماتریسی و به طور کلی پالایش مشارکتی استفاده کرد.
در رویکرد محتوا محور از محتوای موجود در مورد محصولات و یا کاربرها استفاده میشه. یک مثال معروف در این زمینه ریکامندر سیستم اسپاتیفایه. اسپاتیفای سیگنال موسیقی رو پردازش میکنه و ویژگیهای سیگنالی متعددی ازش استخراج میکنه. حالا این ویژگیهای استخراج شده رو به یک شبکه Convolutional Neural Network میده و این شبکه آموزش میبینه تا عمل توصیه رو انجام دهد. این روش در این مقاله معرفی شد و نویسنده اصلی مقاله یعنی آقای Sander Dieleman بعد از انتشار سریعا به استخدام اسپاتیفای در اومد. البته الان در گوگل مشغول به کاره؛ مثل باقی شوالیههای حوزه ماشین لرنینگ.
پردازش زبان طبیعی یا NLP دوشادوش رویکرد محتوا محور میتونه نتایج خیلی جالبی به دست بیاره. مثلا انواع روشهای مدلسازی موضوع یا Topic Modeling میتونند برای توصیه مطالب و نوشتههای وبلاگی به کار برن. این روشها به این شیوه عمل میکنند که بعد از تعریف چندین موضوع مختلف، به هر مطلب یک عدد متناظر با هر موضوع اختصاص میدن که بیانگر ارتباط اون نوشته با اون موضوعه. سپس با توجه به شناختی که از قبل از کاربر به دست آوردهایم، نوشتهها رو به کاربرهای مناسب پیشنهاد بدیم.
مثال بالا یک مثال کاملا متنی بود و غافلگیر کننده نیست که پردازش زبان طبیعی در یک سیستم توصیهگر که محتوای متنی (نوشتههای وبلاگی) رو توصیه میکنه به کار بره. اما جالب اینجاست که کاربرد پردازش زبان طبیعی محدود به این نمیشه. یکی از کارهای جالبی که در حوزه سیستمهای توصیهگر انجام میشه اینه که میشه با محتوای غیر متنی هم مانند محتوای متنی برخورد کرد. اجازه بدید یک مثال بزنم:
ما در NLP روشهایی داریم که به هر کلمه یک بردار اختصاص میدن. برای ساده شدن ماجرا تصور کنید این یک بردار دو بعدیه. وقتی کلمات وارد این فضای دو بعدی شدند، میشه با روشهای سادهای مثل فاصله اقلیدسی، فواصل این کلمات رو در این فضای دو بعدی حساب کرد. نکته شگفت آور اینه که هر چی دو کلمه از نظر معنایی به هم شبیهتر باشند، فاصله نزدیکتری دارند. مثلا در این فضای دوبعدی کلمات پاریس و تهران به هم نزدیک هستند چون هر دو پایتخت محسوب میشوند.
حالا محصولی مثل فوراسکوئر رو تصور کنید. من اگر بیام تمام جاهایی که کاربر “آرش” رفته رو پشت سر هم بنویسم، یعنی بنویسم “آرش لمیز پیتزاسیب کافهکرگدن سوپراستار پیتزاادبرت” ، یک جمله ساختم. حالا اگر برای تمام کاربرها این کار رو انجام بدم چندین جمله دارم که نشون میده کدوم کاربر کجاها رفته. حالا با استفاده از روشهای بالا هر کدام این کلمات رو به فضای چند بعدی جدید ببریم و تو این فضا فواصل رو حساب کنم. حالا میتونم بگم مکانهایی که در این فضا به آرش نزدیکتر هستند مکانهایی هستند که احتمالا آرش دوستشون داره. پس بیام ببینم کدومشون رو هنوز نرفته و بهش پیشنهاد بدم. هیجان انگیز نیست؟ این روش برای اولین بار در این مقاله استفاده شد. البته این روش خیلی محتوا محور نیست. اما فکر کردم خوبه حالا که حرف NLP شد بهش اشارهای کنم.
کارهای جالب دیگهای هم میشه با محتوا کرد. مثلا یکی از محتواهای باارزشی که معمولا داریم نظرات کاربرها در مورد محصولاته. این نظرات از این جهت باارزشند که معمولا در بطن خودشون ویژگیهای محصول رو دارند. پس من میتونم یک محصول رو با استفاده از تمام نظراتی که در موردشون نوشته شده مدل کنم. کاربر رو هم میشه به همین ترتیب با استفاده از نظراتی که نوشته مدل کرد. ساختن این مدلهای آماری کاربر و محصول نیاز داره تا از ترکیب انواع روشهای پردازش زبان طبیعی و پالایش مشارکتی استفاده کرد. به این ترتیب که با استفاده از روشهای پردازش زبان طبیعی تمام نظرات رو وارد فضای برداری جدید کرد و در این فضا با استفاده از مدلهایی مثل شبکه عصبی استخراج ویژگی انجام داد. ویژگیهایی که میتونند به ما در انجام عمل توصیه کمک کنند.
در این نوشته و نوشته قبلی، لزوم استفاده از ریکامندر سیستمها و انواع روشهای اونها رو توضیح دادم. امیدوارم این دو مطلب کمی به شفاف شدن موضوع کمک کرده باشند. در نوشتههای بعدی دوست دارم که کمی بیشتر در مورد پردازش زبان طبیعی و به خصوص نمایش کلمات در یک فضای برداری صحبت کنم. از نگاه خودم این یک موضوع خیلی جذابه که کارهای جالب زیاده میشه باهاش کرد و متاسفانه در زبان فارسی هنوز کار زیادی انجام نشده.