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
ℹ️ ساده تر بخوایم تعریفش کنیم به این صورت میشه که:

ما با استفاده از 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
پادشاه خصوصیت های حکمرانی و مردانگی خیلی زیادی داره اما زنانگی رو خیلی کم داره (به اون اعداد وزن میگیم)

همینطور برای ملکه - زن - شاهزاده و ...

این دقیقا همون Vector ما میشه که میتونه معنا و مفهوم کلمه رو توی خودش نگه‌داره و اون رو بیان کنه.
👍6
حالا چرا روش one-hot جوابگو نیست؟

این عکس رو ببینید:
Armin's Notes 🪴
Photo
ما فقط ۹ کلمه توی لغت‌نامه‌مون داریم اما تعداد سطر و ستون هارو ببینید!

اگه ما یک لغت‌نامه با ۵۰ هزار کلمه داشته باشیم باید برای هر کلمه ۴۹ هزار و ۹۹۹ ایندکس با مقدار ۰ و یک ایندکس با مقدار ۱ ذخیره کنیم.

خیلی زیاده نه؟ :))

مشکل بعدی چیه؟ اینکه ماتریس نهایی خیلی تنک میشه چون از حجم خیلی زیادی ۰ تشکیل شده و عملا دیتای به خصوصی به ما نمیده
- لغت‌نامه دهخدا: تنک. [ ت َ ن ُ / ت ُ ن ُ ] ( ص ) کم و اندک.


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

مثلا همون عکس بالارو ببینید - هرکلمه توی یک بردار 9x1 هست.
👍1
خب پس راه حل چیه؟

این‌که ما تکنیک Encodingمون رو تغییر بدیم.

اگه بخوایم تعداد ستون هارو کاهش بدیم و یک ارتباطی بینشون برقرار کنیم چیکار باید کنیم؟
👍1
Armin's Notes 🪴
Photo
این روش همون کاریه که ما باید انجام بدیم.

حالا اگه لغت نامه ۹ کلمه‌ایمون رو بخوایم بهینه کنیم خروجی چطوری میشه؟
👍1
👍3
حالا اگه بخواید برای هرکلمه وزن دهی انجام بدید و بجای اون اعداد صفر مقادیری رو ست کنید که بین ۰ تا ۱ باشن - برای هر ویژگی چه عددی ثبت میکردید؟


⚠️ عکس پایین شامل مقادیر پیشنهادی (تقریبی و برای آموزش هستن) - میتونید بعد از فکر کردن روی جدول بالا عکس پایین رو ببینید
👍1
🔥3👍1
میبینید که ما یک فضای ۳ بعدی تونستیم چند هزار برابر بهینه سازی نسبت به روش One Hot Encoding داشته باشیم - این همون کاریه که Word Embedding های مدرن برای ما انجام میدن.

مزایاشون چیه؟ فکر کنم میدونید و دیگه نیاز به گفتن هم نداره.


ما حتی با نگاه کردن به این بردار هم میتونیم ارتباط بین کلمات و صفت‌ها و ... رو تشخیص بدیم. 😁

مورد بعدی اینه که کلمات مشابه - بردار‌های مشابه‌تری دارن - مثلا embedding نهایی برای کلمه "خواب" و "بیداری" فاصله کمتری نسبت به "خواب" و "پادشاه" دارن.

منظور از فاصله - فاصله اقلیدسی هست.

این دوتا رفرنس رو یه نگاهی بندازید.

https://en.wikipedia.org/wiki/Cosine_similarity

https://www.sciencedirect.com/topics/computer-science/cosine-similarity

- جلوتر بیشتر درمودشون میگیم.
👍3
مورد بعدی اینکه اگه دقت کنید ماتریس نهایی خیلی متراکم تر شده و داره دیتای بهتری رو به ما میده - ضمن اینکه روابط بین کلمات هم به وضوح مشخصه

مثلا شما اگه از پادشاه به سمت ملکه حرکت کنید - روند حرکتتون دقیقا مشابه حرکتی خواهد بود که از پسر به دختر انجام میدید.
👍2
نکته‌ای که وجود داره اینه که توی دیتای واقعی - بردارهای ما و ابعادشون خیلی زیاد میشه و ما نمیتونیم مثل عکس های بالا انتساب هارو دستی انجام بدیم و خروجیشون رو به راحتی نمایش بدیم - درنتیجه الگوریتم هایی مثل GloVe که بالاتر هم بهش اشاره کردیم ایجاد شده تا این زحمت رو از دوش ما برداره.
👍3