سلام همگی، من به تازگی یک سری سه قسمتی آموزش NLP در یوتیوب تهیه کردم و فکرکردم شاید خوب باشه این آموزش رو به زبان مادری خودم و برای هرکسی که حالا ترجیه میده فارسی بخونه تا انگلیسی هم بذارم.(برای دیدن ویدئو بی زحمت فیلترشکن یادتون نره :))
نوت: این ویدئو یکی از اون سه پارت هست اما تقریبا مهم ترین بخش و کلا درمورد Word embeddings هست. پس اگر نخواستید قسمت های دیگرم ببینید زیاد ضرر نمی کنین ولی برای پیاده سازی مدل می تونید به قسمت بعدی این سری مراجعه کنید.
مقدمه: ما در این ویدئو قصد داریم درمورد word embedding ها صحبت کنیم. می بینیم که اونها چی هستند و چطور می توانند به ما در حفظ معنی کلمات کمک کنند.به طور به خصوص می خواهیم درمورد برت و اینکه این مدل چطور به ما درتقسیم بندی متون کمک می کند صحبت کنیم. ابتدا تصور می کنیم دو جمله داریم.
یکی
"Terrorists will crash the tower "
و دیگری
"Mary has a crush one Charlie"
خب اولین قدم در پردازش متن، tokenization یا همان تفکیک جملات است. منظور ما از تفکیک جملات، جدا کردن کلمات یک جمله از هم و تبدیل هر یک از این جملات به یک سری کلمه جداست.
اکنون قدم بعدی تبدیل و تغییر این کلمات به شکلیست که برای کامپیوتر قابل فهم باشد. برای این فرآیند ما گزینه های زیادی روبه روی خود داریم.
برای مثال می توانیم به one-hot-encoding اشاره کنیم. در این روش، ما هر کلمه را با یک بردار با طول تعداد لغاتمان نشان می دهیم.در این بردار ها تمام عناصر صفر هستند، به غیر از آن عنصری که ما به آن کلمه اختصاص دادیم.
به طور مثال اگر Marry کلمه ی 150 ام در دیکشنری ما باشد، 150 امین کلمه در بردار این کلمه 1 و تمام عناصر دیگر صفر خواهد بود.
خب در این روش تمام کاری که ما انجام دادیم، دادن مقدار 1 به کلماتی که در یک جمله وجود دارد و 0 به کلماتی که در جمله موجود نبودند بوده.
اما آیا ما می توانیم هیچ شباهتی بین بردار کلماتی که تشابه معنایی دارند پیدا کنیم؟
به طور مثال، آیا فکر می کنید شبکه عصبی ما می تواند تفاوت بین Charlie (اسم انسان) وTower(اسم شیئ) را شناسایی کند؟ آیا می تواند بفهمد که هم Mary و هم Charlie انسان اند و در نتیجه در اینجا Mary نمی تواند رویTower کراش داشته باشد!
اما به خاطر شیوه نمایش لغاتی که ما انتخاب کردیم، رابطه بین Mary و Charlie، هیچ تفاوتی با رابطه بین Mary و Tower ندارد.
اگر بخواهیم یک مقدار دقیق تر صحبت کنیم، باید بگوییم که ضرب داخلی هر دو بردار و در نتیجه شباهت کسینوسی آن ها همیشه 0 خواهد بود که یعنی هیچ شباهتی بین هیچ دو بردارو همچنین کلمه نیست.
حالا شیوه نمایش word embeddings را با one-hot-encoding مقایسه کنید:
خب، ما باید چه کنیم؟
خوشبختانه این مشکل توسط Word Embeddings برای ما حل شده است.قبل از اینکه وارد توضیحات این مبحث شویم، لازم است بدانیم که تمام Word Embedding ها به طور کلی یک کار مشخص را نشان می دهند. اما بعضی از آنها مانند BERT (برت) ویژگی افزون بر حالت معمولی دارند که آنها را برای طیف گسترده تری از پردازش زبان طبیعی مناسب می کنند.
پس در اینجا ما فرآیند و توضیحات همه آنها را پوشش می دهیم، اما به طور به خصوص درمورد برت صحبت خواهیم کرد. فرض می کنیم که می خواهیم از برت به عنوان مدلمان استفاده کنیم و هر جمله را به آن می دهیم تا ببینیم چطور هر جمله را پردازش می کند. (همه مراحل در عکس پایین قابل مشاهده هستند.)
اولین قدم در اینجا اضافه کردن دو تکه دیگر به ابتدا و انتهای جملات است این تکه ها CLS و SEP هستند. و اساسا وظیفه جدا کردن جملات برای شناسایی آن ها از هم را برعهده دارند. اما آن ها وظایف مفید دیگری نیز دارند که در ادامه به آن ها می پردازیم.
قدم دوم رمزگذاری متن می کنیم. برای این کار ما باید یک عدد به هر کلمه موجود در مجموعه لغاتمان اختصاص دهیم. به طور مثال ما بهCLS عدد 101، به Terrorists عدد 1، به will عدد 2 و غیره را اختصاص می دهیم.
قدم سوم لایه گذاری یا padding است. خب حالا با اینکه همه چیز عالی بنظر میاید، ما باید یک قدم دیگر قبل از ورود به word embeddings برداریم. در این مرحله به خاطر اینکه شبکه های عصبی ورودی های به یک اندازه و بعد می گیرند، ما یک طول مشخص برای تمام جمله ها تعریف می کنیم، و بعد به انتهای جملاتی که کوتاه تر از آن طول هستند، 0 اضافه کنیم.
به طور مثال اینجا دومین جمله به طول 8 است و برای اینکه تمام تکه ها را پوشش دهیم، ما عدد 8 را به عنوان بیشترین طول جملات انتخاب می کنیم و یک 0 به انتهای اولین جمله می افزاییم.چون در اینجا ما داریم اطراف اعداد فضای خالی ایجاد می کنیم، این فرآیند Padding یا لایه گذاری نام دارد.
و حالا Word Embeddings!
در این مرحله، کاری که می کنیم این است که هر جمله را برمی داریم، مثلا اینجا دومین جمله را برمی داریم، و یک بردار به هر کلمه موجود در آن اختصاص می دهیم. پس در اینجا کلمه Mary ممکن است مقادیر0.1، 0.8، 0.2 و غیره را بگیرد. تمام این بردار ها هم اندازه اند و یک چیز جالب درمورد آنها این است که شما می توانید هرستون یا هر مقداردر این بردار ها را به عنوان یک جنبه معنایی این کلمه ببینید.
در اینجا هر ستون نمایشگر یک جنبه معنایی لغات است.
اگر ستونی، زنانگی کلمه را نشان دهد، Mary عدد بزرگ و Charlie عدد کوچکی در آن خواهد گرفت. اما اگر مرردانگی را نشان دهد، این بار Charlie یک عدد بزرگ و Mary عدد پایینی در آن خواهد داشت. و چون احتمالا سنین نزدیک به همی دارند، پس مقادیر اختصاص یافته به سن آن ها نیز نزدیک هم خواهد بود.
باید به این اشاره کنیم که اگر ما همه این مقادیر از پیش آموزش داده شده را روی داده های خودمان هم آموزش دهیم، آنگاه Word Embedding های ما حتی فهم بهتری از متن و هر کلمه ما خواهند داشت و راحتتر می توانند تفاوت و رابطه بین آنها را متوجه شود و تعیین کند کدام یک می توانند بر روی هم کراش داشته باشند.
اکنون توجه کنید که گفتیم Word Embedding های زیاد و متفاوتی وجود دارند اما دلیل اصلی اینکه به شخصه برت را به بقیه ترجیه می دهم، این است که مانند دیگر embedding ها مانند Glove یا Word2vec سختگیر و بدون ملاحظه نیست!
علت این روشن فکری برت را در پست بعدی خدمتتان عرض می کنم.