Arman Profile picture
May 13, 2024 25 tweets 10 min read Read on X
حتما براتون پیش اومده تو سایت‌های مختلف چیزی رو سرچ کنید ولی نتایج از زمین تا آسمون فرق داشته با اونی که تو ذهنتون بوده. واقعا چرا سرچ اکثر سایت‌ها اینقدر بده؟
تو این رشتو نگاهی می‌کنیم به دیجی‌کالا و می‌بینیم چطور با یه کم جبرخطی میشه تجربه جستجوی محصولات رو کلا متحول کرد. Image
قضیه از اینجا شروع میشه که می‌خوای برای پارتنرت کادو بخری. دیجی‌کالا رو باز می‌کنی، تو نوار جستجو می‌زنی ماتیک (چون اون لحظه بجای کلمه رژ لب، ماتیک تو ذهنت بوده). اینتر می‌زنی و منتظری چند صفحه رژ لیست شه تا از بینشون انتخاب کنی؛ اما تنها چیزی که میاد بیلاخه. Image
بعد عصبانی می‌شی و شروع می‌کنی به عرق کردن. ای بابا دستمال کاغذی ندارین که تو خونه. سرچ می‌کنی کلینکس. جز یه دونه که اونم برندش تشابه اسمی داره هیچ نتیجه‌ای نمیاد. Image
دیگه میگی آقا ولش کن خونسرد باش. یه ذره سر خودمو با فیلم و سریال گرم کنم بجای حرص خوردن. فیلم دیدن بدون چیزی خوردن مگه میشه؟ سرچ می‌کنی چس فیل. اما بازم جای دیگه‌ای از فیل تو نتایج منتظرته. لیپتون؟ صفر کالای موجود از چای کیسه‌ای.
Image
Image
این قضیه راجع به کلمات دیگه هم هست. می‌زنی سامسونت گوشی موبایل سامسونگ میاد، استند تلویزیون کلا دوتا میز تلویزیون موجود میاره، تلفن ثابت بجای رومیزی صفر نتیجه، چاپگر هم با اینکه خیلی کم تو روزمره بکار میره ولی به‌هرحال معادل فارسی رسمی پرینتره که اونم تو دیجی‌کالا صفر نتیجه داره.
شاید خود من هیچوقت ماتیک رو جای رژ و لیپتون رو جای چای کیسه‌ای به کار نبرم ولی تا چه اندازه میشه مطمئن بود کل ایران با هر سن و سلیقه، یکسان سرچ می‌کنن؟ مطمئنا صدها محصول وجود داره که به چند اسم مختلف تو جوامع مختلف صدا میشه.
خیلی مثال دیگه علاوه بر اینها هست که نشون میده الگوریتم سرچ تو دسته‌بندی کلمات هم‌معنی و اجناس معادل، ضعف جدی داره.
چرا این اتفاق میوفته؟
راهکار کلی‌ای که برای پیاده‌سازی سرچ تو اکثر شرکت‌ها وجود داره استفاده از Elasticsearch هست. Image
الستیک یه موتور جستجوی اوپن‌سورس و خیل خفنه که برای نگهداری و تحلیل دیتا ازش استفاده می‌شه. وارد جزییات نمی‌شم اما اینو بدونین که از یه ساختار به اسم Inverted Index استفاده می‌کنه که داکیومنت‌هارو بر اساس «کلیدواژه» و فراوانی وزنی TF-IDF ذخیره و پردازش می‌کنه. Image
مشکل همینجاست که داریم از کلیدواژه‌ها استفاده می‌کنیم و موتور جستجوی ما هیچ درکی از اینکه چاپگر و پرینتر در واقع یک چیزن نداره.
حالا راه حل چیه؟ اولین چیزی که به ذهن می‌رسه داشتن یه دیتابیس از کلمات هم‌معنیه. اما کار تمیزی نیست چون تعداد کالاها زیاده و دیتابیس باید آپدیت بمونه.
ما باید راهی پیدا کنیم که متوجه منظور و مفهوم اون کلمه یا عبارت بشیم تا بفهمیم واقعا کاربر دنبال چی داره می‌گرده. بریم سراغ ریاضی 😁
از زمان مدرسه یادمونه که جای یه نقطه در صفحه رو با مختصات [x,y] نشون می‌دادیم. به همین ترتیب یه نقطه در فضا [x,y,z]. حالا جای چند نقطه در صفحه چی؟ Image
برای نمایش n نقطه در فضای ۲ بعدی به ماتریسی احتیاج داریم که هر ستون، نشانگر هر کدوم از نقاط‌مون باشن و سطر اول مقدار طول (x) و دوم عرض (y) اون نقاط. بعنوان قرارداد، هر نقطه رو هم به شکل فلش (بردار یا vector) ای که از مبدا میره اونجا در نظر بگیرید. به این شکل: Image
حالا فرض کنید از ما می‌پرسن فاصله نقطه p از q چقدره. خیلی ساده جوابش میشه اندازه برداری که از p میره به q. قضیه فیثاغورث یادتونه که تو یه مثلت قائم الزاویه وتر به توان ۲ می‌شد جمع توان دوی اضلاع؟ دقیقا به همون شکل اندازه این بردار که الان وتر مثلثه در میاد. Image
الان توانایی سنجش فاصله بین هر دو نقطه تو فضا رو داریم. یه نقطه جدید میاد وسط. از ما می‌پرسن نزدیک‌ترین نقطه‌ها به این چیه؟ فاصله همه نقاط از این نقطه جدید رو درمیاریم و اونایی که کمترین فاصله رو دارن معرفی می‌کنیم. در واقع میشه همسایه‌های اون نقطه تو یه دایره (بهش میگن KNN). Image
حالا به یه بعد بالاتر فکر کنید. توی یه فضای ۳ بعدی هم تمام این محاسبات برقراره با یه کم جزییات بیشتر. مثلا همسایه‌های یک نقطه جدید، بجای دایره میوفته توی یه کره به مرکز اون نقطه. تو ابعاد بالاترش هم همینطور. Image
حالا بریم سراغ کار خودمون؛ فهمیدن مفهوم از متن.
تمام کلمات موجود تو یه زبان رو برمی‌داریم. مثلا ۵۰ هزارتا. همه رو پرت می‌کنیم تو یه فضای خیلی زیاد بُعدی مثلا n. هرکدوم تبدیل میشن به یه بردار n بعدی. همه رو کنار هم می‌چنیم بشکل ماتریس. هر ستون یک کلمه. بهش میگیم Embedding matrix. Image
عددی که تو هر سطر و ستون این ماتریس وجود داره اول رندومه اما مدل ما هرچقدر بیشتر که دیتا (مثل مقاله، داستان، کتاب،...) می‌بینه با یه سری فرمول ریاضی کم کم شروع می‌کنه به عوض کردن این اعداد (=یاد گرفتن). هر ورودی متنی مثل «بابا باد داد» وزن‌های کلمات بابا، باد و داد رو عوض می‌کنه.
هرچقدر مدل ما بیشتر یاد می‌گیره، یواش یواش کلمات چاپگر و پرینتر رو نزدیک به هم قراره میده چون مقالاتی که راجع به هرکدوم خونده خیلی شبیه بهم بوده؛ و کم کم به سمتی می‌ریم که هر «جهتی» از این فضای خیلی زیاد بعدی، انگار یک مفهوم رو داخل خودش داره. Image
بعنوان یه مثال دیگه، مدل GloVe که روی مقالات ویکی‌پدیا آموزش دیده رو اگر در نظر بگیریم، توش کلمات «ساختمون»، «آسمان‌خراش»، «سقف» و «ساخت» نزدیک به هم قرار می‌گیرن. Image
اما نکته جالب اینه که ما میتونیم اعمال ریاضی روی این کلمات انجام بدیم. تفریق برداری «مرد» از «زن» یه بردار جدید توی فضاست (از انتهای کلمه مرد به کلمه زن وصل کنین). این بردار خیلی شبیه‌هه به برداری که از تفریق «شاه» از «ملکه» بدست میاد.
انگار اون جهت برداری (زرد)، مفهوم جنسیته. Image
توی این معادله اگر کلمه شاه رو ببریم سمت راست، میتونیم خود کلمه ملکه رو بدست بیاریم: جمع شاه با زن منهای مرد. پس الان یه مدلی داریم که میتونیم ازش بپرسیم پادشاه مونثی که مرد نیست چیه و جواب بگیریم ملکه. می‌بینید چقدر قشنگ مفهوم و معنی کلمات به ریاضی مدل شدن؟ Image
این کار رو بهش می‌گن word embedding. حالا فرض کنید توی این فضای چندبعدی، به‌جای کلمه، محصولات مختلف دیجی‌کالا باشن. product embedding.
به ازای هر کالا، عنوان محصول + توضیحاتش رو با استفاده از یه مدل زبانی بزرگ (که مثلا کل ویکی‌پدیای فارسی رو قبلا خونده) ببریم تو این فضا.
با اینکار، موفق می‌شیم محصولات شبیه به هم رو نزدیک به هم داشته باشیم. «لپ‌تاپ ۱۵.۶ اینچی MSI» کنار «کامپیوتر همه‌کاره ASUS» قرار می‌گیره بدون اینکه تو عنوان کالا اشتراکی داشته باشن. با اختلافی کم، احتمالا کالاهای دیجیتال و با یه فاصله زیاد لباس زنانه که شباهتی با اینا نداره هست. Image
در نهایت، وقتی کاربر برای چیزی سرچ می‌کنه، ما اونو برمیداریم و مثل یه نقطه می‌ندازیم توی این فضا، با استفاده از KNN می‌بینیم چه محصولاتی تو نزدیک‌ترین همسایگی این نقطه هستن و همونا رو نشون میدیم.
اینطوری با سرچ چاپگر میشه تو نتایج پرینترها رو دید. به همین راحتی به همین خوشمزگی 😁 Image
من با استفاده از دیتاست دیجی‌کالا () یه دمو از کل این فرایند ساختم و خیلی چیز جالبی شد. کدش رو گیت‌هابم هست. دوست داشتید امتحان کنید: البته هنوز خیلی جای بهتر شدن داره.kaggle.com/datasets/radea…
github.com/ArmanJR/Digika…
در آخر، رفرنس و نکته:
- ویدیو
- من سعی کردم به ساده‌ترین شکل ریاضی‌ش رو بگم و شاید نادقیق حرف زده باشم. با پوزش از اساتید لطفا ایده کلی رو بچسبید :))
- پیاده‌سازی این تو مقیاس دیجی‌کالا منابع زیادی می‌خواد اگر پیاده نمیشه شاید فعلا نمی‌صرفه لابد ¯\_(ツ)_/¯

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Arman

Arman Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @itsArmanJr

Feb 22
داستان از جایی شروع شد که دیدم عکس‌العمل من به عکس‌هایی که پارتنرم از مو و لباس و ناخونش می‌فرسته تکراری شده و ذوقم رو درست منتقل نمی‌کنه. تا کی بگم پشمااام/💋💋/خوشگل😍؟ اصلا زشته در جواب اون زیبایی مطلق که با ذوق برام عکس گرفته شده بخوام پشمامو با چارتا ایموجی بفرستم :))) #رشتو Image
کلا وقتی یه دختر خوشگل از خودش برای شما عکس می‌فرسته، شما یکی از این دوتا پسری:

- یا با ده‌ها سال تجربه در امور لاس، بلدی جواب بدی جوری که قند تو دلش آب شه
- یا تجربه‌ت کمه و چارتا پشمام و برگام و ایموجی چشم قلبی اینا می‌فرستی

ولی یه حالت مخفی سوم هم هست که... خب ریاضی بلدی 🤓
من تو لاس زدن اصلا خوب نیستم. کتاب و دوره آموزشی لاس‌زنی هم که نداریم. نمیتونم با صد نفر هم دیت کنم که با آزمون و خطا یاد بگیرم. فکر کردم چیکار کنم، و قوی‌ترین چیزی که پیدا کردم این بود: شعر فارسی.
Read 15 tweets
Sep 21, 2023
تا حالا فکر کردید اگر ته هرچیزی تو دنیا رو بگیریم بریم آخرش به کجا می‌رسیم؟
برای جواب این سوال بریم سراغ ویکی‌پدیا جایی که برای هرچی از زیردریایی U516 ارتش هیتلر بگیر تا نصف‌النهار ۱۴ درجه، صفحه توش وجود داره.
معمولا توضیحات ویکی‌پدیا با معرفی دسته‌بندی یا منشأ اون چیز شروع میشه/ Image
تو یه صفحه تصادفی مثل توییت قبل، فوتبال آمریکایی در اصل یه ورزش تیمیه. اگر صفحه ورزش تیمی رو باز کنیم به فعالیت ورزشی می‌رسیم. بعد به ورزش => فعالیت بدنی => بدن => انسان و... همینطور تا بالاتر.

اگر همین روند رو طی کنیم و هربار وارد اولین لینکی که توی اولین پاراگراف وجود داره/ Image
بشیم، انگار همه چیز میرسن به یکی: فلسفه!
واسه اینکه ببینیم این حرف چقدر درسته و هرچیز رندومی تو دنیا چقدر فاصله داره از فلسفه، یه اسکریپت نوشتم که بیاد هربار این روند رو طی کنه و بشماره. ۱۰۰۰ صفحه رو بصورت رندوم از ۶.۷ میلیون صفحه‌ی ویکی‌پدیای انگلیسی/
Read 9 tweets
Apr 20, 2022
موقع مقایسه محصولات تو دیجی کالا جنسی که امتیاز پایین‌تر اما رأی‌های بیشتر داره رو انتخاب می‌کنید یا اونی که امتیاز بالاتر اما رأی‌های کمتر داره؟ این مشکلیه که حتما بهش برخوردید و نتونستید تصمیم بگیرید ولی لاپلاس تو قرن ۱۸ این مسئله رو حل کرده و نتیجه‌ش شده قانون توالی لاپلاس 👇
تو نظریه احتمال، قاعده توالی (Rule of succession) فرمولیه که توسط لاپلاس معرفی شد. این فرمول هنوز مورد استفاده قرار می‌گیره، مخصوصا برای تخمین احتمالات وقتی که مشاهدات کمی داریم یا برای حل مشکل رویدادهای اصلاً مشاهده نشده در داده های نمونه (مثل نظرات منفی در امتیازات یک محصول) /
اینجا نمی‌خوام تئوری لاپلاس رو براتون باز کنم اما نتیجه‌ای که مطالعات لاپلاس برای مسئله ما داره اینه که، اگر برای محصولی نظرات کمی وجود داره و بین اون‌ها هم نظرات منفی کمه یا اصلا نیست، برای اینکه به عدد قابل مقایسه برسیم، میایم ۱ نظر کاملا مثبت و ۱ نظر کاملا منفی اضافه می‌کنیم /
Read 8 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(