Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
منظور از port شدن چیه؟
به اشتباه بعضا میگن همون rewrite هست.
ولی اینطور نیست
توی rewrite ما در کنار تغییر تکنولوژی و ابزار(اختیاری) تغییر معماری و ساختار رو داریم.
ولی اینجا مفهوم port کردن یعنی دقیقا فانکشن به فانکشن، خط به خط، همون کد های تایپ اسکریپتی که قبلا بوده (کامپایلر قبلی با تایپ اسکریپت نوشته شده) رو با زبان golang نوشتن.
غیر از سرعت خیلی بالا، هیچ تغییری زمان توسعه حس نمیشه.
به اشتباه بعضا میگن همون rewrite هست.
ولی اینطور نیست
توی rewrite ما در کنار تغییر تکنولوژی و ابزار(اختیاری) تغییر معماری و ساختار رو داریم.
ولی اینجا مفهوم port کردن یعنی دقیقا فانکشن به فانکشن، خط به خط، همون کد های تایپ اسکریپتی که قبلا بوده (کامپایلر قبلی با تایپ اسکریپت نوشته شده) رو با زبان golang نوشتن.
غیر از سرعت خیلی بالا، هیچ تغییری زمان توسعه حس نمیشه.
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
چند رشته ای یا multi-thread بودن یعنی چی؟ توی این دو زبان چه تفاوتی هست؟
جاوا اسکریپت به صورت کلی یک زبان تک رشته ای یا single-thread حساب میشه و چیزی که باعث میشه ما حس کنیم داره به صورت multi-thread یا به اصطلاح non-blocking I/O اجرا میشه همون event loop هست.
ایونت لوپ با اولویت بندی تسک ها و گذاشتنشون توی دوتا صف مختلف فرایند non-blocking رو برامون فراهم میکنه. پیشنهاد میکنم اگه علاقه دارید بیشتر بدونید راجع بهش یه سرچ توی یوتیوب بزنید.
یا اگر سوالی دارید از خودم بپرسید.
و اما golang به صورت واقعی میتونه از core های مختلف cpu در لحظه استفاده کنه.
کد هایی که دیتای مشترکی ندارن یا scope های کاملا جدا از همی هستند رو به صورت اتوماتیک در صورت نیاز روی رشته های مختلف اجرا میکنه تا اجرا شدن یکدوم مانع اجرا شدن بقیه نشه.
ولی بازهم با اینکه عدم وابستگیشون به هم دیگه شرط اجرا روی رشته های مختلف هست، گولنگ این اجازه رو بهمون میده که بین رشته های مختلف به کمک مفهومی به اسم channels ارتباط برقرار کنیم.
یا حتی بتونیم موقع تغییر یک داده روی یک رشته، اجازه ندیم رشته های دیگه بهش دسترسیِ تغییر داشته باشن.
جاوا اسکریپت به صورت کلی یک زبان تک رشته ای یا single-thread حساب میشه و چیزی که باعث میشه ما حس کنیم داره به صورت multi-thread یا به اصطلاح non-blocking I/O اجرا میشه همون event loop هست.
ایونت لوپ با اولویت بندی تسک ها و گذاشتنشون توی دوتا صف مختلف فرایند non-blocking رو برامون فراهم میکنه. پیشنهاد میکنم اگه علاقه دارید بیشتر بدونید راجع بهش یه سرچ توی یوتیوب بزنید.
یا اگر سوالی دارید از خودم بپرسید.
و اما golang به صورت واقعی میتونه از core های مختلف cpu در لحظه استفاده کنه.
کد هایی که دیتای مشترکی ندارن یا scope های کاملا جدا از همی هستند رو به صورت اتوماتیک در صورت نیاز روی رشته های مختلف اجرا میکنه تا اجرا شدن یکدوم مانع اجرا شدن بقیه نشه.
ولی بازهم با اینکه عدم وابستگیشون به هم دیگه شرط اجرا روی رشته های مختلف هست، گولنگ این اجازه رو بهمون میده که بین رشته های مختلف به کمک مفهومی به اسم channels ارتباط برقرار کنیم.
یا حتی بتونیم موقع تغییر یک داده روی یک رشته، اجازه ندیم رشته های دیگه بهش دسترسیِ تغییر داشته باشن.
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
اینم یه سری اطلاعات خیلی خفن برای رفقای کنجکاومون😁
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
رفقایی هم که هنوز با تایپ اسکریپت اشنایی ندارن یا دنبال یه دوره ای میگردن که با مثال های کاربردی مفاهیمش رو آموزش داده باشه.
من یه دوره درست کردم که توی همین تلگرام توی چنل پرایویت هست🔥😁
برای دریافت لینک پیوی بهم پیام بدید
@erfundev
من یه دوره درست کردم که توی همین تلگرام توی چنل پرایویت هست🔥😁
برای دریافت لینک پیوی بهم پیام بدید
@erfundev
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
کامپایلر زبان تایپ اسکریپت درحال port شدن به golang هست.
چیزی که باعث میشه سرعت کامپایل تایپ اسکریپت تا 10x سریع تر بشه!
احتمالا این خبر رو توی کامیونیتی خیلی شنیدید ولی بیاید باهم یه سری سوال رو جواب بدیم و مفاهیم رو ساده تر درک کنیم😁
برای رفقایی که تازه وارد این حوزه شدن و دوست دارن دیدشون باز تر بشه🤍
چیزی که باعث میشه سرعت کامپایل تایپ اسکریپت تا 10x سریع تر بشه!
احتمالا این خبر رو توی کامیونیتی خیلی شنیدید ولی بیاید باهم یه سری سوال رو جواب بدیم و مفاهیم رو ساده تر درک کنیم😁
برای رفقایی که تازه وارد این حوزه شدن و دوست دارن دیدشون باز تر بشه🤍
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
مفهوم کامپایل شدن چیه؟ فرق تایپ اسکریپت و golang در کامپایل چیه؟
خب چیزی که cpu میفهمه متاسفانه خیلی با زبانی که ما میفهمیم یا باهاش کد میزنیم فرق میکنه. Cpu زبانی به اسم باینری یا همون صفر و یک داره و ما زبان انسان رو داریم.
که خب میبینید مثلا زبان هایی مثل پایتون خیلی نزدیک به زبان انسان هستن.
به فرایندی که زبان نزدیک به زبان انسان رو یه زبان ماشین یا باینری تبدیل میکنه و قابلیت اجرا شدن میده بهش، میگن کامپایل شدن.
خب تایپ اسکریپت که به صورت یک superset برای جاوا اسکریپت هست پس باید جاوا اسکریپت رو بررسی کنیم.
کد های جاوا اسکریپت به صورت JIT یا just in time کامپایل میشه.
یعنی engine کد هایی که ما نوشتیم رو به صورت AST یا یک درخت سینتکس بخش به بخش نگاه میکنه و برای ماشین ترجمه میکنه (طی مراحل درونی بیشتر..) و در نهایت کد ما مرحله به مرحله اجرا میشه.
ولی golang برای اجرا شدن توی مرحله اول مستقیما به فایل اجرایی یا exe تبدیل میشه و نیازی به انجام مراحل دیگه برای تفسیر کد نیست.
و همین خودش باعث افزایش سرعت اجرای برنامه میشه.
نیازی به ابزار های bundling مثل پروژه های جاوا اسکریپتی نداره و بعد از build کردن همهی کد های golang که نوشتیم تبدیل به یدونه فایل اجرایی میشن.
خب چیزی که cpu میفهمه متاسفانه خیلی با زبانی که ما میفهمیم یا باهاش کد میزنیم فرق میکنه. Cpu زبانی به اسم باینری یا همون صفر و یک داره و ما زبان انسان رو داریم.
که خب میبینید مثلا زبان هایی مثل پایتون خیلی نزدیک به زبان انسان هستن.
به فرایندی که زبان نزدیک به زبان انسان رو یه زبان ماشین یا باینری تبدیل میکنه و قابلیت اجرا شدن میده بهش، میگن کامپایل شدن.
خب تایپ اسکریپت که به صورت یک superset برای جاوا اسکریپت هست پس باید جاوا اسکریپت رو بررسی کنیم.
کد های جاوا اسکریپت به صورت JIT یا just in time کامپایل میشه.
یعنی engine کد هایی که ما نوشتیم رو به صورت AST یا یک درخت سینتکس بخش به بخش نگاه میکنه و برای ماشین ترجمه میکنه (طی مراحل درونی بیشتر..) و در نهایت کد ما مرحله به مرحله اجرا میشه.
ولی golang برای اجرا شدن توی مرحله اول مستقیما به فایل اجرایی یا exe تبدیل میشه و نیازی به انجام مراحل دیگه برای تفسیر کد نیست.
و همین خودش باعث افزایش سرعت اجرای برنامه میشه.
نیازی به ابزار های bundling مثل پروژه های جاوا اسکریپتی نداره و بعد از build کردن همهی کد های golang که نوشتیم تبدیل به یدونه فایل اجرایی میشن.
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
یه سوال دیگم جا موند.
خب زبان های دیگه هم با این سرعت و این قابلیت ها وجود داره. از جمله C# که توسط خود مایکروسافت هم توسعه داده شده.
چرا golang؟
مایکروسافت علت این انتخاب رو نزدیک بودن زبان golang به تایپ اسکریپت (حداقل بیشتر از بقیه انتخاب ها) اعلام میکنه.
خب زبان های دیگه هم با این سرعت و این قابلیت ها وجود داره. از جمله C# که توسط خود مایکروسافت هم توسعه داده شده.
چرا golang؟
مایکروسافت علت این انتخاب رو نزدیک بودن زبان golang به تایپ اسکریپت (حداقل بیشتر از بقیه انتخاب ها) اعلام میکنه.
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
YouTube
A 10x faster TypeScript
Anders Hejlsberg, lead architect of TypeScript and Technical Fellow at Microsoft, introduces a new port of TypeScript that will deliver the next generation of high-performance developer tooling.
Learn More Here ➡️ https://devblogs.microsoft.com/typescript/typescript…
Learn More Here ➡️ https://devblogs.microsoft.com/typescript/typescript…
Forwarded from Frontend with Erfun👨🏻💻 (Erfun Ghodoosi)
اینم لینک ویدیوی یوتیوبش
Forwarded from Linuxor ?
واسه مادرم روبیکا نصب کردم برگشته میگه اینا چیه همش تکراریه !
آخه این چه برنامه ای یه ساختین انصافا، اگه داری واس روبیکا کد میزنی پاشو سریع این کاری که میگم رو انجام بده یه صف FIFO با اسم visited بساز هرکی هر پستی رو دید بنداز توش بعد چک کن اگه تو این بود دیگه نشون نده یه ظرفیت هم بزار واسش مثلا 100 تا اینطوری دیگه مطمعنی حداقل 100 تا پست غیر تکراری میبینه.
@Linuxor
آخه این چه برنامه ای یه ساختین انصافا، اگه داری واس روبیکا کد میزنی پاشو سریع این کاری که میگم رو انجام بده یه صف FIFO با اسم visited بساز هرکی هر پستی رو دید بنداز توش بعد چک کن اگه تو این بود دیگه نشون نده یه ظرفیت هم بزار واسش مثلا 100 تا اینطوری دیگه مطمعنی حداقل 100 تا پست غیر تکراری میبینه.
@Linuxor
Forwarded from DevTwitter | توییت برنامه نویسی
هر وقت سر و کارم به هارد دیسک میافته مثل پارتیشن بندی، تغییر فایل سیستم File system ، تغییر پارتیشن تیبل (Partition Tables)
تغییراندازه پارتیشن ها و ...
گزینه اول من gparted است
@DevTwitter | <MehrdadLinux/>
تغییراندازه پارتیشن ها و ...
گزینه اول من gparted است
@DevTwitter | <MehrdadLinux/>
Forwarded from Go Casts 🚀
جزییات دوره + تیمسازی بکند و گولنگ Go Casts
دوره و تیمسازی gocasts برای اینه که هم آموزش ببینید، هم خودتون دست به کد بشید و تجربه کسب کنید و ترس تون از کار کردن و کد زدن و مصاحبه کردن بریزه.
لینک خرید دوره + تیمسازی و جزییات سرفصل ها
https://gocasts.ir
توضیحات مفصل صوتی
https://t.iss.one/gocasts/369
نمونه فیلم ها
https://t.iss.one/gocasts/367
تفاوت دوره gocasts با دوره های udemy چیه؟
https://t.iss.one/gocasts/641
ضمانت بازگشت وجه تا ۳۰ روز پس از خرید
https://t.iss.one/gocasts/370
پرسش و پاسخ
https://t.iss.one/gocasts/337
دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4
پرسش و پاسخ و ارتباط با بنده
🆔 @lifography
تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441
@gocasts
دوره و تیمسازی gocasts برای اینه که هم آموزش ببینید، هم خودتون دست به کد بشید و تجربه کسب کنید و ترس تون از کار کردن و کد زدن و مصاحبه کردن بریزه.
لینک خرید دوره + تیمسازی و جزییات سرفصل ها
https://gocasts.ir
توضیحات مفصل صوتی
https://t.iss.one/gocasts/369
نمونه فیلم ها
https://t.iss.one/gocasts/367
تفاوت دوره gocasts با دوره های udemy چیه؟
https://t.iss.one/gocasts/641
ضمانت بازگشت وجه تا ۳۰ روز پس از خرید
https://t.iss.one/gocasts/370
پرسش و پاسخ
https://t.iss.one/gocasts/337
دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4
پرسش و پاسخ و ارتباط با بنده
🆔 @lifography
تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441
@gocasts
آموزش برنامه نویسی گولنگ (Golang) | Go Casts
آموزش زبان برنامه نویسی گولنگ (Golang) - گو (Go) | Go Casts
با Go Casts شما می توانید زبان برنامه نویسی گولنگ (Golang) را به صورت تجربه محور یاد بگیرید. زبان گو (Go) در توسعه سرویس های تحت وب سمت بکند (Backend) کاربرد زیادی دارند.
Forwarded from Agora (Alireza Azadi)
عنوان که مشخصه ولی حتما باز کنید انیمیشنهای تعاملی که برای توضیح پیاده کرده رو نگاه کنید. خیلی جالب بود.
https://planetscale.com/blog/io-devices-and-latency
https://planetscale.com/blog/io-devices-and-latency
Planetscale
IO devices and latency — PlanetScale
Take an interactive journey through the history of IO devices, and learn how IO device latency affects performance.
Forwarded from Linuxor ?
This media is not supported in your browser
VIEW IN TELEGRAM
از این آپدیت امروز به بعد میتونین توی وی اس کد بیاین و یه سری فایل به عنوان دستورالعمل سفارشی اضافه کنید که copilot از روی اون بخونه و طبق اون فایل دستور العمل کد بسازه براتون
مثلا اینجا بهش گفته که فایل های دیتابیسم توی فولدر dev/. بسازه و مثلا برای مدل ها توی جاوااسکریپت گفته پاسکال کیس باشه و بجای users اسم کلاس باشه Users؛ هر دستور العملی میتونین توی یه فایل بنویسید ک طبق اون کد براتون بسازه و پروژه طبق قالب شما باشه.
@Linuxor
مثلا اینجا بهش گفته که فایل های دیتابیسم توی فولدر dev/. بسازه و مثلا برای مدل ها توی جاوااسکریپت گفته پاسکال کیس باشه و بجای users اسم کلاس باشه Users؛ هر دستور العملی میتونین توی یه فایل بنویسید ک طبق اون کد براتون بسازه و پروژه طبق قالب شما باشه.
@Linuxor
Forwarded from 𝕏𝗖𝗢𝗗𝗘 | فراتر از کد
حالا که فصل فصل پاکسازیه؛
گوشی تکونی یادت نره!
➊اول برو سمت مخاطبین
هر فردی که باید حذف بشه از زندگیت
شمارش رو حذف کن
هرفردی که مسیرش با تویکی نیست
حذفش کن خواهشا.
➋برو سمت تلگرام
هرکانال و گروهی که باید حذف بشه
رو حذف کن وقتت رو با کانال های بیهوده تلف نکن.
➌اینستا
معتقدم که اگه از اینستاگرام درآمدی نداری نگهش نداری بهتره !
اگه درآمد داری:
پیج هایی که وقت تلف کردنه و حال بد بهت میده رو انفالو کن و چندتا پیجی که به رشدت و به حال خوبت کمک میکنه رو داشته باش
➍و اما موزیک ها
موزیک در انرژی ما نقش بسیار مهمی داره سعی کن موزیک هایی با محتوای خوب رو داشته باشی
➎گالری
گالری گردی کن
هرعکس و فیلمی باید حذف بشه رو حذف کن، نگهداری بعضی از این عکس ها فقط نگهداری انرژی منفیه
➏اگر دریادداشت گوشی متنی نوشتی که پراز انرژی منفی و حال بده حذفش کن
➐برنامهها
برنامه هایی که وقت تلف کردنه و
نکته ی مثبتشون فقط سرگرمیه رو حذف کن، مراقب چشم های قشنگت باش
📝 @𝕏Code_IR
گوشی تکونی یادت نره!
➊اول برو سمت مخاطبین
هر فردی که باید حذف بشه از زندگیت
شمارش رو حذف کن
هرفردی که مسیرش با تویکی نیست
حذفش کن خواهشا.
➋برو سمت تلگرام
هرکانال و گروهی که باید حذف بشه
رو حذف کن وقتت رو با کانال های بیهوده تلف نکن.
➌اینستا
معتقدم که اگه از اینستاگرام درآمدی نداری نگهش نداری بهتره !
اگه درآمد داری:
پیج هایی که وقت تلف کردنه و حال بد بهت میده رو انفالو کن و چندتا پیجی که به رشدت و به حال خوبت کمک میکنه رو داشته باش
➍و اما موزیک ها
موزیک در انرژی ما نقش بسیار مهمی داره سعی کن موزیک هایی با محتوای خوب رو داشته باشی
➎گالری
گالری گردی کن
هرعکس و فیلمی باید حذف بشه رو حذف کن، نگهداری بعضی از این عکس ها فقط نگهداری انرژی منفیه
➏اگر دریادداشت گوشی متنی نوشتی که پراز انرژی منفی و حال بده حذفش کن
➐برنامهها
برنامه هایی که وقت تلف کردنه و
نکته ی مثبتشون فقط سرگرمیه رو حذف کن، مراقب چشم های قشنگت باش
Forwarded from DevTwitter | توییت برنامه نویسی
احتمالا با این مخزن برخورد کردید.
لیستی از سرویسها و سایتهایی که پلن رایگان هم دارند.
از سرور، DNS، محصولات امنیتی و خدمات ابری تا هر چیزی که شما به عنوان توسعهدهنده ممکن است به آن نیاز داشته باشید.
https://github.com/ripienaar/free-for-dev
@DevTwitter | <Vahid Nameni/>
لیستی از سرویسها و سایتهایی که پلن رایگان هم دارند.
از سرور، DNS، محصولات امنیتی و خدمات ابری تا هر چیزی که شما به عنوان توسعهدهنده ممکن است به آن نیاز داشته باشید.
https://github.com/ripienaar/free-for-dev
@DevTwitter | <Vahid Nameni/>
Forwarded from LearnPOV | لرن پی او وی
سلام رفقا، تو رینج قیمتی ۲ تا ۴ تومن هدفون بلوتوثی چی پیشنهاد میدید ؟
Forwarded from دستاوردهای یادگیری عمیق(InTec)
قابلیت
حالا برای کاربرهای
نتایج خوبی هم داره من روی تستهای اولیه باهاش کار کردم.
Deep Research که توسط گوگل معرفی شد ولی OpenAi زودتر کپی کرد و با قیمت (اگر اشتباه نکن) 20$ به کاربرا دسترسی داد.حالا برای کاربرهای
Gemini رایگان شدهنتایج خوبی هم داره من روی تستهای اولیه باهاش کار کردم.
Forwarded from DevTwitter | توییت برنامه نویسی
آمازون با صدها میلیون محصول در کاتالوگ، هر کاربر را با صفحهای شخصیسازیشده (Recommendation System) روبهرو میکنه.
این صفحهها بر اساس علایق (Interests)، محیط فعلی (Context)، رفتارها و خریدهای گذشته تنظیم میشن. مثلاً اگه آیفون خریدی، کاورشو هم بهت پیشنهاد میشه.
چطوری میشه؟
سیستم ریکامندر آمازون به سه بخش اصلی تقسیم میشه:
- پیشنهاد محصولات مرتبط (Related Products Recommendation)
- پیشنهاد خرید مجدد (Repeat Purchase Recommendation)
- و پیشنهاد ویژگیهای جستجو (Query-Attribute Search Recommendation).
آمازون برای پیشنهاد محصولات مرتبط از یک Product Graph (گراف محصول) استفاده میکنه؛ تو این گراف راسها (Nodes) نشاندهندهی محصولاتن، در حالی که یالها (Edges) رابطه میان محصولات رو نشون میدن، مثلا خرید همزمان (Co-Purchase) یا بازدید همزمان (Co-View).
هدف گراف محصول اینه که محصولاتی که احتمال خرید همزمان اونا بالاست رو پیشنهاد بده.
یک مسئله اصلی، "Selection Bias" هست، یعنی اگه محصولی (مثل کاور آیفون) به دلیل موجودی کم نشون داده نشه، دادههای خرید گمراهکننده خواهد بود.
آمازون مشکل Selection Bias رو با اضافه کردن روابط دوم مرحلهای (Two-stage relations) حل میکنه.
محصولات جدید (Cold Start) هم یه توی این سیستم مثل بقیه سیستمهای ریکامندر چالش هست، چطوری حلش کردن؟
آمازون با کمک Graph Neural Networks (GNNs) از طریق یادگیری Embeddings، محصولات جدید رو به گراف محصول اضافه میکنه تا پیشنهادهای مرتبط رو بتونه ارايه بده.
در GNNها دو Embedding برای هر محصول تولید میشن، Source (برای محصول کوئری شده) و Target (برای محصول پیشنهادی).
اینها از طریق رابطههای Co-Purchase و Co-View به روزرسانی میشن و پیشنهادهای دقیقتری ارایه میدن.
تو بخش پیشنهاد خرید مجدد، سیستم احتمال خرید دوباره یه محصول مثلا خمیر دندون رو بر اساس تاریخچه خرید (Purchase History) و زمان آخرین خرید پیشبینی میکنه، و CTR رو افزایش میده.
آمازون تو بحث پیشنهاد خرید مجدد از مدلهای مختلفی برای این پیشبینیها استفاده میکنه:
- Repeat Customer Probability Model (بر اساس فرکانس خرید)
- Aggregate Time Distribution (ATD) Model (بر اساس رفتار گذشته)
- Poisson-Gamma (PG) Model (بر اساس فرآیند Poisson و توزیع Gamma)
بحث بعدی پیشنهاد ویژگیهای جستجو (Query-Attribute Search Recommendation) هستش، مثلا برای درخواستهای کوتاه (مانند آیفون ۱۰)، آمازون از attributeهای غیر قابل مشاهده (مثل Brand:Apple یا Supplement:Cover) استفاده میکنه تا نتایج رو بهتر کنه.
این سیستم شامل Query Intent Classification (تشخیص قصد کوئری مثلا بگیم)، Explicit Attribute Parsing (تشخیص مشخصات صریح) و Implicit Attribute Recommendations (پیشنهاد مشخصات ضمنی با استفاده از روابط گراف و GNNها) هست.
این قسمت پیشبینیش و مدلا اگه یکم سخته فهمیدنش مقالشون اینجاس:
https://www.amazon.science/publications/query-attribute-recommendation-at-amazon-search
خلاصه اینکه آمازون جون با استفاده از GNNs، Product Graph و Probabilistic Models سیستمی مقیاسپذیر و دقیقی برای پیشنهاداتش ساخته و تونستن نرخ خرید رو با سیستم ریکاندرشون بالا ببرن.
این درسها برای ما هم تو طراحی سیستمهای Recommender میتونه الهامبخش باشه
@DevTwitter | <Saman/>
این صفحهها بر اساس علایق (Interests)، محیط فعلی (Context)، رفتارها و خریدهای گذشته تنظیم میشن. مثلاً اگه آیفون خریدی، کاورشو هم بهت پیشنهاد میشه.
چطوری میشه؟
سیستم ریکامندر آمازون به سه بخش اصلی تقسیم میشه:
- پیشنهاد محصولات مرتبط (Related Products Recommendation)
- پیشنهاد خرید مجدد (Repeat Purchase Recommendation)
- و پیشنهاد ویژگیهای جستجو (Query-Attribute Search Recommendation).
آمازون برای پیشنهاد محصولات مرتبط از یک Product Graph (گراف محصول) استفاده میکنه؛ تو این گراف راسها (Nodes) نشاندهندهی محصولاتن، در حالی که یالها (Edges) رابطه میان محصولات رو نشون میدن، مثلا خرید همزمان (Co-Purchase) یا بازدید همزمان (Co-View).
هدف گراف محصول اینه که محصولاتی که احتمال خرید همزمان اونا بالاست رو پیشنهاد بده.
یک مسئله اصلی، "Selection Bias" هست، یعنی اگه محصولی (مثل کاور آیفون) به دلیل موجودی کم نشون داده نشه، دادههای خرید گمراهکننده خواهد بود.
آمازون مشکل Selection Bias رو با اضافه کردن روابط دوم مرحلهای (Two-stage relations) حل میکنه.
محصولات جدید (Cold Start) هم یه توی این سیستم مثل بقیه سیستمهای ریکامندر چالش هست، چطوری حلش کردن؟
آمازون با کمک Graph Neural Networks (GNNs) از طریق یادگیری Embeddings، محصولات جدید رو به گراف محصول اضافه میکنه تا پیشنهادهای مرتبط رو بتونه ارايه بده.
در GNNها دو Embedding برای هر محصول تولید میشن، Source (برای محصول کوئری شده) و Target (برای محصول پیشنهادی).
اینها از طریق رابطههای Co-Purchase و Co-View به روزرسانی میشن و پیشنهادهای دقیقتری ارایه میدن.
تو بخش پیشنهاد خرید مجدد، سیستم احتمال خرید دوباره یه محصول مثلا خمیر دندون رو بر اساس تاریخچه خرید (Purchase History) و زمان آخرین خرید پیشبینی میکنه، و CTR رو افزایش میده.
آمازون تو بحث پیشنهاد خرید مجدد از مدلهای مختلفی برای این پیشبینیها استفاده میکنه:
- Repeat Customer Probability Model (بر اساس فرکانس خرید)
- Aggregate Time Distribution (ATD) Model (بر اساس رفتار گذشته)
- Poisson-Gamma (PG) Model (بر اساس فرآیند Poisson و توزیع Gamma)
بحث بعدی پیشنهاد ویژگیهای جستجو (Query-Attribute Search Recommendation) هستش، مثلا برای درخواستهای کوتاه (مانند آیفون ۱۰)، آمازون از attributeهای غیر قابل مشاهده (مثل Brand:Apple یا Supplement:Cover) استفاده میکنه تا نتایج رو بهتر کنه.
این سیستم شامل Query Intent Classification (تشخیص قصد کوئری مثلا بگیم)، Explicit Attribute Parsing (تشخیص مشخصات صریح) و Implicit Attribute Recommendations (پیشنهاد مشخصات ضمنی با استفاده از روابط گراف و GNNها) هست.
این قسمت پیشبینیش و مدلا اگه یکم سخته فهمیدنش مقالشون اینجاس:
https://www.amazon.science/publications/query-attribute-recommendation-at-amazon-search
خلاصه اینکه آمازون جون با استفاده از GNNs، Product Graph و Probabilistic Models سیستمی مقیاسپذیر و دقیقی برای پیشنهاداتش ساخته و تونستن نرخ خرید رو با سیستم ریکاندرشون بالا ببرن.
این درسها برای ما هم تو طراحی سیستمهای Recommender میتونه الهامبخش باشه
@DevTwitter | <Saman/>