افزودن محتوا به آیتم

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

راه‌حل

recommender.ir متدی((ternItem)) برای افزودن و ویرایش ویژگی‌های یک آیتم در اختیار قرار می‌دهد. این متد اجازه می‌دهد مهمترین ویژگی‌های محتوای آیتم را نیز تعریف کنید. برای مثال در مورد یک گوشی تلفن همراه احتمالا این ویژگی‌ها شامل اندازه صفحه نمایش، کمپانی سازنده،‌ نوع گارانتی، رنگ، قیمت و سی‌پی‌یو است. در یک سایت ارائه فیلم و سریال این ویژگی‌ها به ازای هر آیتم شامل نام کارگردان، هنرپیشه‌ها، ژانر و سال تولید است. این ویژگی‌ها توسط کسب‌و‌کار شما تعیین و معرفی می‌گردند.

 

کاربرد‌ها
ویژگی‌ها در تحلیل دقیق‌تر رفتار کاربر با جزئیات آیتم، بسیار کارامد هستند. به کمک ویژگی‌های روی آیتم می‌توان بر توان تحلیل و تصمیم سازی بلادرنگ افزود.

توضیحات فنی

این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/termItem/[itemID](/term1/...)(?list)(?action=delete)

مثال:
برای فیلم سینمایی goodBadUgly ویژگی‌هایی را ثبت می‌کند. :

Request:
/termItem/goodBadUgly/Western/Classic/Drama/ClintEastwood

فراموشی آیتم

 

آیتم‌هایی را از سایت حذف کرده‌ام. دیگر در فهرست محصولاتم نیستند. چه کنم که دیگر در محاسبات رکامندر نیز لحاظ نشوند؟

راه‌حل

متد فراموشی ((forget)) یک یا چند آيتم را به فراموشی می‌سپارد. در مواردی مثل به اتمام رسیدن یک آیتم (اتمام موجودی)، تغییر فصل یا هر زمانی که بخواهیم چیزی دیگر نمایش داده نشود از این متد استفاده می‌کنیم. هر آنچه توسط این متد فراموش شود، دیگر در محاسبات لحاظ نمی‌شود.

 

توضیحات فنی
برای دریافت فهرست آيتم‌های فراموش شده این متد را با پارامتر list فراخوانی کنید. برای دریافت فهرست آيتم‌های فراموش شده این متد را با پارامتر list فراخوانی کنید. در صورتی که این متد را برای آیتمی، به اشتباه فراخوانی کرده‌اید، و می‌خواهید آیتم حذف شده، مجدداً در محاسبات لحاظ شود، متد را با پارامتر remember=1 فراخوانی کنید. به مثال‌ها توجه کنید.

این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/forget/[itemID1](/[itemID2]/...)(?list)(?remember=1)

مثال:
دستور زیر سه آیتم را به فراموشی می‌سپارد:

Request:
/forget/LvAYS/X7dj9/uSE8p

محبوبت‌ترین‌ها

محبوب‌ترین آیتم‌های سایت شما کدامند؟  از دیروز تا اکنون چه تغییری در فهرست مرتب شده محبوب‌ترین آیتم‌های سایت شما حاصل شده است؟ کاربران به کدام آيتم‌ها علاقه بیشتری نشان می‌دهند؟

راه‌حل

متد محبوبترین‌ها ((mostPopularItems)) دقیقا برای حل این مسئله طراحی و پیاده سازی شده است. براساس شمارش میزان کلیکی که هر آيتم تا اکنون دریافت کرده است، این متد محبوب‌ترین آیتم‌سایت شما را شناسایی می‌کند. محبوب‌ترین آیتم‌ها به مرور زمان در صورتی که از میزان کلیک‌شدنشان کاسته شود، افت نموده و جای خودرا به آيتم‌هایی که هم اکنون بسیار محبوب‌هستند می‌دهند. فاکتور فراموشی ((Forgetfulness)) بر این متد نیز اثر گذار است. این متد قادر است تمامی‌آیتم‌های سایت شما را بر اساس میزان محبوبیت مرتب کند.
recommender.ir  به کاربر سایت شما، محبوب‌ترین آیتم‌ها را نمایش می‌دهد. از سوی دیگر‌ بخش‌هایی همچون بازاریابی به چنین داده‌هایی نیازمندند.

تصویر زیر نمونه‌ای از کاربرد متد محبوب‌ترین‌ها:

Screen Shot 2017-03-05 at 8.30.42 PM

توضیحات فنی

با فراخوانی این متد، فهرستی مرتب شده بر اساس میزان محبوبیت آیتم‌های موجود سایت شما، به تعداد مورد نیاز تولید می‌شود.
این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/mostPopularItems(?howMany=n)

مثال:
دستور زیر برای کاربری با شناسه79047 ، ده پیشنهاد که بر اساس میزان علاقه وی مرتب شده است، باز‌می‌گرداند:

Request:
/mostPopularItems

Response:
[[“YDIN”,1.103431],[“VBx3”,1.1000912],[“MB83”,1.0796349],[“FC4O”,1.0775955],[“kt0x”,1.075396],[“vHxQ”,1.0632982],[“yXpA”,1.0557796],[“xu1s”,1.0472054],[“t8c1”,1.0308288],[“536R”,1.026107]]

 

آیتم‌های مشابه

کاربر در جستجوی آیتمی به سایت آمده است. چگونه آیتم‌ها را مرتب شده به وی نمایش دهیم؟ چگونه آیتم‌های مشابه را بیابم؟ کدام آیتم‌ها به آنچه کاربر انتخاب کرده است نزدیک‌ترند؟ آيا سایت ما قادر به مرتب سازی آیتم‌ها بر اساس سلیقه و رفتار کاربران است؟

USER_COMMING

در صورتی که سایت‌ مجهز به راه‌حل‌های درک رفتار کاربر نباشد، کاربر گیج و مایوس می‌شود.

USER_CONFUSED

راه‌حل
نزدیکی و دوری دو آيتم، در نظر هر یک از ما متفاوت است. recommender.ir به کمک گردآوری تمامی تعامل‌های کاربران با آيتم‌ها قادر به دسته بندی و محاسبه میزان نزدیکی آنها با یکدیگر است. نتایج این محاسبات کاربران را در یافتن آنچه می‌جویند یاری می‌کند:

USER_HAPPY
خوشه‌بندی آیتم‌ها کاربر را از سردرگمی نجات می‌دهد. این متد‌ میتواند مکمل جستجو باشد. نتایج جستجو می‌توانند نزدیک‌ترین آیتم‌ها به نتیجه جستجو باشند. recommender.ir  کاربر را در یافتن آنچه می‌چوید یاری ‌می‌کند. همچنین به شما دید خوبی از وضعیت کالاها در نظر کاربران و مشتریان ارائه می‌کند. recommender.ir  این مهم را بدون پرسیدن هیچ سوالی از کاربر و تنها بر اساس رفتار وی انجام می‌دهند. تصاویر زیر نمونه‌هایی از کاربرد‌های متد پیشنهاد را نمایش می‌دهند.

تصویر زیر نمونه‌ای از کاربرد متد شباهت((Similarity)) در یک سایت ارائه فیلم و سریال را نمایش می‌دهد:

Screen Shot 2017-01-25 at 7.53.11 PM

 

توضیحات فنی

لیستی از آیتم‌های مشابه با یک یا چند آیتم را برمی‌گرداند. محاسبات بر اساس هوش جمعی و سلایق عموم کاربران صورت می‌پذیرد. شباهت آیتم‌ها را در نظر عموم کاربران با عدد از ۰ تا ۱ اعلام می‌کند. ۰ یعنی شباهتی ندارند، و ۱ یعنی کاملا شبیه هستند. این متد برای معرفی اقلام مشابه یک قلم خاص، مناسب است. مشتریان recommender.ir از این متد استفاده فراوان می‌برند.
این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/similarity/[itemID1](/[itemID2]/...)?howMany=n

مثال:
دستور زیر شبیه ترین آیتم‌ها به آیتم MB83 را بر اساس سلایق کل کابران باز می‌گرداند. نتایج بر اساس میزان شباهت‌ مرتب شده‌اند.

Request:
/similar/ME83

Response:
[[“IuN”,0.88957554],[“YD1N”,0.88377786],[“Y4E”,0.8679556],[“wi4”,0.8623828],[“IiA”,0.82480633],[“Deg”,0.7855469],[“yId”,0.7726882],[“PcB”,0.76211375],[“YQI”,0.7277209],[“TvL”,0.7059829]]

مثال:
دستور زیر ۱۵ شبیه‌ترین آیتم‌ها به آیتم‌ های ME83 و LvYS را بر اساس سلایق کل کابران باز می‌گرداند. نتایج بر اساس میزان شباهت‌ مرتب شده‌اند.

Request:
/similarity/ME83/LvYS?howMany=15

Response:
[[“TIvuN”,0.5077943],[“Y4LuE”,0.48656264],[“wOGi4”,0.4846279],[“YDI1N”,0.48409966],[“crsD1”,0.47017336],[“IaiOA”,0.4584767],[“yIuod”,0.4383851],[“DyeGg”,0.43608567],[“TPocB”,0.43525326],[“xTokW”,0.43081596],[“YQcIl”,0.4175664],[“2tIbJ”,0.40256935],[“TdvZL”,0.40242133],[“wqjxN”,0.39857048],[“CtrIF”,0.39653054]]

پیشنهادهای جذاب برای گروهی از کاربران

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

 

GROUP_USRERS
راه‌حل

متد پیشنهادبه‌گروه ((recommendToGroup)) برای حل چنین مسئله‌ای طراحی و پیاده سازی شده است. برای پیشنهاد به کاربرانی که قبلا رد‌پایی از آنها در تعامل با آيتم‌های سایت بدست آورده‌ایم، این متد گزینه‌ای بسیار توانمند است. رکامندر هر آنچه کاربران قبلا دیده‌اند را به خاطر دارد. به یاد دارد. همچنین با استفاده از مکانیزم‌های پیش‌بینی((Prediction))، تعامل‌های بعدی کاربر را محاسبه نموده، و آیتم‌هایی که فصل مشترک علایق گروه بوده و همچنین مشاهده نشده است را محاسبه و ارائه می‌کند. این متد به کاربرانی که لاگین نکرده‌اند نیز خدمت می‌کند. آگاهی از سلیقه گروهی از کاربران، بدون پرسیدن حتی یک سوال، مزیتی ارزشمند محسوب می‌گردد. سایت‌های مجهز به recommender.ir قادر به تحلیل و شناسایی بلادرنگ سلیقه گروهی کاربر نیز هستند. پس قادر به کشف سلایق گروهی کاربران نیز هستند. این عمل بدون پرسیدن هیچ سوالی از کاربر و تنها بر اساس رفتار گروهی کاربران انجام می‌‌گیرد.

 

توضیحات فنی

برای ارائه پیشنهاد به گروهی از کاربران، از متد recommendToGroup استفاده کنید. این متد به کاربرانی که رفتار آنها قبلاً مورد شناسایی قرار گرفته است، به تعداد n آیتم، پیشنهاد می‌دهد. محاسبه این مقادیر بر اساس آیتم‌هایی است که کاربران قبلاً مشاهده ننموده و با بیشترین احتمال، علاقمند به مشاهده آنها هستند. این محاسبات بر اساس آخرین انتخاب‌های هر یک از کاربران به روز شده و بلادرنگ از تغییرات داده‌ها اثر می‌گیرد. نتیجه بر اساس میزان علاقه آنها مرتب شده است.

این متد قادر به تولید نتایج لرزان((Dither)) نیز می‌باشد. هدف از تولید نتایج لزران، حفظ جذابیت نتایج برای کاربر است. برای تولید محاسبات به صورت لرزان از پارامتر dither استفاده کنید.
این متد را با درخواست GET فراخوانی کنید.

http://IP:Port//recommendToGroup/[UserID1](/[itemID2]/...)(?howMany=n)(?dither)

مثال:
دستور زیر برای کاربری با شناسه79047 ، ده پیشنهاد که بر اساس میزان علاقه وی مرتب شده است، باز‌می‌گرداند:

Request:
/recommendToGroup/72514/14657/81777/44645?howMany=30

Response:
[[“LPdg”,0.3655776],[“YEO8”,0.34098718],[“mW6t”,0.34054163],[“ZHfx”,0.33835948],[“iy03”,0.33485165],[“CE5o”,0.32850233],[“ML94”,0.32368943],[“AQzi”,0.32110584],[“AExI”,0.31863493],[“Dop0”,0.31736073],[“JhT7”,0.31651047],[“uiQ8”,0.3150408],[“1s9N”,0.31265405],[“eUy5”,0.3102179],[“G9R0”,0.30913022],[“3EJL”,0.30889666],[“Tnya”,0.30778572],[“ECTk”,0.30778566],[“Exkm”,0.3011643],[“Ax2Z”,0.30104882],[“9NAD”,0.30077142],[“ajFi”,0.29385117],[“JOoQ”,0.2934542],[“FT0M”,0.2922952],[“F70M”,0.29157954],[“0p4m”,0.2904996],[“QPZp”,0.28857803],[“pZgA”,0.28742686],[“Ocxm”,0.28590965],[“FQ4s”,0.28580892]]

 

مثال:
دستور زیر برای کاربریانی با شناسه‌های 3452، 7712 و 8073 در سه پرسش یکسان، نتایجی لرزان و متفاوت تولید کرده است. نتایج در شعاع معینی به صورتی انتخاب شده‌اند که ضمن نزدیکی با سلیقه کاربران گروه سه نفره 3452، 7712 و 8073، برای آنها جذاب بوده و تکراری نشوند:

Request:
/recommendToGroup/8073/7712/3452?howMany=5&dither

Response:
[[“GE”,0.012252931],[“LinkedIn”,0.13154432],[“Database”,0.07991363],[“BMW-520i”,0.018732544],[“Datalogy”,0.027873518]]

Request:
/recommendToGroup/8073/7712/3452?howMany=5&dither

Response:
[[“BMW-520i”,0.018732544],[“Chaloos”,0.09831109],[“LinkedIn”,0.13154432],[“Enterdata”,0.019772794],[“Snake”,0.08352881]

Request:
/recommendToGroup/8073/7712/3452?howMany=5&dither

Response:
[[“OX”,0.029247146],[“GoldStar”,0.38484973],[“Snake”,0.08352881],[“GE”,0.012252931],[“Chaloos”,0.09831109]]

پیشنهاد های تعیین کننده برای تازه‌وارد‌ها

کاربری برای اولین بار به سایت شما آمده است. سایت شما به تعداد بسیار زیادی آیتم جذاب برای وی تدارک دیده است. ولی کاربر در نگاه اول آنچه می‌جوید نمی‌یابد. چرا که سایت شما تعداد بسیار زیادی آیتم‌های دیگر نیز دارد. پس احتمال اینکه کاربر جدید بدون جستجو، خرسند شود، ناچیز است. چه باید کرد؟

راه‌حل

متد پیشنهاد به تازه‌وارد ((recommendToNewcomer))، سر‌شاخه‌هایی((Centroid)) از آيتم‌ها را از شما گرفته و بر اساس‌آنها به تعداد موردنیاز، پیشنهاد‌هایی جذاب تولید‌ می‌کند. این پیشنهاد‌ها که بر اساس آیتم‌هایی صورت می‌پذیرد، تازه‌واردی که برای اولین بار به سایت آمده را در یافتن آنچه می‌پسندد راهنمایی می‌کند. مانند یک فروشنده خبره که ابتدا چند نمونه به مشتری معرفی می‌کند. سپس بر اساس بازخوردی که از مشتری می‌گیرد وی را به سمت آنچه باید، راهنمایی می‌کند. ارائه کلیاتی از آیتم‌های سایت در یک نظر، برای کاربر تازه‌وارد بسیار جذاب است. وی‌ با مشاهده لیستی که حاوی تعدادی از آیتم‌های جذاب از گروه‌های متنوع است، بسادگی در مسیر دلخواه قرار می‌گیرد. این متد برای کاربرانی که برای اولین بار به سایت شما می‌آيند، احتمال مواجهه با آیتم‌هایی که آنها را به سمت انتخاب‌های درست راهنمایی کند افزایش می‌دهد.

 

Onboarding Strategies to Set New Employees Up for Success

پس در صفحه اول سایت، یا به تناسب زیرگروه‌های کالا (سرشاخه‌ها)‌ میتوان برای کاربر چکیده ای از آیتم‌ها را در قالب یک لیست معرفی کرد. با اولین کلیک کاربر بر روی یک آيتم، میتوان از متد recommend یا دیگر متدها نیز بهره جست. چرا که از این پس از وی ردپایی داریم و دیگر او را یک تازه وارد نمی‌دانیم.

توضیحات فنی

برای ارائه پیشنهاد به تازه‌وارد، از متد recommendToNewcomer استفاده کنید. این متد برای شخصی که هیچ اطلاعاتی از وی نداریم، بر اساس سرشاخه‌ها پیشنهاد‌هایی جذاب ارائه می‌کند.
این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/recommendToNewcomer/[itemID1](/[itemID2]...)(/?howMany=n)

مثال:
دستور زیر برای تازه‌وارد، بر اساس آیتم‌های  AjXE, VbTk, r4GZ ده پیشنهاد تولید می‌کند. این پیشنهاد‌ها بر اساس سلیقه جمعی محبوبیت بالایی داشته و با سرشا‌خه‌های یاد شد نزدیکی دارند.

Request:
//recommendToNewcomer/AjXE/VbTk/r4GZ

Response:
[[“YDIN”,1.103431],[“VBx3”,1.1000912],[“ME83”,1.0796349],[“F4iO”,1.0775955],[“kt01”,1.075396],[“UvHQ”,1.0632982],[“yXDA”,1.0557796],[“xu1s”,1.0472054],[“tQc1”,1.0308288],[“536R”,1.026107]]

 

پیشنهاد‌های جذاب و شخصی برای کاربر سایت‌شما

آیا سایت شما بین کاربران استقلالی و پرسپولیسی تفاوت قائل می‌شود؟ طرفداران ملوان انزلی را می‌شناسد؟ در اغلب موارد شاهد‌ هستیم سایت با همه مراجعین به یک شکل رفتار می‌کند. آتیم‌هایی که سایت به کاربران/مشتریان نمایش می‌دهیم، بدون هوشمندی، و تنها بر اساس مکانیزم‌های اتفاقی(Randomized)، یا انطباق تگ‌هاست. سایت به سلیقه مراجعین توجه نمی‌کند. در نهایت کاربر/مشتری، به محض کسب تجربه‌ای بهتر از سایت ما مهاجرت خواهد کرد. در بسیاری موارد کاربران از عدم وجود هوش کافی در مقایسه با سایت‌های بین‌المللی تعجب می‌کنند. چه باید کرد؟ چه کنیم تا سایت‌های ما رفتاری شایسته تر از خود نشان دهند؟ چه کنیم‌ تا سایت ما بین کاربران خود تفاوت قائل شده، و برای هر یک متناسب با سلیقه وی، به ارائه آیتم‌ها بپردازد؟

راه‌حل

متد پیشنهاد (recommend) دقیقا برای حل این مسئله طراحی و پیاده سازی شده است. برای پیشنهاد به کاربری که قبلا رد‌پایی از او در تعامل با آيتم‌های سایت بدست آورده‌ایم، این متد گزینه‌ای بسیار توانمند است. متد پیشنهاد هر آنچه کاربر قبلا دیده است، به یاد دارد. همچنین با استفاده از مکانیزم‌های پیش‌بینی(Prediction)، تعامل‌های بعدی کاربر را محاسبه نموده، و آیتم‌هایی که وی دوست دارد مشاهده کند، در اختیارش قرار می‌دهد. این متد به کاربری که لاگین نکرده است نیز خدمت می‌کند.
آگاهی از سلیقه کاربر، بدون پرسیدن حتی یک سوال، مزیتی ارزشمند محسوب می‌گردد. سایت‌های مجهز به recommender.ir قادر به تحلیل و شناسایی بلادرنگ سلیقه کاربر هستند. آنها این عمل را بدون پرسیدن هیچ سوالی از کاربر و تنها بر اساس رفتار کاربر انجام می‌دهند. تصاویر زیر نمونه‌هایی از کاربرد‌های متد پیشنهاد را نمایش می‌دهند.

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

Screen Shot 2017-03-05 at 8.07.51 PM

توضیحات فنی

برای ارائه پیشنهاد به کاربر، از متد recommend استفاده کنید. این متد به کاربری که رفتار وی قبلاً مورد شناسایی قرار گرفته است، به تعداد n آیتم، پیشنهاد می‌دهد. محاسبه این مقادیر بر اساس آیتم‌هایی است که کاربر قبلاً مشاهده ننموده و با بیشترین احتمال، علاقمند به مشاهده آنهاست. این محاسبات بر اساس آخرین انتخاب‌های کاربر به روز شده و بلادرنگ از تغییرات داده‌ها اثر می‌گیرند. نتیجه بر اساس میزان علاقه مرتب شده است. این متد برای پیشنهاد به کاربرانی که قبلاً رفتارهای آن‌ها را جمع آوری نموده ایم مناسب است. مشتریان recommender.ir، از این متد استفاده فراوان می‌برند.
این متد قادر به تولید نتایج لرزان(Dither) نیز می‌باشد. هدف از تولید نتایج لزران، حفظ جذابیت نتایج برای کاربر است. برای تولید محاسبات به صورت لرزان از پارامتر dither استفاده کنید.
این متد را با درخواست GET فراخوانی کنید.

http://IP:Port/recommend[userID](?howMany=n)(?dither)

مثال:
دستور زیر برای کاربری با شناسه79047 ، ده پیشنهاد که بر اساس میزان علاقه وی مرتب شده است، باز‌می‌گرداند:

Request:
/recommend/79047

Response:
[[“YDI1N”,1.103431],[“VB4x3”,1.1000912],[“MEB83”,1.0796349],[“FC4iO”,1.0775955],[“kt0x1”,1.075396],[“UvHxQ”,1.0632982],[“yXpDA”,1.0557796],[“xuL1s”,1.0472054],[“tQ8c1”,1.0308288],[“53k6R”,1.026107]]

مثال:
مثال زیر برای کاربری با شناسه 3294 ، سه پیشنهاد لرزان محاسبه می‌کند. این متد عیناً چهار بار فراخوانی شده است. نتایج در شعاع معینی به صورتی انتخاب شده‌اند که ضمن نزدیکی با سلیقه کاربر 3294 برای وی جذاب بوده و تکراری نشوند:

Request
/recommend/3294?dither&howMany=3

Response
[[“BMW-820i”,0.08361415],[“RapidMiner”,0.099954925],[“Membase”,0.0659595]]

Request
/recommend/3294?dither&howMany=3

Response
[[“Magnet”,0.04127011],[“RapidMiner”,0.099954925],[“Membase”,0.0659595]]

Request
/recommend/3294?dither&howMany=3
Response
[[“BMW-820i”,0.08361415],[“Yamaha”,0.057780065],[“Magnet”,0.04127011]]

Request
/recommend/3294?dither&howMany=3
Response
[[“BMW-820i”,0.08361415],[“Ferrari”,0.104123645],[“Yamaha”,0.057780065]]

اجزای اصلی یک پیشنهاد‌دهنده بلادرنگ

در اینجا قطعات اصلی یک سامانه‌پیشنهاد‌دهنده(Recommender System) بلادرنگ را به زبان ساده معرفی کنیم. بدیهیست که در یک نمونه صنعتی، همچون ‌recommender.ir،  قطعات دیگری نیز برای افزایش کارایی، پایداری و پردازش محتوا به کار ‌می‌آیند که در اینجا از معرفی آنها صرف نظر نموده و تنها به مهمترین اجزای یک ساختار مبتنی بر فعالیتهای کاربر می‌پردازیم.

یک سامانه پیشنهاددهنده پیشرفته از پنج قطعه‌(Component)  تشکیل می‌شود. این قطعات از سمت واسط فراخوانی و ارسال داده(API) تا لایه‌های زیرین به ترتیب عبارتند از:

  • واسط فراخوانی و ارسال جریان داده (API)
  • پردازش ثانویه بلادرنگ
  • مدل
  • پردازش دسته‌ای
  • کتابخانه الگوریتم‌ها

حال به مرور مختصر هر قطعه می‌‌پردازیم:

قطعه ۱ – واسط فراخوانی و ارسال جریان داده (API)

متدهای یک سامانه‌ پیشنهاددهنده به طور مکرر فراخوانی می‌شوند. ابعاد فراخوانی ممکن است به چند هزار بار در ثانیه بیا‌نجامد. لذا طراحی و پیاده سازی ‌API باید با توجه به ملزومات فراخوانی‌های بسیار زیاد باشد. لایه‌های زیرین ‌API باید چندرشته‌ای(Multi-Threaded) توسعه یابند. این ماژولها باید به پاکسازی داده‌های دریافتی نیز بپردازند. چرا که ممکن است داده‌های غلط به سامانه ارسال شود. همچنین کنترل اثرات ناشی از حملات خود داری از خدمات((DoS Attack)) بر روی صفحات سایت اصلی، در این لایه باید انجام پذیرد. پس از آماده سازی نتایج، زیباسازی نتایج (Decoration) در این لایه انجام می‌گیرد.

قطعه ۲- پردازش ثانویه بلادرنگ

معمولا پیشنهاد‌هایی که توسط سامانه تولید می‌شوند و از روی مدل دریافت می‌گردند، نیاز به پردازشی ثانویه نیز دارند. پردازش ثانویه برای آماده سازی ‌نهایی داده‌ها و نمایش آن به کاربر،‌ انجام ‌ می‌پذیرد. محاسبه مجدد رنک(Rank) در مورد داده‌هایی که اخیرا تغییرات زیادی داشته‌اند، از این جمله است. این لایه حاوی نوعی از هوش است، که الگوهای محاسبات را در بعضی موارد تغییر می‌دهد. یکی از این موارد ارزیابی کیفیت پیشنهادات است. سامانه همواره قادر است کیفیت محسبات خود در مقایسه با رفتارهای واقعی کاربران محک بزند. پس قادر خواهد بود در مقاطع زمانی معین الگوریتم‌های مناسب‌تر (با بازدهی بالاتر)‌ را انتخاب کند.

این قطعه همچنین در تولید پیشنهاد برای کاربر تازه وارد، که هیچ ردپایی از وی نداریم یا برای تولید پیشنهادهای گروهی، داده‌های مدل را به صورت بلادرنگ و موضعی پردازش می‌کند. کنترل میزان پراکندگی و چگالی نتایج محاسبات نیز در این قطعه لحاظ می‌شود. از جمله محاسبات بلادرنگ می‌توان به کنترل ابعاد مدل و نظارت بر کیفیت تولید ‌نسل‌های داده اشاره کرد. همچنین آخرین فعالیت‌های کاربر حتی قبل از اعمال در مدل، در این قطعه به صورت موقت نگهداری می‌شود تا در صورت آماده نبودن داده‌های مدل در مورد آخرین فعالیتهای کاربر، قادر به تولید پیشنهاد‌های بلادرنگ و دقیق باشد. اغلب محاسبات هنگام دریافت داده‌ انجام می‌شود. یکی دیگر از وظایف قطعه پردازش ثانویه، لرزاندن(Dithering) جزئی نتایج محاسباتی است که از مدل حاصل آمده است. لرزاندن محاسبات راهکاری برای باز‌سازی مجدد نتایج با هدف حفظ جذابیت برای کاربر است. پس نتایج مدل را با افزودن کمی انحراف در محاسبات، به نتایجی جذاب بدل می‌کند. برای محاسبه میزان لرزش نتایج نیز، تکنیک‌های متنوعی وجود دارد.

سامانه‌های غیرصنعتی فاقد قطعه پردازش ثانویه بلادرنگ هستند.

قطعه۳ – مدل

مدل مهمترین قطعه است. این قطعه تمامی ماحصل پردازش داده‌ها، علایق کاربران و ویژگی‌های آیتم‌ها را نگهداری می‌کند. هر آنچه در نتیجه فراخوانی متدهای API مشاهده می‌شود در مدل محاسبه شده است. یک سامانه غیر صنعتی (تحقیقاتی یا دانشگاهی) ممکن است فاقد قطعه مدل باشد. داده‌های مدل به صورت‌پیوسته مورد ویرایش لایه‌های پردازشی ۲ و ۴ قرار دارند. با توجه به تنک بودن داده‌ها، در نگهداری داده‌ها بهتر است از گراف یا تکنیک‌های ‌فاکتور‌گیری ماتریس(Matrix Factorization)، یا تواما بهره جست.

قطعه ۴ – پردازش دسته‌ای

توابعی از قطعه ۵ را بر روی مدل اجرا می‌کند. داده‌های مدل به منظور تولید‌نسلهای داده و اعمال نمودن جزئیات تغییرات، در مقاطع معین زمانی به طور کلی پردازش‌ می‌شوند. در پایان پردازش‌دسته‌ای، مجموعه‌هایی مرتب شده و اندیس‌گذاری شده از داده‌ها مهیا می‌گردد. اعمال فاکتور مهم فراموشی (Forgetfulness) نیز توسط این قطعه انجام می‌شود. این قطعه باید میزان مصرف توان پردازشی را با بار فعلی ماشین، تنظیم کند. اولیویت پردازشی با فعالیت‌هایی است که در قطعه بلادرنگ، در حال انجام است. پس ساختن رشته‌های (Threads) جدید یا به کارگیری رشته‌های موجود در مخزن رشته‌ها(Thread Pool) در این لایه، متناسب با ظرفیتهای آزاد ماشین، رخ می‌دهد. در صورتی که این لایه قادر به اجرای کاهش-‌نگاشت(Map-Reduce) باشد، سامانه‌ قادر خواهد بود از زیست‌بوم هدوپ(Hadoop Ecosystem) به عنوان بستر محاسباتی و قیاس پذیری پردازش های دسته‌ای خود، بهره‌جوید.

قطعه ۵ – کتابخانه الگوریتم‌ها

الگوریتم‌هایی که در قطعات پردازشی بلادرنگ و دسته‌ای مورد استفاده ‌قرار‌ می‌گیرند در این قطعه گردآوری شده‌اند. پیاده‌سازی این قطعه باید به گونه‌ای انجام پذیرد، که افزودن و بکارگیری الگوریتمهای متاخر و جدید به سادگی انجام‌ پذیرد. در صورتی که فراخوانی الگوریتم‌ها و اجرای محاسبات به صورت تابعی‌(Functional) و بدون وضعیت(Stateless) انجام پذیرد، سامانه قادر به بهره‌گیری از تمام توان پردازشی ماشین خواهد بود. درواقع با بدون‌وضعیت ساختن متدها، قادر به تضمین کشسانی(Elasticity) راه‌حل خواهیم بود.