Armin's Notes 🪴 – Telegram
Armin's Notes 🪴
146 subscribers
71 photos
13 videos
1 file
55 links
إحتضن نَفسك بِنَفسك، لَن يحارب أحد مِن أجلك 💛

اینجا بیشتر می‌نویسم... 🌿
از چیزایی که به نظرم جالب رسیده 🦋
موزیکایی که دوس داشتم 🌚
مقالات و کتابایی که خوندم 📚
و چیزای دیگه 💫

🃏 t.me/PanicDev

🃏 t.me/LaravelGroups

🃏 t.me/MentionHex
Download Telegram
👍71
درود 😁👋

از اونجایی که امشب قراره یک وبینار جمع و جور درمورد Semantic Search و Word Embedding و VectorDB ها داشته باشیم - به جهت این‌که قبل از وبینار یه Big Picture از کلیت ماجرا گرفته باشید و بدونید که قراره چیکار کنیم یک‌سری توضیحات رو به صورت متنی براتون مینویسم.

- فقط دوتا نکته‌ی کوچیک...

🔕 تمام پیام‌های بعد از این پست تا انتهای بحث به صورت Silent ارسال میشه که مزاحمتون نشه.

🧑‍🎓 من خودم درحال یادگیری هستم و تازه وارد این مسیر شدم و از اون‌جایی که فیلد تخصصیم نیست - سعی میکنم تا جایی که ممکنه از توضیحات تکنیکال خودداری کنم و مطالب رو ساده و جوری که فهمیدم و از صحت‌شون اطمینان دارم براتون بگم - برای توضیحات تکنیکال میتونید سرچ بزنید و از رفرنس‌های معتبر استفاده کنید

♥️ پیشاپیش امیدوارم که براتون مفید باشه و ازش لذت ببرید.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7🙏2🤝2
خب قبل از هرچیزی - ما باید بدونیم که سرچ چی هست؟

خیلی ساده اگه بخوایم تعریفش کنیم:
"به پروسه‌ی پیدا کردن اطلاعات مرتبط از یک دیتاست بر اساس کوئری کاربر سرچ میگیم"

- برای اجرای پروسه‌ی سرچ از تکنیک‌های مختلفی برای تطابق دادن کوئری با اطلاعات ذخیره شده استفاده میشه که این تکنیک ها به این صورته:

🔸 سرچ لغوی یا Lexical Search

🔹 سرچ معنایی یا Semantic Search

🔸 سرچ فازی یا Fuzzy Search

🔹 سرچ عصبی یا Neural Search
👍7🔥1👏1
حالا باید بدونیم هرکدوم از اینا چیکار میکنن و کجا مناسب هستن؟

- ما قطعا با هر ۴ حالت به طور مستقیم و غیرمستقیم بارها و بارها درگیر بودیم اما اسمشون رو نمیدونستیم (حداقل من که خودم شخصا نمیدونستم و اخیرا فهمیدم) شمارو نمیدونم 😁


1. لکسیکال سرچ
این حالت به سرچ مستقیم و دقیق کوئری (exact search) توی متن میگن.

از این حالت توی دیتابیس ها هم میتونید به راحتی استفاده کنید - مثلا توی SQL وقتی WHERE LIKE میزنید - دقیقا دارید Lexical Search انجام میدید.

مثال بخوایم بزنیم به این صورت میشه که:

🔥 فرض کنید که شما کلمه‌ی "آب" رو سرچ کردید - خروجی که به شما برگشت داده میشه این خواهد بود:

۱. علی در أبان ماه پیام داد.
۲. آسمان آبی است.
۳. آبشار بسیار زیبا بود.
۴. بابا آب داد.

به دلیل اینکه کلمه آب توی تمام متون وجود داره - همگی به شما برگشت داده میشن.

این روش چه مزایا و معایبی داره؟

مزایا
۱. خیلی سریع و efficient هست
۲. پیاده سازی و استفاده ازش ساده‌تر از بقیه هست
۳. برای exact search خیلی کاربردیه
- مثلا دنبال ای‌دی یک محصول یا یک شناسه یونیک مثل کدملی یا پلاک خودرو و ... میگردید.

معایب
۱. نمیتونه معنا و کانتکس رو مشخص کنه.
- همونطور که توی مثال های بالا دیدید با سرچ آب ممکنه خروجی آبان - آبی و أبشار رو هم بگیرید.
۲. حساس به غلط املایی هست
- مثلا اگه بجای سرچ آب دستتون بخوره و آپ رو سرچ کنید هیچ یک از نتایجی که توی مثال بالا داشتیم بهتون برنمیگرده
۳. درصورت عدم استفاده از کلمه دقیق نتایج درستی بهتون برنمیگرده
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1👏1
۲. سرچ فازی
این حالت تقریبا همون لکسیکال سرچ پرو مکسه :))
چرا؟ چون همون عملکرد لکسیکال سرچ رو داره اما بهبود هایی هم داشته به این صورت که میتونه غلط های املاییتون رو هم تحمل کنه و سرتون غر نزنه و همچنان نتایج مرتبط بده و یکمی هم توی اصلاح کردن کوئریتون کمک میده.

- مثلا شما اگه بجای سلام بنویسید شلام - باز هم نتایج مرتبط با سلام رو میگیرید
- اگه دستتون بخوره و یه حرف تکرار بشه - باز هم نتایج مشابه میگیرید. مثلا بنویسید سلااااااااام - نتایج مرتبط با سلام رو میگیرید.

اگه بخوایم یه سرویس که این عملکرد رو در اختیارتون میزاره مثال بزنیم TypeSense میتونه مثال خیلی خوبی باشه.

🔗 https://typesense.org

حتی میتونید به مستندات سایت‌های مختلف هم سر بزنید مثلا فیلامنت و لاراول و ... که از Algolia استفاده میکنن و شما اگه یه کلمه رو اشتباه هم بنویسید بازم نتایج مرتبط میگیرید.


مزایا و معایبش چیه؟

مزایا
۱. اشتباهات تایپی و غلط املایی رو خیلی خوب مدیریت میکنه
۲. لغات و دیتای مشابه رو براتون پیدا میکنه
۳. پیاده سازی نسبتا ساده‌ای داره (در رتبه ۲ - بعد از لکسیکال سرچ و قبل از سمانتیک سرچ قرار میگیره)

معایب
- راستش زیاد معایب که نمیشه بهشون گفت ولی:
۱. گاها این امکان براش وجود داره که دیتای بی ربط زیادی رو برگردونه در شرایط مختلف
۲. توانایی درک معنایی رو نداره (لکسیکال سرچ هم این توانایی رو نداره)
۳. عملکردش با دیتاست های بزرگ زیاد efficient نیست

⚠️ گفتیم که سرچ فازی همون لکسیکال سرچه تقریبا و بهبود پیدا کرده اما یک سری ایرادات همچنان داخلش هست مثلا شما اگه Apple رو سرچ بزنید ممکنه Application هم براتون توی نتایج بیاره و این مشکل توی همون حالت لکسیکال هم وجود داره که ریشه‌ی این مشکل عدم امکان درک معنای لغات هست.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👏1🙏1
۳. سرچ معنایی
این حالت از سرچ - معنای نهان کوئری شمارو متوجه میشه و حتی اگه کلمات کلیدی بهش نداده باشین میتونه ارتباط و مفهوم کلمات رو متوجه بشه و خروجی مناسب و مرتبطی رو به شما بده

⚠️ حالا اینکه معنای کلمات رو چطوری میفهمه رو جلوتر توضیح میدم و این همون چیزیه که ما امشب قراره باهاش کار کنیم و درموردش صحبت کنیم)

مثال بخوایم بزنیم - توی این حالت اگه شما سرچ کنید
🔥 "من یک چیزی میخوام که باهاش پادکست گوش بدم"

نتایجی مثل:‌
- هدفون
- ایرپاد
- هندزفری
- اسپیکر
و ... رو به شما برمیگردونه - با این‌که شما هیچ اشاره‌ای به هیچکدوم از این موارد نکرده بودید توی متن‌تون.

مزایا و معایب این روش چیه؟

مزایا
۱. معنا و مفهوم کلمات رو متوجه میشن و اطلاعات مرتبط (از نظر معنایی)‌ به شما برمیگردونن
۲. مترادف‌هارو درک میکنن
۳. ضمینه (context) کوئری شمارو متوجه میشن
- مثلا اگه بگید "من میخوام شنا کنم دنبال آب میگردم" براتون آبشار و أب رو میاره اما آبان و آبی رو نمیاره.

معایب
۱. هزینه اجرایی و محاسباتی بالا
۲. ذخیره سازی پیچیده
۳. نیاز به فضای بالا در ماتریس ها و فضاهای برداری بزرگ
۴. نیاز به pre-train کردن embed model توی دیتاست‌های خیلی بزرگ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤯3🔥1
۴. سرچ عصبی
این تکنیک از مدل‌های یادگیری عمیق (DeepLearning models) برای ارائه خروجی متنی (Text representation) و از بردار های متراکم (Dense Vector) برای درک کوئری شما و تطبیق بهتر استفاده میکنن.

⚠️ با این حالت سرچ زیاد کاری نداریم و زیاد درموردش صحبت نمیکنیم ولی اگه علاقه‌مند هستید که بتونید چطوری کار میکنن میتونید از این لینک گیت‌هاب یا این مقاله درمورد ColBERT بخونید.

مزایا و معایبش چیه؟
- این تکنیک هم مثل Fuzzy Search که نسخه تکامل یافته Lexical Search بود - نسخه‌ی تکامل یافته‌ی Semantic Search به حساب میاد در نتیجه مزایا و معایب تکنیک سرچ معنایی رو داره بعلاوه‌ی اینکه:

مزایا
۱. درک متن - معنا - مفهوم و ضمینه در بهترین حالت ممکن
۲. رتبه‌بندی صحیح ارتباطات معنایی
۳. مقیاس پذیری به شدت بالا به لطف هماهنگی با FAISS و Milvus و ...

معایب
۱. هزینه محاسباتی بالا توی پروسه آموزش و استنتاج
- لغت‌نامه دهخدا:
استنتاج. [ اِ ت ِ ] ( ع مص ) طلب انتاج و استخراج نتیجه از مقدمات. || طلب فرزند کردن.

۲. اجرا و پیاده سازی پیچیده
۳. الباقی معایب سرچ معنایی رو هم شامل میشه مثل نیاز به فضای ذخیره سازی مناسب برای دیتا و ...
👍5👏2🤯2
خب تبریک میگم 🥳
شما الان میدونید سرچ چیه و چطوری کار میکنه (در همین نقطه شما یک لول از آدم‌هایی که صرفا سرچ میکنن و روحشون هم خبر نداره پشت پرده چی میشه جلو افتادید)

برای خود من که این دیتا جالب بود - نمیدونم برای شما هم جذابیت دارن این نوع اطلاعات یا نه.

بالاتر یه اشاره‌ای به یک کلمه شد - "دیتاست" - بیاید اینم تعریف کنیم؛ البته کوتاه و بدون مثال 😁
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍1💯1
Armin's Notes 🪴
دیتاست
دیتاست: مجموعه‌ای از داده‌های ساختار یافته هست.
این مجموعه داده میتونه هرچیزی باشه از یک دیتابیس برای پروژه‌تون گرفته تا یک فایل pdf یا حتی یک وبسایت مثل ویکی پدیا
🔥4👍1
Armin's Notes 🪴
⚠️ حالا اینکه معنای کلمات رو چطوری میفهمه رو جلوتر توضیح میدم و این همون چیزیه که ما امشب قراره باهاش کار کنیم و درموردش صحبت کنیم)
خب بیایم سراغ این‌که "یک ماشین چطوری معنا و مفهوم کلمات رو تشخیص میده و درک میکنه؟"

به پروسه‌ای که معنا و مفهوم کلمات رو به ماشین میفهمونه Word Embedding میگیم.

- این اصطلاح Word Embedding غیررسمی بوده و بخاطر محبوبیت روش های استفاده شده توی این راستا تو حوزه یادگیری عمیق به این اسم معروف شده.
توی زبان شناسی محاسباتی (پروسه‌ای که ‌‌Word Embedding هم زیرمجموعه‌ش میشه) و توی مقالات و مستندات رسمی از عبارت‌هایی مثل
- Distributional semantic model
هم استفاده میکنن دلیلش هم اینه که نظریه‌ای که پایه و اساس این ماجرا هاست (Underlying Semantic Theory) به Distributional semantic معروفه.

https://en.wikipedia.org/wiki/Word_embedding
👏5👍1
Armin's Notes 🪴
خب بیایم سراغ این‌که "یک ماشین چطوری معنا و مفهوم کلمات رو تشخیص میده و درک میکنه؟" به پروسه‌ای که معنا و مفهوم کلمات رو به ماشین میفهمونه Word Embedding میگیم. - این اصطلاح Word Embedding غیررسمی بوده و بخاطر محبوبیت روش های استفاده شده توی این راستا تو…
من زیاد این مفهوم و کانتکس رو براتون فنی باز نمیکنم و سعی میکنم خیلی خلاصه و عامیانه بگم بهتون به ۲ دلیل

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

⚠️ باز هم تاکید میکنم که من خودم تازه این مسیر رو شروع کردم و به هیچ یک از پیام‌ها و صحبتای من بدون سرچ اتکا نکنید - شاید یک بخش یا کلمه رو سهوا اشتباه منتقل کرده باشم هرچند که قبل از نوشتن هرکدوم از این پیام ها کلی سرچ میزنم که همچین موردی پیش نیاد 🙏♥️
🔥6🙏2👍1
تصور کنید که کلمات مثل نقطه‌هایی در فضا هستند. در روش‌های قدیمی، ما فقط وجود یا عدم وجود یک کلمه را در نظر می‌گرفتیم، مثلاً اگر کلمه "کتاب" در جمله بود، یک مقدار ۱ و اگر نبود، مقدار ۰ به آن می‌دادیم. اما این روش هیچ مفهومی از شباهت بین کلمات به ما نمی‌داد. مثلاً "کتاب" و "دفتر" هر دو وسیله نوشتاری هستند، اما مدل‌های قدیمی این ارتباط را درک نمی‌کردند.

🔹 حالا Word Embedding چکار می‌کند؟
درواقع Word Embedding کلمات را به اعداد چندبعدی (بردارها) تبدیل می‌کند. این اعداد طوری آموزش داده می‌شوند که کلماتی که معنای مشابه دارند، به هم نزدیک‌تر باشند. مثلاً "پادشاه" و "ملکه" یا "کتاب" و "دفتر" در فضای برداری به هم نزدیک‌تر هستند.

🔹 مثال ساده:
فرض کنید سه کلمه داریم: "پادشاه"، "ملکه" و "کتاب". در فضای Word Embedding، فاصله بین "پادشاه" و "ملکه" کمتر از فاصله بین "پادشاه" و "کتاب" است، چون معنای آن‌ها به هم نزدیک‌تر است.

🔹 مزایای Word Embedding:
۱. درک بهتر معنای کلمات توسط ماشین
۲. شناسایی روابط بین کلمات
۳. بهبود نتایج در جستجو و ترجمه ماشینی
🔥72👍1
ℹ️ ساده تر بخوایم تعریفش کنیم به این صورت میشه که:

ما با استفاده از Word Embedding میتونیم تمام کلمات و لغت‌های استفاده شده توی یک زبان رو توسط یک مجموعه‌ای از اعداد اعشاری در قالب بردار (Vector) بیان کنیم.

پس میشه گفت که Word Embedding ها - بردار (Vector) های n بعدی هستن که تلاش میکنن معنای لغت‌ها و محتواشون رو با مقادیر عددی‌شون بیان کنن.

هر مجموعه‌ای از اعداد که ما توی این سناریو در دسترس داریم یک "Word Vector" یا بردار کلمه به حساب میاد.

⚠️ نکته‌ای که وجود داره اینه که این بردار کلمات ممکنه همیشه برای سودمند نباشن.

چه بردار کلماتی برای ما سودمند هست؟
- بردارهای کلماتی برای ما سودمند هستند که معنا و مفهوم و ارتباط کلمات رو دقیقا همونطوری که به صورت طبیعی استفاده میشن بیان کنن.

منظور از طبیعی چیه؟
- روالی که توسط انسان اتفاق میفته و ارگانیک هست رو طبیعی میگیم.

مثلا ما میدونیم گربه و پیشی - سگ و هاپو باهم مرتبط هستند.

ماشین اگه توی بردار کلماتی این شباهت و ارتباط رو نتونه تشخیص بده برای ما سودمند نخواهد بود.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🔥1
بیاید یک مرحله برگردیم عقب تر - حالا که ما میدونیم اگر متن هامون رو تبدیل به بردارها و مجموعه‌ای از اعداد کنیم و به ماشین بدیم میتونه معنی‌شون رو بفهمه؛ چطوری میتونیم این پروسه رو انجام بدیم؟


در ساده ترین حالت ممکن به روش‌هایی که داده‌های متنی Encoding Techniques میگن.

تکنیک هایی مثل
One Hot Encoding
Label Encoding
TF-IDF
توی این دسته قرار میگیرن که جلوتر درموردشون صحبت میکنیم.

اماااا - ‌‌‌Word Embedding درواقع نوع پیشرفته تری از همین Encoding Technique ها هستش که نه تنها وجود کلمه - بلکه معنا و ارتباطاتش رو هم با کلمات دیگه و موضوع کوئری شما در نظر میگیره.

توی Word Embedding روش هایی مثل موارد زیر رو داریم:
Word2Vec
GloVe
FastText
که درمورد اینا هم جلوتر صحبت میکنیم.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
بردار های کلمه چطوری کار میکنن؟

فرض کنید که ما یک لغت‌نامه داریم که داخلش ۵ تا کلمه داریم

۱. پادشاه
۲. ملکه
۳. مرد
۴. زن
۵. بچه

بر اساس این لغت نامه - اگه از روش one-hot بریم و متنمون رو encode کنیم - خروجی چیزی به این صورت میشه
👍1
👍1
Armin's Notes 🪴
Photo
میتونید حدس بزنید چه کلمه ای رو encode کردیم؟


کلمه‌ی "ملکه" رو!

پس میبینید که one-hot برای ما یک بردار ساده ایجاد کرده و توی این بردار به تعداد لغاتی که توی لغت‌نامه‌مون داشتیم ایندکس ایجاد کرده و توی هر ایندکس متناظر با اون کلمه به ما میگه که متنی که داریم میدیم وجود داره یا خیر
👍1🔥1
توی این حالت درواقع ما نمیتونیم هیچ مقایسه معناداری بین دوتا بردار داشته باشیم - فقط و فقط میتونیم مساوی بودن یا نبودن بردار هارو بررسی کنیم.

چرا؟ چون بردار دو کلمه ملکه و پادشاه به این صورت میشه

ملکه:
0 1 0 0 0

پادشاه:
1 0 0 0 0
👍1👏1
Armin's Notes 🪴
توی این حالت درواقع ما نمیتونیم هیچ مقایسه معناداری بین دوتا بردار داشته باشیم - فقط و فقط میتونیم مساوی بودن یا نبودن بردار هارو بررسی کنیم. چرا؟ چون بردار دو کلمه ملکه و پادشاه به این صورت میشه ملکه: 0 1 0 0 0 پادشاه: 1 0 0 0 0
طبیعتا ما نمیتونیم روی این دو بردار جز مساوی بودن هیچ مقایسه‌ی دیگه‌ای انجام بدیم.

پس... اینجاست که Word Embedding میاد و با استفاده از تکنیک هایی مثل Word2Vec مارو از این حالت نجات میده و وارد یه مرحله جدیدتر میکنه.

توی این حالت - ما بردارهای چندبعدی و انتزاعی خواهیم داشت که به ما کمک میکنن که بتونیم مقایسه‌هارو دقیق‌تر و بهتر انجام بدیم.
👏5👍1
فرض کنید که ما لیستی از صفت‌ها داشته باشیم

مثلا حکمرانی - مردانگی - زنانگی - سن و ...

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

خروجی چیزی شبیه به این عکس میشه:
👍1🔥1
👍2