تیم داده کافه بازار، چالشها و مسألهها
تیم داده کافه بازار، مشابه شرکت اسپاتیفای (Spotify)، ساختاری به اصطلاح ماتریسی دارد. یعنی هر عضو دانشمند داده (Data Scientist)، هم در یک تیم محصولی متشکل از نفرات با مهارتهای دیگر (Software Engineer، Product Manager و … ) فعالیت دارد و هم با دیگر دانشمندان داده در ارتباط است که به اصطلاح Data Science Chapter گفته میشود. بنابراین یک بُعد از این ماتریس، تیم و بُعد دیگر، چپتر دیتاست. این ساختار کمک میکند که اعضای تیم داده، هم به دغدغههای محصولات دادهای (Data Product) و تصمیمگیریهای داده محور (Data-Driven Decision Making) تسلط پیدا کنند و هم بتوانند با حضور در چپتر دیتا، تخصصهای خود را تقویت کرده و از دانش دیگر دانشمندان داده استفاده کنند.
گفتنی است تعداد اعضای تیم داده کافه بازار از تابستان ۹۸ تا تابستان ۹۹، نزدیک به ۳ برابر شده است. این تیم در حال رشد کردن است و از جذب نیروهای بااستعداد، خوشفکر و تحلیلگر استقبال میکند.

در حال حاضر، دانشمندان داده در ۹ تیم از تیمهای کافه بازار فعالیت میکنند و کارهای آنها از یادگیری ماشین کلاسیک (Classic Machine Learning) تا یادگیری عمیق (Deep Learning)، دادههای متنی و پردازش زبان (NLP)، سیستمهای پیشنهاددهنده (Recommendation Systems) و حتی طراحی حراجی (Auction/Mechanism Design) گسترده است. در این مقاله تلاش کردیم که نمونههایی از کارهای متنوعی را که در تیمهای مختلف بازار انجام میشود، بهطور خلاصه شرح دهیم و چالشها و ایدههایی را که برای رویارویی با مسأله و حل آن پیش گرفته شده معرفی کنیم.

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

مصطفی از تیم تبلیغات ویدیو مسألهی تخمین سن و جنسیت کاربرها و چالشها و راهحلهای استفاده شده را بیان میکند. مصطفی حدود یک سال هست که در بخش دیتا کافهبازار فعالیت میکند و تجربهی حضور در تیمهای پرداخت و ویدیو را دارد. مصطفی به حوزهی پردازش زبان طبیعی و الگوریتمهای درختی علاقهمند است.

علی از تیم جستجو بازار، در مورد سیستم رنکینگ محتواهای کافهبازار توضیح میدهد. از حضور علی در کافهبازار حدود ۴ سال میگذرد و تقریبا ۳ سال است که بهصورت متمرکز در بخش دیتا کافه بازار فعالیت میکند. علی سابقه حضور در تیمهای جزئیات برنامه، دیسکاوری، تبلیغات و سرچ را دارد و از سروکلهزدن با مسائل مختلف لذت میبرد.

حمیدرضا از تیم دیسکاوری از سیستم Recommendation در بازار میگوید. حمیدرضا حدود ۳ سال است که در بخش دیتا بازار فعالیت میکند. او کارش در بازار را با تیم جزئیات برنامه شروع کرده و بعد از آن مدتی وارد تیم سرچ و سپس تیم دیسکاوری شده و بیشتر سابقهی فعالیتش در زمینهی سیستمهای پیشنهاددهنده است.

تبلیغات در بازار
معرفی تیم
تبلیغات در سرچ به دو تیم شکسته میشود که یکی از تیمها، بهینهسازی حراجی و نیازهای کاربر سرچ را بررسی میکند (تیم حراجی سرچ) و تیم دیگر، نیازمندیهای سمت تبلیغگذارنده را برطرف میکند (تیم پنل ادز). در ادامه هر یک را بیشتر معرفی میکنیم.
حراجی سرچ: هدف این تیم، بهینهسازی و طراحی حراجی به منظور افزایش درآمد با هدف حفظ ماندگاری نصب است. تلاش این تیم همواره در جهت نمایش تبلیغات مرتبط به کوئری (عبارت سرچشده توسط کاربر) است تا هم بتواند کیفیت نصب را حفظ کند و هم کمترین آسیب را به تجربه کاربری سرچ وارد کند. در این راستا، شخصیسازی تبلیغات، شناسایی هدف و نیاز کاربر از کوئری سرچ شده در کنار دانش Mechanism Design برای بهینهسازی حراجی از کارهای اصلی این تیم است. به این منظور، کارهای این تیم را میتوان به دو بخش اصلی تقسیم کرد: "طراحی حراجی" و "بهینهسازی آگهی نمایش داده شده".
پنل ادز: هدف این تیم کمک به تبلیغگذارندهها برای انتخاب مناسبتر کوئری (عبارت سرچ شده توسط کاربر) در راستای تبلیغ در سرچ است. این تیم همواره در تلاش بوده تا کوئری مرتبط به هر اپلیکیشن را شناسایی کند و آن را در اختیار تبلیغگذارنده قرار دهد. این تلاش دو هدف مهم را برآورده میکند:
۱- کمک به تبلیغگذارنده برای جذب کاربر با کیفیت
۲- جلوگیری از ورود اپلیکیشنهای نامرتبط به حراجی هر کوئری
از نمونه مسائلی که در این تیم بررسی میشوند، میتوان به "پیشنهاد کوئری به اپلیکیشن تبلیغگذارنده" (نوعی مسئله Recommendation) و یا کمک به افزایش پوشش هر اپلیکیشن (Coverage) در تبلیغات توسط "پیشنهاد کوئریهای مشابه" به کوئری انتخاب شده توسط تبلیغگذارنده و … اشاره کرد.
تعریف مسئله
در ادامه در راستای هر کدام از تیمهای مطرح شده در قسمت قبل، یک مسئله را تعریف کرده و چالشها و راهحلهای آن را بررسی میکنیم.
مسئله ۱ (مدل تخمین احتمال نصب): در راستای کاهش آسیب به کاربر سرچ و بهینهسازی درآمد، علاوهبر مبلغی که تبلیغگذارنده به عنوان بید (bid) در حراجی اعلام میکند، پارامتر دیگری تحت عنوان احتمال نصب را نیز در انتخاب برنده و مرتبسازی (sorting) بیدهای حراجی تاثیر میدهیم (یعنی جای اینکه بید با مبلغ بالاتر را به عنوان برنده اعلام کنیم، بیدی را به عنوان برنده معرفی میکنیم که "بید" * "احتمال نصب" بالاتری داشته باشد). پس بسیار مهم است که این احتمال را با دقت بالایی تخمین بزنیم زیرا هم روی درآمد ما تاثیر قابل توجهی دارد و هم تخمین بهتر آن به معنی نمایش تبلیغ مرتبطتر است و باعث افزایش رضایت کاربر سرچ و حفظ کیفیت نصب برای تبلیغگذارنده میشود.
مسئله ۲ (تشخیص کوئریهای یکسان): تبلیغگذارندهها میتوانند در پنل تبلیغات، کوئری مورد نظر خود را انتخاب کنند و هر زمان سرچی با آن عبارت صورت بگیرد، در حراجی آن شرکت کنند. تیم پنل نیز تلاش میکند تا ابزارهایی را در اختیار هر تبلیغگذارنده قرار دهد تا افراد بتوانند کوئریهای مرتبطتری را شناسایی کنند.
یکی از دغدغههایی که توسط این تیم بررسی شد، مسئله یکسان بودن کوئریها بود. بگذارید با یک مثال بهتر بگوییم، در نظر بگیرید که تبلیغگذارنده کوئری "نقشه" را در پنل انتخاب کرده است. این کوئری دقیقا معادل کوئری انگلیسی "map" است. تعدادی از کاربران نیز در سرچ بازار، این کوئری را به صورت "مپ" سرچ میکنند یا در بعضی حالتها غلطهای املایی مشابه "نغشه" رخ میدهد. اگر تبلیغگذارنده بخواهد همهی این معادلها را در پنل انتخاب کند، ممکن است به بررسی حالتهای بسیار زیاد و متنوعی نیاز باشد. این از نظر رابط کاربری، اصلا بهینه نیست. علاوهبر این، تبلیغگذارنده برای حفظ کیفیت نصب خود، نیاز دارد کوئریهایی را نگه دارد که رفتار نصب مشابهی مانند کوئری اصلی دارند. بنابراین نیاز است تا سازوکاری برای تشخیص کوئریهای یکسان با حفظ کیفیت نصب در پنل وجود داشته باشد و تبلیغگذارندهها بتوانند با فعال کردن یک قابلیت یا ابزار، این دغدغه را برطرف کنند.
چالشهاوراهحلها برای مسئله ۱ (مدل تخمین احتمال نصب)
چالشهای بسیاری برای تخمین احتمال وجود دارد ولی دو مورد آن اصلیتر از بقیه هستند:
۱. بسیار اتفاق میافتد که اپلیکیشنی به تازگی وارد سیستم تبلیغات شود. در این صورت، هیچ اطلاعات یا تاریخچهای از رفتار کاربر روی برنامه مذکور نداریم و به تعبیری با یک مسئله Cold-Start مواجه هستیم.
۲. تعداد زیادی کوئری وجود دارند که در روز کمتر از ۱۰ بار سرچ میشوند و لذا واریانس احتمال نصب روی این کوئریها بسیار زیاد است.
در راستای این چالشها، دو عملکرد را پیش گرفتیم. ابتدا سراغ مدلهای یادگیری تقویتی (Reinforcement Learning) رفتیم که با گرفتن هر فیدبک از کاربر به صورت آنلاین، تلاش میکنند تخمین احتمال نصب را به مقدار واقعی احتمال، نزدیکتر کنند. در ابتدا، این احتمال را دستبالا برابر یک در نظر میگیرند و سپس با هر نمایش و نصب یا عدم نصب آگهی، احتمال را آپدیت میکنند. این قضیه مشکل Cold-Start را تا حدی حل میکرد ولی درباره چالش دوم خیلی راهحلی نداشت. برای بهبود آن، تلاش کردیم این سیستم آنلاین را با یک سیستم آفلاین ترکیب کنیم. به این شکل که به جای شروع از احتمال یک، از احتمال نزدیکتری به واقعیت شروع کنیم تا سرعت Converge کردن بیشتر شود و برای کوئریهایی که اطلاعات کمی داریم، از اطلاعات کوئریهای مشابه آنها استفاده کنیم. به این منظور از ویژگیهایی مانند کیفیت اپلیکیشن مورد نظر، رفتار کاربران روی کوئریهای مشابه آن کوئری یا اپلیکیشنهای مشابه آن اپلیکیشن، شباهت متنی کوئری و اپلیکیشن (Semantic Similarity که با استفاده از مدلهای پردازش زبان مانند Word2Vec این شباهت را بررسی میکنیم) و … استفاده کردیم تا نقطه شروع بهتری را انتخاب کنیم. پس از پیادهسازی آنچه توضیح داده شد، با حفظ کیفیت نصب از سرچ، نرخ نصب آگهی در سرچ تقریبا ۲ برابر شده است.

چالشهاوراهحلها برای مسئله ۲ (تشخیص کوئریهای یکسان)
همانطور که پیشتر در قالب مثال توضیح داده شد، هدف مسئله ۲، تشخیص غلط املایی، معادلهای فارسی، انگلیسی و فینگلیش و نیز کلمات هممعنی است. اگرچه که این مسأله، در ابتدا روشهای NLP را در ذهن تداعی میکند ولی هدف در اصل، تشخیص کلمات یکسانی است که رفتار نصب مشابهی نیز دارند و در این حالت، روشهای NLP لزوما بهترین جواب را نمیدهند. به این منظور، برای بررسی یکسان بودن رفتار نصب روی کوئریها و تقسیم آنها به گروههای مناسب، اینطور عمل کردیم که هر کوئری را به عنوان بُرداری متشکل از نرخ یا فرکانس اپلیکیشنهای نصبشده از آن کوئری در نظر گرفتیم و مسأله را تبدیل کردیم به سوالی در فضای گرافها! گرافی را در نظر بگیرید که به این شکل ساخته شود:
هر کوئری را به عنوانی رأسی از گراف در نظر میگیریم و دو رأس را به هم وصل میکنیم اگر و تنها اگر، شباهت برداری کوئریهای متناظر آنها از Threshold بیشتر باشند.
با این ساختار، شناسایی دستهای از کوئریهایی با نصب یکسان، با پیدا کردن مؤلفههای همبندی گراف مذکور معادل خواهد شد. با پیادهسازی این روش، مسأله را تبدیل به مسأله Community Detection کردیم و از الگوریتمهای مربوطه، دستههای کوئریها را جدا کردیم. این روش، یک درجه آزادی در قالب Threshold داشت که تعیین میکرد بین کدام رئوس، لینک برقرار شود. با کمی بررسی و تحلیل متوجه شدیم که در راستای پیدا کردن Threshold مناسب، میتوان دغدغه اصلی یعنی بررسی یکسان بودن کوئریها را به عنوان معیار برای خوب بودن دستهها در نظر بگیریم. نکته جالب در این مسأله، این بود که وقتی کوئریها را از نظر رفتار نصب بررسی میکردیم و Threshold را سختگیرانهتر میگرفتیم، هر دسته تبدیل به مجموعهای از کوئریهای یکسان میشدند!

تشخیص سن و جنسیت
معرفی تیم
تیم ویدیو کافهبازار با هدف پشتیبانی فنی و ارائهی محتوا به کاربران ویدئو ایجاد شده و با گسترش محتوا و تعداد کاربران این سرویس، مسائل و نیازهای دیتایی در این تیم افزایش پیدا کرده است. از طرفی سرویس ویدیوی کافهبازار به صورت AVOD کار میکند. به طور خلاصه در سرویس AVOD محتوا به صورت رایگان به کاربر عرضه میشود و کاربر هزینهای بابت اشتراک یا خرید تکی محتوا پرداخت نمیکند ولی در هر ویدیو تعداد محدودی تبلیغ مشاهده میکند. با توجه به اهمیت این مدل درآمدی، تیم تبلیغات ویدیو به صورت جداگانه بر روی مسألهی تبلیغات تمرکز دارد. هدف این تیم، افزایش همزمان درآمد و رضایت کاربران است.
تعریف مسأله
سیستم تبلیغات ویدیوی کافهبازار شامل یک سمت عرضه (تبلیغگذارنده) و یک سمت تقاضا (کاربر) است و در این بین سرویس تبلیغات تلاش میکند بهترین تطابق بین این دو گروه را فراهم کند. در راستای این تطابق، نیاز است که شناخت مناسبی از کاربران به صورت یک پروفایل ایجاد شود تا با استفاده از آن سیستم هدفگذاری تبلیغات اجرا شود. یکی از مهمترین اجزای پروفایل کاربر، اطلاعات دموگرافیک (Demographic) آن و در راس آن سن و جنسیت کاربر است. به عنوان نمونهای از کاربرد این اطلاعات میتوان به پخش تبلیغات مربوط به بازار کودک (بازیها و برنامههای مربوط به کودکان) برای افراد کمسن و یا پخش تبلیغات مربوط به برنامههای مالی و یا فروشگاهی به بزرگسالان اشاره کرد. بنابراین مسالهی تیم تبلیغات ویدیو، تخمین سن و جنسیت برای همهی کاربران با حفظ حریم شخصی کاربران بود.
چالشهاوراهحلها:
برای حل این مساله بهترین گزینه دریافت سن و جنسیت از برخی کاربران و تخمین آن برای سایر کاربران بود. در همین راستا با اعمال تغییراتی در برنامه و بعد از گذشت چند ماه، تعداد مناسبی از کاربران اطلاعات خود را وارد کردند. مشکل اطلاعات بدست آمده، وجود بایاس در نمونه بود. توزیع داده در نمونه با توزیع آن در واقعیت اختلاف داشت. دلیل این تفاوت به خاطر این بود که کاربرانی که سن و جنسیت خود را وارد میکنند کاربران فعالتر بازار هستند و به همین دلیل تفاوتهایی بین این نمونه از کاربران و کل کاربران وجود داشت که باید در نظر گرفته میشد.
پس از دریافت سن و جنسیت تعدادی از کاربران ، بایستی یک مسالهی رگرسیون برای تخمین سن و یک مسالهی دستهبندی برای تخمین جنسیت حل میشد. نخستین چالش این مساله، جمعآوری دیتای مناسب بود. به طور خلاصه دادههای مناسب برای حل این مساله شامل دادههای رفتاری کاربر (زمان فعالیت در بازار و نوع فعالیتها) و اطلاعات برنامههای دانلود شده و ویدیوهای مشاهده شده در بازار بود. به دلیل حجم بالای دادهی برنامههای دانلود شده، نیاز بود که embedding مناسبی از برنامهها ایجاد شود تا بعد دیتا کاهش پیدا کند و ویژگیهای مفیدی برای حل مساله ایجاد شود.
با استفاده از روشهای مختلف مانند تجزیهی ماتریسی SVD و الگوریتم xgboost، به دقت مناسبی در پیشبینی جنسیت و خطای قابل قبولی در پیشبینی سن رسیدیم که برای کاربردهای هدفگذاری مورد نظر مناسب بود.

جستجو
معرفی تیم
تیم جستجو بر دو اصل پیدا کردن و پیدا شدن بنا شده است. این تیم سعی میکند با استفاده از ابزارهای مختلف فرآیند پیدا کردن محتوای مورد نظر کاربر را بیدردسر و آسان کند، همچنین بستر مناسبی برای محتوای تولید شده توسط ناشران باشد تا با پیدا شدن محتواهایشان سبب رشد و شکوفا شدن پتانسیلهای موجود در محصولشان گردد.
تعریف مسأله
روزانه حداقل هفت میلیون بار از سیستم جستجوی کافهبازار استفاده میشود. کاربران عبارات مورد نظر خود را در این سیستم مینویسند و این سیستم تلاش میکند از بین بیش از چهارصد هزار برنامه، بازی و ویدیو، لیستی مرتب شده از این محتواها را به کاربران نمایش دهد. مسأله رنکینگ در واقع مرتب کردن محتواهای موجود در کافهبازار با داشتن عبارت جستجو شده کاربر است که بیشترین شباهت به محتوای مورد نظر کاربر را داشته باشند.
چالشهاوراهحلها
به منظور مرتبکردن محتواهای مرتبط با عبارت جستجو شده توسط کاربر، جستجوی کافه بازار بر اساس سیستم تگزدن طراحی شده است. منظور از تگ، کلمات و عبارات مرتبط با محتواهای کافه بازار است. بر این اساس میتوان گفت که در این سیستم به هر محتوا یک مجموعهای از دوتاییهای تگ و وزن نسبت داده میشود. حال زمانی که کاربر عبارتی را جستجو میکند، ترکیبهای مختلفی از واژگانی که در عبارت جستجو شده به کار رفتهاند، مجموعهی کلی از تگهای مرتبط با عبارت جستجو شده را میسازند. در این حالت تنها کافی است برای هر محتوا، وزن تگهایی از آن را که در داخل مجموعه تگهای عبارت جستجو شده هستند را جمع کنیم و پس از این کار محتواها را بر اساس بزرگی عدد ذکر شده مرتب کنیم و نتایج را به کاربر نمایش دهیم. به عنوان مثال فرض کنید کاربری عبارت «بازی جدید» را جستجو کند، مجموعهی کلی از تگهای سازنده این عبارت میتواند به صورت «بازی»، «جدید» و «بازی جدید» باشد. حال فرض کنید یک محتوای خاصی دارای دو تگ «بازی» و «بازی جدید» با وزنهایی w و v باشد ولی تگ «جدید» را نداشته باشد. عدد نهایی نسبت داده شده به این محتوا در نمایش مرتب شدهی عبارت جستجو شدهی «بازی جدید» به صورت w+v خواهد بود.
یکی از اصلیترین چالشها در ساختن چنین سیستمی، دستیابی به دوتاییهای تگ و وزن بهینه برای هر محتوا هست. به منظور پیدا کردن تگها، آنها را به صورت کلی به دو دسته تقسیم میکنیم:
۱- تگهای ساخته شده از رفتار و بازخورد کاربران
۲- تگهایی که با استفاده از روشهای الگوریتمی از دل خود محتواها بدست میآیند.
تگهای نوع اول به همراه وزنشان با استفاده از بازخورد دریافتی از فعالیت کاربران هنگام جستجو یک عبارت، بازدید جزئیات یک برنامه یا ویدیو در صفحه سرچ و نصب کردن برنامه و یا مشاهده کردن ویدیو بدست میآیند. به طور کلی میتوان گفت فعالیت کاربران در سیستم جستجو باعث به وجود آمدن چنین بازخوردهایی میشود و سیستم جستجو از این بازخوردها استفاده میکند تا تگهای مناسبی را به محتواها نسبت دهد. یکی از چالشهای این قسمت هزینهی محاسباتی بالایی بود که داشت و برای حل این چالش از روشهای مبتنی بر MCMC استفاده میکنیم.
تگهای نوع دوم نیز از ویژگیهای ذاتی محتواها مانند نام و توضیحات موجود در صفحه جزئیاتشان و یا شباهتهای موجود میان دو محتوا استخراج میشوند.
در نهایت برای نسبت دادن یک تگ خاص به یک محتوای خاص به همراه وزن آن، کافی است وزنهای مختلف آن تگ را در روشهای مختلف استخراج تگ برای آن محتوا داشته باشیم و یک ترکیب خطی از آنها را به عنوان وزن نهایی آن تگ اعلام کنیم. داشتن ترکیب خطی از این نظر دارای اهمیت است که میتوان به روشهای مختلف استخراج تگ و وزن، اهمیتهای گوناگونی داد. به عنوان مثال فرض کنید برای محتوای خاصی تگ «بازی» از طریق سه نوع الگوریتم جدا با وزنهای x، y و z بدست آمده است، دوتایی نهایی را به صورت «بازی» و «ax + by+ cz» میسازیم که a، b و c ضرایبی برای مشخص کردن اهمیت سه الگوریتم گفته شده هستند.

سیستم پیشنهاد دهنده
معرفی تیم
تیم دیسکاوری با هدف کمک به تجربهی بهترِ کاربر از گشتوگذار در بازار تشکیل شده است. دستهبندی محتوا و ساخت لیستهایی چون در حال پیشرفت، پرفروشترینها و در حال رشد به عهدهی این تیم است. یکی از مسائل اصلی ما در بخش دیتای تیم دیسکاوری رساندن محتوای شخصیسازی شده به دست کاربر هست تا بتوانیم به هدف خود یعنی "تجربهی خوبِ گشتوگذار در صفحات بازار" برسیم.
تعریف مسأله
بازار بیش از ۴۰ میلیون کاربر فعال دارد که به دنبال محتواهایی چون برنامه،بازی یا ویدیو هستند . پس ارائهی لیست پیشنهادی از محتواها در تجربهی گشت و گذار کاربر (discovery) از اهمیت بالایی برخودار است. پیادهسازی الگوریتمی که بتواند مقیاسپذیر (scalable) و در عین حال سرعت قابل قبولی داشته باشد میتواند خیلی در این تجربه اثرگذار باشد.
چالشهاوراهحلها
علاوه بر اطلاعات مربوط به برنامهها و ویدیوها ،دادههای تعاملی کاربران برای ساخت سیستم پیشنهاددهنده موضوع مهمی است. این دادهها معمولا به طور غیرمستقیم میزان علاقهی یک کاربر به یک محتوای خاص را نشان میدهند و شاید تصویر سلیقهی افراد را بتوان در نحوهی برخوردشان با این محتواها دید. ما برای جمعآوری و پردازش این دادههای بزرگ از ابزارهایی چون spark استفاده میکنیم تا آنها را با فرمت و ساختار مناسب آماده کنیم.
از برنامههایی که از لحاظ معنایی بههم نزدیک هستند لیستهایی ساخته میشوند (برای مثال لیست "بازیهای ماشین سنگین" یا لیست "برنامههای رژیم غذایی"). یکی از چالشهایی که با آن روبهرو بودیم، پیشنهاد دادن این لیستها به کاربرانی بود که به معنای آنها نزدیک هستند. برای حل این چالش به سراغ مدلهای embedding رفتیم و علاوه بر کاربر، این لیستها را هم در فضای برداری کاربران گنجاندیم و بدین ترتیب با استفاده از ضرب داخلی که در این فضای بُرداری تفسیر پذیر است، توانستیم این لیستها را هم به کاربران پیشنهاد دهیم.
چالش دیگری که در توسعه این سیستم داشتیم مسألهی سرعت بود.محاسبهی "سطرهای پیشنهادی برای شما" برای هر کاربر باید خیلی سریع حساب میشد تا بتوانیم تجربهی خوبی را برای کاربر رقم بزنیم. برای همین به سراغ الگوریتمهایی مثل SAR یعنی Simple Adaptive Recommendation رفتیم. این رده از الگوریتمها مبتنی بر ساخت یک ماتریس شباهت از آیتمها به همدیگر هستند و علاوه بر سرعت بالا، precision بالایی را هم برای ما داشتند.
یکی از روشهای ما برای ساخت ماتریس شباهت استفاده از دادههای رفتاری کاربران بود، به این طریق که ما هر کاربر را یک متن از کلماتی تصور میکنیم که هر کلمهی این متن محتوایی هست که کاربر با آن تعامل مثبت داشته و این محتواها را با معیارهای مناسبی مرتب میکنیم (همچون متنی که از کلمات پشت سرهم تشکیل شده باشد) و از روشهای nlp برای ساخت شباهت ماتریسی بین این کلمات که در اینجا محتواها هستند استفاده میکنیم. ما از روشهای مختلفی چون word2vec , tfidf , swivel برای ساخت ماتریس شباهت جلو رفتیم و به عنوان source برای ساخت سطرهای "پیشنهادی برای شما" استفاده کردیم. همچنین از خیلی از این source ها برای سطرهای "برنامههای مرتبط" و "دیگران نصب کردهاند" در صفحات جزئیات هر برنامه نیز استفاده کردیم. این سطرهای شخصی سازی شده تا ۵ برابر نصب در بازار را بهبود دادند.

ما با ایدههای متنوع، به دنبال خلق ارزشیم. مسائلی که در تلاش برای حلشان هستیم بسیار گسترده هستند و ما با بهینهسازی بخشها و ایجاد بخشهای جدید، یاد میگیریم که چطور با این مسائل دست و پنجه نرم کنیم. ما از آدمهایی که مشتاق درگیر شدن با چالشهای دیتایی هستند و دنبال یادگرفتن و خلق ارزشند، دعوت میکنیم از طریق صفحه فرصتهای شغلی کافه بازار برای پیوستن به ما اپلای کنند.
مطلبی دیگر از این انتشارات
ژوپیتر چیست؟
مطلبی دیگر از این انتشارات
زیرساخت کافهبازار: فرهنگ دوآپس را چگونه شکل دادیم؟
مطلبی دیگر از این انتشارات
بازطراحی «صفحهی جزئیات برنامهها» در نسخهی جدید برنامهی «بازار»