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
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
حالا فرض کنید ما یک لغت‌نامه بزرگتر داریم و یک سیستم هوشمند خصوصیات و وزن‌دهی هارو برای ما انجام داده.

ما الان میتونیم یک خروجی انتزاعی از روابط کلمات بر اساس فاصله اقلیدسی کلمات لغت‌نامه‌مون و شباهتشون بر اساس شباهت کسینوسی ببینیم.

— رفرنس هاشون رو بالاتر هم ارسال کردم

خروجی چیزی شبیه این خواهد شد:
👍1
اگه دقت کنید - کلمات مشابه توی مکان‌های مشابه قرار گرفتن - یعنی توی فضای N - D بعدی همگرا شدن و Vector های مشابهی دارن که درجهت مشابهی داره حرکت میکنه.
👍1
Armin's Notes 🪴
Photo
اینجا تقریبا همون نقطه‌ای هست که ما نیاز داریم داخلش باشیم.

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

فضایی که این کلمات داخلشون قرار گرفتن هم یک Vector Database هست.
پس روال به چه صورت شد؟

۱. کلمه خام رو داریم
۲. با استفاده از روش‌های انکدینگ کلمه رو Encode میکنیم
۳. میرسیم به یک مجموعه از اعداد که بهش میگیم Word Vector
۴. این ‌Word Vector یا بردار کلمه‌ای که در نهایت دریافت کردیم رو ذخیره میکنیم.


به کل این پروسه (بجز ذخیره سازی) میگیم Word Embedding و به محلی که ذخیره سازی توش انجام میشه میگیم Vector Database
👍3