تو دو پارت قبل (۱، ۲ ) کمی در برای ساختار ها صحبت کردیم و اطلاعات کلی درباره این نوع سیستم ها دادیم و بررسی کردیم، توی این بخش و سوم قسمت از چندگانه ی سیستم های توصیه گر به بررسی یک سیستم توصیه گر براساس محتوا می پردازیم توی این بخش قرار نیست خط به خط کد شرح داده بشه چون به دید من از کد ها باید به عنوان یه وسیله برای رسیدن به اهداف خودتون استفاده کنید حالا به هر طریقی یا هر شکلی که بهشون می رسین مهم نیست مهم اینه که چه جوری و برای چه کاری ازشون استفاده می کنید مثلا خود من برای پیاده سازی کدهای قسمت الگوریتم از آموزش های فرادرس کمک گرفتم شمام می تونید از کلی فیلم آموزشی که تو اینترنت ریخته استفاده کنید و لذتش رو ببرین زیاد حاشیه نریم و بریم سر اصل مطلب … .
در قدم اول برای حل یک مسئله باید بدونم مسئله چیه تا بتونیم تصمیم درست رو بگیرم و بریم باهاش با روشی که انتخاب کردیم بجنگیم .. .
و اما مسئله :
تو اینجا ما با یه سایت موزیک در گیریم که می خواد با اطلاعاتی که داره به مخاطبینش بر اساس آهنگی که پخش می کنن بیایم و پیشنهاد موزیک جدید بده .. .
در این حالت اطلاعاتی که ما در اختیار داریم یه فایل Excel که شامل مواردی هست که در عکس زیر می تونید ببیند.. .
همون طوری که می بیند اطلاعاتی که ما داریم از هر آهنگ شامل مواردی مثل : نام خواننده، نام آهنگ، نام آلبوم ، سبک، مدت زمان، میزان لایک، و دیس لایک و تعداد پخش اون آهنگ…
حالا ما باید از این اطلاعات استفاده کنیم تا بتونیم یه سیستم توصیه گر پیشنهاد بدیم اما شما فک می کنید چه طوری این کار رو می شه انجام داد … ؟!
به عبارتی هر روشی که فک می کنید با این داده ها بشه یه پیشنهاد خوبی رو داد درسته و میشه از اون ها استفاده کرد ولی کارایی سیستمه که مهمه اینکه سیستم تو محیط آزمایشی بتونه رضایت مخاطب ها رو جلب کنه و بتونه اون ها رو راضی نگه داره و گرنه به صورت رندم هم میشه اومد و پیشنهاد آهنگ جدید داد .. .
اما ما برای حل ابن مسئله اومدیم و اون رو به یک مسئله معروف و قابل حل نگاشت کردیم و اون مسئله ای نیست جزء مسئله ی فروشنده ی دوره گرد که برای حل اون روش ها و متد های مختلفی معرفی شده که می شه از همه شون استفاده کرد اگه چیزی دربارهی این مسئله نمی دونید ویکی فارسی بهترین پیشنهاد برای شماست تو ویکی برای شرح این مسئله اومده :
تعدادی شهر داریم و هزینه رفتن مستقیم از یکی به دیگری را میدانیم. مطلوب است کمهزینهترین مسیری که از یک شهر شروع شود و از تمامی شهرها دقیقاً یکبار عبور کند و به شهر شروع بازگردد.
اما توی این مورد ما شهری نداریم بلکه تعدای آهنگ داریم و به جای فاصله ما مفهموم شباهت رو داریم که باید به طریقی حساب بشه برای این کار قدم به قدم به سمت جلو حرکت می کنیم.
خوب حالا ما باید بریم به سراغ این مجموعه داده ها (که بهش دیتا ست (DataSet) یا مخرن داده هم می گن )تا براساس اون نیاز هایی که مسئله ما داره رو برطرف کنیم .
ما برای استفاده از این داده ها به صورتی که تو شکل ۱ هستن چند تا مشکل داریم که باید اون ها رو حل کنیم همون طوری که می بیند شکل داده ها با هم متفاوته تعداد به صورت متن یکی زمان و چند تا هم عدد هست که باید همه رو ببریم تو یه اسکیل و مشکل دومی که داریم مربوط به خالی بودن بعضی از قسمت هاست که باید به طریقی اون رو پوشش بدیم و تمام اون رو به فواصل تبدیل کنیم و براساس اون ها به خروجی مناسب برسیم .
هر کدوم از این مشکل ها که گفتیم یک مبحث تو داده کاوی یا سیستم های توصیه گر رو شامل می شن که می تونید با یه سرچ بهشون برسین مثلا برای خلوتی ماتریس بهش می گن مشکل Sparcity که راه حل های مختلفی براش در نظر گرفتن که ما از روش جابگزبن کردن با مقدار خنثی (اسم دقیقش رو نمی دونم همینجوری گفتم ) استفاده می کنیم .. .
و برای یکسان سازی مقادیر ما به هر کدوم از مقادیر یک آیدی می دیم و از اون استفاده می کینم مثلا هر آهنگ یک آیدی هر خواننده یک آیدی منحصر به فرد و به همین صورت تا آخر برای زمان هم اون ها رو به هر شکلی که دوست دارین می تونید تبدیل کنید و ازشون استفاده کنید ما برای اون از یه تابع آماده تو خود Excel استفاده کردیم و اون رو تبدیل به اعداد کردیم و اما برای بازخود هایی که داشتیم از فرمول زیر استفاده کردیم تا اون ها هم تو روند حل مسئله باشن
در نهایت به خروجی زیر رسیدیم
از ستون اول فقط برای نشون دادن خروجی ها استفاده می کنیم و هیچ نقشی در حل مسئله نداره پس حالا باید با استفاده از این مقادیری که داریم برسیم به فواصل بین آهنگ ها (شباهت هر آهنگ با آهنگ در حال بخش) .
خوب برای این کار ما شباهت آهنگ ها راین طوری محاسبه می کردیم که اگه هر یک از ویژهگی های خواننده، ژانر، آلبوم یکسان نبود با عدد یک جمع میشد در غیر این صورت با عدد صفر (فاصله کم تر شباهت بیشتر) برای زمان هم دو عدد رو رند می کردیم واگه در یک رنج بودن باز همین قائده رو اعمال می کنیم و در انتها مجموع کل این مقادیر رو منهای امتیازی که به عنوان بازخورد در آوردیم می کردیم تا به یک ساختاری از فاصله برسیم در انتها این محاسبات مقادیر به صورت جدول زیر حاصل می شد
و حالا که تونستیم مسئله رو نگاشت کنیم به مسئله ی فروشنده ی دوره گرد حالا می تونیم با هر الگوریتمی که بخوایم مسئله رو حل کنیم ما برای حل این مسئله از الگوریتم PSO استفاده کردیم و شما می تونید از هر الگوریتم دیگه ای که دوست دارین استفاده کنید و اما خروجی این مسئله به صورت لیستی از شهرهاست که به ترتیب لیست شده طوری که کمترین میزان مصافتی باشه که طی میشه با به عبارتی بیشترین میزان شباهتی باشه که داره. از این لیست ما چهار تا رو به عنوان پبشنهاد پخش بعدی به کار بر ارائه می دیم و همین قائده برای پخش هر آهنگ برقراره .. .
شاید فک کنید همه این کارا زمان بر باشه و به درد کارای آنلاین نخوره باید بگم که اشتباه فک می کنید تو جدول زیر می تونید مدت زمان و چند مورد دیگه رو ببنید
اگه می خواین این اطلاعاتی که تو جدول اومده رو بدونید چیه و ازش سر در بیارین توصیه ام اینه که یه نگاهی به این مقاله بندازین اگرم که نه می تونین این ریپوزیتوری تو گیت هاب رو ببنید و کد هایی که برای پیاده سازی این مقاله نیاز دارین رو توش پیدا کنید ما برای پیاده سازی از کد های متلب استفاده کردیم .. .
در انتها شاید یه کم قائده خنده دار باشه ولی در هر حال یکی از میلیون ها روش حل این مسئله به حساب می یاد و می شه ازش به عنوان شروع کار تو این حوزه استفاده کرد چون به طریقی باید شروع کرد .. .
شما هم اگه علاقه دارین دست به کار بشین و شروع کنید .. .
اگه سوالی پیشنهادی نقدی نظری دارین خوشحال میشم به همه شون جواب بدم .. .