NLP stuff
4.06K subscribers
147 photos
1 video
2 files
277 links
مطالب خوب و به‌دردبخور در حوزه‌ی هوش مصنوعی و پردازش زبان طبیعی!

شکرشکن شوند همه طوطیان هند
زین قند پارسی که به بنگاله می‌رود

اگر انتقاد، پیشنهاد و یا مطلب مفیدی (لینک، پست و ...) داشتید:
@AliAkbarBadri
@mmsamiei
@MmahdiAghajani
Download Telegram
خاطره‌های قدیمی رو زنده‌ کنید؛ این بار با مدل GFP-GAN

موضوع بازسازی تصاویر قدیمی همیشه یکی از آرزوهای پاک بشریت بوده! خیلی وقت‌ها دوست داریم عکس‌های چهره قدیمی از اجدادمون رو بتونیم واضح‌تر ببینیم که ببینیم چه شکلی بودند. این تسک به نوعی حذف نویز و بهبود و بازسازی تصاویر است. با این پست ویرگول از انتشارات اورفیت همراه باشید تا این مقاله رو بهتر درک کنید و از لینک دموی مدل و مقاله آگاه بشید.

آدرس پست:
https://virgool.io/overfit/gfp-gan-gxudgqbqptsd

پ.ن: با معرفی کانال به دیگران، بقیه رو هم در لذتی که می‌برید شریک کنید!

#paper
#read
#blog
#overfit

@nlp_stuff
بلاگی برای یادگیری GNN

شاید شما هم جزء اون دسته افرادی باشید که با افتادن گذر به مباحث مربوط به Graph Neural Network کمیتتون لنگ می‌زنه و به خاطر عدم مطالعه درست و حسابی پایه‌ای نتونستید با این جور مباحث ارتباط برقرار کنید. امروز دو تا لینک بلاگ درست حسابی براتون آوردیم که با خوندن اونها می‌تونید به مقدمات گراف در دیپ لرنینگ وارد بشید و از این به بعد خوندن مقالات این حوزه رو هم جزو گزینه‌هاتون قرار بدید. از خوبی‌ها این بلاگ اینه که از ب بسم الله به طرز روان و همه‌کس‌فهم و با تصویرسازی‌های موثر و فراهم کردن زمین‌بازی‌های تعاملی (playground) سعی کرده این مطالب رو توضیح بده. لینک اول راجع به داده‌های با ذات گراف و مسائلشون و ایده و ساختار GNN صحبت میکنه. لینک دوم هم در رابطه با چند گونه مختلف از GNN‌ها (نظیر GCN و GAT و ...) و پیاده‌سازی ایده کانولوشن روی گراف توضیح میده.

لینک اول:
https://distill.pub/2021/gnn-intro/

لینک دوم:
https://distill.pub/2021/understanding-gnns/

پ.ن: قبلا در زمینه گراف یک کورس خوب هم در این پست [https://t.iss.one/nlp_stuff/163] معرفی کرده بودیم.

#coach
#read
#blog

@nlp_stuff
مدل‌سازی سه‌بعدی با استفاده از NeRF

ما انسان ها و به طور کلی حیوانات در ساختن نمای سه‌بعدی از اشیایی و تصاویر دوبعدیشون ماهر هستیم؛ ولی این ماجرا برای هوش مصنوعی فرق می‌کنه. فرض کنید یک تعداد عکس از یک شی (مثلا صندلی) با زاویه‌های مختلف می‌گیرم و می‌خواهیم مدل سه‌بعدی اون شی رو داشته باشیم که تصویر با هر زاویه دلخواه از اون رو بتونیم رندر بگیریم به این کار میگیم View Synthesis. برای این کار یک سری روش اولیه و ساده این بوده که از تصویر‌های دو بعدی سعی می‌کردند حجم (volume) سه‌بعدی شی رو بسازند که البته ذخیره‌سازی این volume حافظه‌ای نزدیک به چند گیگ می‌خواسته و خب قاعدتا کار به صرفه‌ای نبوده. یک دسته دیگر از روش‌ها اما سعی کرده‌اند شی سه بعدی رو به شکل یک رویه مدل کنند و پارامتر‌های معادله اون رویه رو به دست بیارند (در مقایسه با دسته قبلی، این روش‌های مثلا فقط نیاز به ۱۰ مگابایت حافظه داشته‌اند)

اما یک مقاله‌ای پارسال منتشر شد به اسم Neural Radiance Fields یا به اختصار NeRF، کاری که تو این مقاله می‌کنند اینه که یک شبکه عصبی آموزش میدن که با گرفتن تصویر در ورودی خودش، در خروجی خودش سه کانال رنگی و میزان آلفا یا opacity رو با گرفتن مختصات x,y,z و زاویه نگاه مورد نظر (تتا و فای) تولید می‌کنه. به صورت واضح‌تر یعنی شما به شبکه مثلا یک تصویر صندلی می‌دید و بهش x,y,z خودتون و زاویه دیدتون رو هم می‌دید و شبکه براتون اون نما از صندلی نسبت به اون موقعیت و زاویه رو درست میکنه؛ یعنی:
(x,y,z,theta,phi) => MLP => (R,G,B, alpha)

حالا این کار چه طوری انجام می‌پذیره؟ برای تولید تصویر دوبعدی در زاویه مورد نظر یه ray (پرتو، خط فرضی) از مرکز نگاه ما (دوربین) به هر نقطه در تصویر دوبعدی که می‌خواهیم بسازیم رد می‌کنند و ادامه می‌دهند. (این پرتو صرفا یه معادله خط در فضاست، یک خط بین دونقطه: دوربین و هر پیکسل تصویر دو بعدی) در نقاطی در طول پرتو سمپل برمی‌دارند و میانگین می‌گیرند (تقریب یک انتگرال) یعنی همونطوری که توی شکل مشخص شده مقادیر RGB و آلفا رو برای نقاط روی خط در نظر گرفته شده (که بش می‌گیم پرتو) حساب می‌کنند و میانگین این مقادیر میشه RGB و آلفا پیکسلی از تصویر دو بعدی که پرتو اون رو قطع می‌کنه. این کار رو برای چندین تصویر دوبعدی که از شی داریم انجام میدن. با این کار اون شی شکل سه‌بعدیش در وزن‌های شبکه عصبی انکود میشه و میشه هر view ازش رو ساخت.

سوال بعدی اینه که این رو چطوری آموزش میدن؟ همین کار پرتو رو انجام میدن و برای تصاویری که داریم. شبکه یسری پیکسل تولید کرده که با پیکسل های واقعی MSE، به عنوان loss می‌گیرند. تقریبا نیم‌روز طول می‌کشه برای یک جسم یاد بگیره ولی توی 30 ثانیه view تولید می‌کنه. وزن‌های شبکه عصبی هم حدود 5 مگابایت اینا میشه. دقت خیلی خوب وضوح تصویر عالی داره.

این همه حسن گفتیم اما مشکلش و جای کار بیشتر کجاست؟ باید سمپل‌های زیادی در هر پرتو برداشت که حداقل موقع inference خیلی اذیت می‌کنه، تازه هر پرتو میشه یک پیکسل، رزولوشن بالا باشه دیگه دردسر بیشتره.

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

مقاله:
https://arxiv.org/pdf/2003.08934

لینک مقاله‌ها و پیاده‌سازی‌هاشون برای این زمینه:
https://github.com/yenchenlin/awesome-NeRF

پ.ن. با تشکر از آقای محمدمهدی عبدالله‌پور بابت درست کردن این پست. شما هم اگر پست خوبی دارید، بفرستید.

#read
#paper

@nlp_stuff
This media is not supported in your browser
VIEW IN TELEGRAM
مدل‌های document parsing در هاگینگ‌فیس

دو مدل LayoutLMv2 و LayoutXLM از مایکروسافت برای پارس کردن تصاویر متنی به هاگینگ فیس اضافه شده و دمویی هم در لینک زیر براشون قرار داده شده که می‌تونید امتحان کنید. به این مدل‌ها مولتی‌مودال بین متن و لایوت و تصویر گفته میشه. این مدل‌ها کلمه‌های داخل عکس را یکی از تگ‌های مثل QUESTION/ANSWER/HEADER/OTHER می‌زنند و یعنی دارند کل جدول رو براتون پارس می‌کنند که باعث میشه خیلی راحتتر بتونید با مقادیر جدول کار کنید.
مدل LayoutXLM روی ۵۳ تا زبون (از جمله فارسی) پیش‌آموزش داده شده.

- دموی مدل LayoutLMv2:
https://huggingface.co/spaces/nielsr/LayoutLMv2-FUNSD


- لینک‌های مقاله و هاگینگ‌فیس مدل LayoutXLM:
https://huggingface.co/microsoft/layoutxlm-base

https://arxiv.org/abs/2104.08836


- لینک‌های مقاله و هاگینگ‌فیس مدل LayoutLMv2:
https://huggingface.co/microsoft/layoutlmv2-base-uncased

https://arxiv.org/abs/2012.14740

#tool
#link

@nlp_stuff
آشنایی با متد gather در pytorch

استفاده از حلقه‌ها نظیر for در کدهای یادگیری عمیق به شدت قبیح و سخیف است، از این نظر که فلسفه یادگیری عمیق را که مبتنی بر موازی‌سازی است تباه می‌سازد و باعث کاهش سرعت در اجرای کد می‌شود. نحوه پاکسازی کد از حلقه در بعضی مواقع با تکنیک‌های indexing یا slicing واضح و روشن است اما در بعضی مواقع دیگر نیز حذف حلقه و استفاده از توابع وکتوری، نیازمند آشنایی با توابع خاص منظوره این موارد است. یکی از موارد سناریویی است که در آن تنسوری به ما داده شده و بایستی در راستای یک محور تنسوری مقادیر خاصی را استخراج کنیم. انجام این عملیات با indexing ممکن نبوده و راه حل فرار از حلقه for در این سناریو در چارچوب پایتورچ، استفاده از متد gather است.
در صورتی که علاقه‌مند به آشنایی با gather و آموختن این تکنیک هستید، می‌توانید از پست جدید ما در ویرگول که در این باره است استفاده کامل را ببرید.

لینک ویرگول:
https://virgool.io/overfit/gather-in-pytorch-lhce2bm1wkb3

#read
#blog
#overfit

@nlp_stuff
نوتبوک داینامیک پدینگ

یکی از تفاوت‌های اساسی داده‌های متنی با داده‌های تصویری، سایز مختلف نمونه‌های متنی (طول متن) نسبت به یکدیگره. برای حل این معضل راهکار padding استفاده میشه که در آن، طول تمامی نمونه‌های یک بچ یکسانسازی میشه. ساده‌ترین استراتژی در این راستا میتونه این باشه که همه متن‌ها رو به اندازه طول بزرگترین متن پد کنیم، اما خب واضحه که با این کار وقت و منابع زیادی رو برای بچ هایی که طول طولانی‌ترین متنشون به اندازه طولانی‌ترین متن کل داده‌ها نیست، هدر میدهیم. استراتژی موثرتر میتونه استفاده از داینامیک پدینگ باشه که تو این روش داده‌ها رو فقط به اندازه طولانی‌ترین متن حاضر در هر بچ پد کنیم. باز هم اینجا ممکنه یک متن طولانی با یک متن کوتاه با هم در یک بچ حاضر بشوند و منابع زیادی برای پد کردن این بچ به هدر بره. راهکارهای دیگه مثل سورت کردن یا شبه سورت کردن داده‌ها برای حل این مشکل وجود دارند. آقای ایوبی اومدند و در راستای این دسته روش‌های مطرح شده نوتبوکی رو آماده کرده‌اند و در اختیار بقیه قرار دادند. این نوتبوک‌ شامل کدهای مربوط به انجام هر یک از این روش‌هاست و البته توضیحشون و مزایا و معایبشون هم قرار داده شده. میتونید مشاهده کنید و در صورت نیاز در کدهاتون استفاده کنید.

لینک نوتبوک:
https://sajjjadayobi.github.io/blog/tips/2021/08/09/sortish-bathes.html

پ.ن. با تشکر از آقای ایوبی بابت فرستادن این پست. شما نیز اگر مطلب یا محتوای جالبی در دست دارید، بفرستید تا با اسم خودتون در کانال قرار داده بشه.

#code

@nlp_stuff
جعبه‌ابزار یادگیری ماشین!

هر فردی که در حوزه یادگیری ماشین و مشتقاتش داره فعالیت می‌کنه حتما لازمه که برای خودش یه جعبه‌ابزار داشته باشه. برادر آمیت این جعبه ابزار رو آماده کرده و کل ابزارها رو به ۵ دسته آماده‌سازی داده، اکتشاف داده، مدل‌سازی، ولیدیشن و پروداکشن از استک‌ها و تسک‌های مختلف تقسیم کرده.
این پست رو حتما یه گوشه‌ای ذخیره کنید که هر وقت به دوشواری خوردید، یه سری بهش بزنید.

لینک جعبه‌ابزار:
https://amitness.com/toolbox

#tool

@nlp_stuff
بعضی seedها برابرترند

همانطور که احتمالا تا حالا دیده اید در خیلی از مقالات یادگیری ماشین به جای گزارش یک عدد به عنوان امتیاز معدل، چندین بار آزمایش روی مدل صورت می‌گیره و امتیاز مدل در این آزمایش‌ها به صورت یک بازه گزارش می‌شود. حالا آقای پیکارد اومدند و سعی کردند بررسی کنند که تاثیر seed های مختلف بر روی عملکرد مدل به چه صورته. ایشون سعی کردند پاسخ به سه سوال رو پیدا کنند:
۱- توزیع امتیاز مدل‌ها با توجه به seed انتخابی به چه صورته؟
۲- آیا پدیده قوی سیاه رو بین مدل‌ها با seedهای مختلف میشه مشاهده کرد؟ یعنی seed ای هست که منجر به مدلی با امتیاز خیلی بالا یا پایین بشه؟
۳- آیا پیش آموزش روی دیتاست‌های بزرگتر باعث تخفیف تنوع پذیری امتیاز مدل با توجه به seedها میشه؟
پیکارد بر همین اساس اومده و تسک‌های دسته‌بندی تصویر بر روی cifar10 و imagenet رو برای انواع seedها انجام داده و بر اساس نتایج پاسخ‌هایی رو برای سه سوال بالا ارائه داده. نکته جالب در نتایج اینه که واقعا انتخاب seed میتونه بر امتیاز مدل تاثیرگذار باشه و حتی اگر میزان ایپاک‌های آموزش رو بیشتر کنیم هم فاصله طبقاتی میان خوش‌شانس‌ترین و بدشانس‌ترین مدل‌های برآمده از seed های مختلف کاهش پیدا نمیکنه. نکته اخلاقی این پست اینه که اگر مدلی رو توسعه دادید و خواستید میزان عملکردش رو گزارش بدید حواستون باشه که randomness اولیه رو هم در نظر بگیرید و به جای گزارش یک عدد، باید یک بازه رو ارائه داد (البته که اگر مدل یا دادگان به اندازه ای بزرگ باشند که نشه چندبار فرآیند آموزش دادن رو انجام داد این سناریو با دشواری مواجه میشه و باید فکری دیگه‌ای به حالش کرد که میتونه موضوع پژوهش‌های دیگه‌ای باشه)

لینک مقاله:
https://arxiv.org/abs/2109.08203

پ.ن: با نشر مطالب دوستان خود را نیز از لذت فراگیری بهره‌مند سازید.

#paper
#read

@nlp_stuff
ورکشاپ یادگیری گراف استنفورد

ورکشاپ گراف دانشگاه استنفورد (آزمایشگاه آقای لسکوک‌اینا) دو هفته پیش برگزار شد و افراد خوف و خفن زیادی در این زمینه‌ها اومدند و راجع به مسائل مختلف گرافی در صنعت و آکادمیک صحبت کردند.
اسلایدها و ویدیوهاشون هم طبق معمول با سخاوت به اشتراک گذاشتند.
بحث‌های ترکیبی خیلی جذابی مثل کاربردهای گراف در پردازش زبان طبیعی، ویژن و تشخیص fraud و نفوذ شبکه و … ارائه شده.
کتابخونه‌هایی مثل PyG و GraphGym هم توش معرفی شدند.
خلاصه یه روزتون رو کامل میسازه و کلی چیز یاد می‌گیرید.

پ.ن. اگر کلا نمی‌دونید داستان یادگیری گراف چیه، این پست [https://t.iss.one/nlp_stuff/163] و این پست [https://t.iss.one/nlp_stuff/223] رو ببینید.

لینک صفحه‌ی ورکشاپ:
https://snap.stanford.edu/graphlearning-workshop/

لینک یوتیوب ورکشاپ:
https://youtu.be/NKZdqCi5fVE

#link
#conf

@nlp_stuff
راه جنرالیزیشن از اورفیت می‌گذرد

معمولا رسم بر این بوده که هر وقت مدل به حالت overfit میرسه آموزش‌دادنش متوقف بشه و دیگه امیدی به اصلاح مدل نمیره. اما مقاله‌ای اومده و نشون داده که در صورت ادامه به آموزش مدل، خیلی خیلی گام بعدتر از اورفیت هم همچنان میتونه اتفاق جالبی که به عنوان grokking نامگذاری شده، بیافته. توضیح این مقاله رو میشه در دو بخش تسک تعریف شده و پدیده‌ی رخداده در فرآیند آموزش پی گرفت.
در قسمت تعریف تسک، این مقاله یک تسک تقریبا نمادی (symbolic) رو درست کرده‌اند. به این صورت که تابعی دلخواه از دو سیمبل ورودی که هر کدوم میتونن مقادیر نمادی a و b و .. را بپذیرند را در نظر گرفته اند. مقدار این تابع برای تمامی مقادیر ممکن ورودی محاسبه میشه (جدول پیوست شده رو میتونید نگاه کنید) و تعدادی از خانه‌های این جدول خالی می‌شوند و باقی به عنوان داده آموزشی به مدل داده می‌شود. حال مدل بایستی با آموزش روی داده‌های داده شده، جاهای خالی جدول را پر کند.
اما نکته اصلی مقاله، در فرآیند آموزش آن قرار دارد. پس از تعدادی گام آموزش، مدل بر روی دادگان آموزشی اورفیت میکند در حالی که دقت آن بر روی داده‌های validation تقریبا صفر است. اما با ادامه دادن آموزش حتی پس از اورفیت، پس از تعداد خیلی خیلی زیادی گام آموزشی، در نهایت مدل به یکباره و سرعت از اورفیت خارج میشود و دقت آن بر روی داده‌های validation به ۹۹ درصد می‌رسد که این پدیده grokking نامگذاری شده است.
نکته جالب این ماجرا در این جاست که داشتن داده کم ولی ادامه دادن آموزش پس از اورفیت می‌تواند منجر به مدلی بهتر از مدلی با تعداد داده بیشتر شود. البته که مقیاس تعداد گام‌های لازم بسیار زیاد است و مساله از نظر عملی قابل اشکال است.

در صورت علاقه‌مندی بیشتر می‌تواند یوتیوب توضیحات کیلچر درباره این مقاله را ببینید:
https://youtu.be/dND-7llwrpw
لینک مقاله:
https://mathai-iclr.github.io/papers/papers/MATHAI_29_paper.pdf

#read
#paper
#watch

@nlp_stuff
Transfer_learning_in_nlp_by_Huggingface_Mahdi_Samiei_WSS_2020.mp4
296.8 MB
ویدئوی ورکشاپ انتقال یادگیری با هاگینگ‌فیس

این فایل ویدئوی ورکشاپ مهدی‌مون در کنفرانس WSS2020 با موضوع «یادگیری انتقالی در پردازش زبان طبیعی با استفاده از کتابخانه‌ی هاگینگ فیس» است. ابتدا مباحث تئوری رو توضیح میده و بعد هم با استفاده از کتابخونه‌های پایتورچ و هاگینگ‌فیس کد میزنه.
متاسفانه علی رغم قول‌هایی که داده بودند، با ۷ ماه فاصله ویدیو رو منتشر کردند و این باکیفیت‌ترین ویدیوئیه که به دستمون رسیده.

پ.ن. این پست رو دست به دست کنید که افراد بیشتری ببینند. انشاءالله به زودی از این ورکشاپ‌ها خودمون بیشتر و بهتر برگزار می‌کنیم.

لینک آپارات ویدئو:
https://aparat.com/v/4Jivq

لینک اسلایدها و نوتبوک‌ها (استار فراموش نشه):
https://github.com/mmsamiei/huggingface-workshop

#coach
#watch
#overfit

@nlp_stuff
مقاله جامع data augmentation در پردازش زبان طبیعی


این مقاله‌ی survey در سی‌واندی‌صفحه، دل و روده‌ی مبحث data augmentation رو ریخته روی داریه.
اول اومده روش‌های data augmentation در پردازش زبان رو به سه دسته‌ی مدل‌های برپایه‌ی Paraphrasing و Noising و Sampling تقسیم‌بندی کرده و روش‌های ارائه‌شده در هر دسته رو خیلی زیبا و نیکو آورده و با شکل و مثال توضیح داده و از جهات مختلف اونا رو مقایسه کرده. بعد هم اومده اینا رو از منظرهای مختلف شکافته؛ مثلا گفته هر روشی چه هایپرپاارامترهای موثری داره یا هر یک از روش‌ها چه کاربردهایی داره.
و یه حرکت تمیز دیگه‌ای زده و تایم‌لاین مقالات این زمینه رو درست کرده تا بدونید به چه ترتیبی باید بخونید.
خلاصه که زبون‌بسته‌ها هر چه در توان داشتند مایه گذاشتند و یه مقاله خیلی کامل درست کردند؛ پس بخونید و لذت ببرید.

لینک مقاله:
https://arxiv.org/abs/2110.01852

پ.ن.۱. پنج تا تصاویر ضمیمه شده. ورق بزنید. اگر همه رو نمی‌بینید، اینجا قرار داده شدند.
پ.ن.۲. اگر کلا نمیدونید داستان چیه، این پست [https://t.iss.one/nlp_stuff/71] رو بخونید.

#read
#paper

@nlp_stuff
سرو مدل‌های تورچی با TorchServe

پایتورچ هم مثل تنسرفلو بالاخره کتابخونه سروینگش رو ارائه کرده. معادلش tfserve برای تنسرفلو میشه.
کاری که TorchServe انجام میده اینه که مدل شما رو به صورت یه http api تحویل میده. یعنی شما مدلتون رو آماده کنید و این براتون بالا میاره که راحت مثلا backendتون بهش درخواست بده و اینا از هم جدا باشند.
یه ویدیوی آموزشی هم دادند که مراحلش را توضیح میده. برای چند تا تسک مثل image classification کارهای سرو مدل رو خودش انجام میده و برای بقیه مدل‌ها هم کافیه چهار تابع از یه کلاس رو پیاده کنید تا مثلا برای مدل‌های هاگینگ‌فیس هم بتونید راحت سرو کنید.
برای استفاده در kubeflow و mlflow یکپارچه‌اش کردند و مثال‌های متنوعی واسه کتابخونه ترنسفورمرز هاگینگ‌فیس و MMF و .. هم درست کردند که بهره ببرید.

لینک ویدیوی توضیح و دمو (حتما لینک‌های توضیحات زیرش رو هم ببیینید):
https://www.youtube.com/watch?v=XlO7iQMV3Ik

پ.ن. پیش از این راجع به tfx در این پست [https://t.iss.one/nlp_stuff/157] صحبت کرده بودیم.
#tool
#watch

@nlp_stuff
اتحاد کانولووشن و ترنسفورمر برای بازشناسی گفتار

اگه اهل بازشناسی گفتار باشید باید حتما اسم conformer به گوش‌تون خورده باشه. این معماری که توسط گوگل و حدود یک سال پیش معرفی شد در زمان خودش پرچمدار بود و مرز‌های دانش رو جا‌به‌جا کرد. ایده‌اش هم خیلی ساده و زیبا بود. لایه‌های کانولووشنی خیلی خوب فیچر‌های لوکال رو استخراج می‌کنند و از طرفی بلوک‌های ترنسفورمر هم خیلی خوب کانتکست و فیچر‌ها رو به صورت گلوبال استخراج می‌کنند. خب عقل سلیم چی میگه؟ آقای Gulati و یه مینی‌بوس از همکاراش سریعا به این نتیجه رسیدند که چرا توی کاربرد صوت که هم به فیچر‌های لوکال و هم به کانتکست گلوبال نیاز داریم نیایم و این دوتا رو بریزیم روی هم؟ خلاصه که باز یه خارش جدید در حوزه دانش منجر به ایجاد یه معماری خوب و بهینه برای بازشناسی گفتار شد.

در واقع conformer یه بلوک انکودر هست که می‌تونه خیلی خوب اصوات رو برای مقاصد بازشناسی گفتار انکود کنه. هر بلاکش شامل چهار ماژول اصلی هست که به ترتیب عبارتند از: یه لایه feed forward، یه لایه multi-head self attention، یه لایه کانوولوشن و دوباره یه لایه feed forward. وجود لایه multi-head self-attention و لایه کانولووشنی باعث میشه که مدل همزمان بتونه هم فیچرهای لوکال رو خوب استخراج کنه (همون‌طور که می‌دونید وقتی شما حرف میزنید دهان‌تون پیوسته تکون میخوره و فرکانس تولیدی حروف به نرمی درون همدیگه ادغام میشند و تغییرات فرکانس به نرمی صورت می‌گیره. درست مثل تصاویر که در یک قسمت عکس با احتمال بالا، مقادیر RGB به هم نزدیک هستند مگر اینکه یه آبجکت جدید وجود داشته باشه و همین افزونگی می‌تونه فیچرهای خوبی به ما بده) و هم اینکه با استفاده از لایه attention کانتکست و فیچرهای گلوبال رو هم خوب بفهمه. نتیجه اینکه این مدل در سه سایز عرضه شده و در سایز متوسطش که تنها ۳۰ میلیون پارامتر داره تونسته مدل SOTA قبلی رو که ۱۱۸ میلیون پارامتر داره شکست بده و در حالتی که ۱۱۸ میلیون پارامتر داشته به WER بی‌نظیر ۱.۹ درصد بر روی دادگان LibriSpeech رسیده. حتما شاید براتون سوال شده باشه که آیا همه این ماژول‌های conformer لازم هست؟ برای این کار هم مطالعه Ablation انجام شده (در این مطالعه هر قسمت رو از مدل حذف می‌کنند تا ببینند آیا نتایج ثابت می‌مونه یا بدتر میشه درصورتی که بدتر بشه تاثیرگذار بودن اون قسمت اثبات می‌شه. توصیه میشه در کارهاتون همیشه ablation study داشته باشید تا جایی نخوابید که آب زیرتون بره و مثلا کلی پارامتر اضافی تولید کرده باشید!). معماری این مدل رو در تصاویر می‌تونید ببینید. توصیه می‌کنیم این مقاله کوتاه رو حتما مطالعه کنید. همچنین این معماری در ابزار OpenSpeech هم وجود داره که می‌تونید به راحتی ازش استفاده کنید.

لینک مقاله:
https://arxiv.org/abs/2005.08100

لینک OpenSpeech:
https://github.com/openspeech-team/openspeech

#read
#paper

@nlp_stuff
مدل MEND؛ ادیت سریع، فوری و انقلابی مدل‌های زبانی

همانطور که مستحضرید، امروزه فرمان هوش مصنوعی در دست مدل‌های از پیش‌ آموزش دیده بزرگ نظیر GPTهاست و این مدل‌ها تخته‌گاز در هر حوزه‌ای مشغول تاختنند و تقریبا پرچمدار تمامی وظایفند. این مدل‌ها دانش غنی گسترده‌ای رو در خودشون دارند و حتی با عملکرد فوق انسانی خودشون باعث شگفتی می‌شوند. اما این مدل‌ها هم در برابر گذر زمان بی عیب نیستند. GPT3 رو در نظر بگیرید. این مدل به هنگامی بر روی دادگان آموزشی‌اش تعلیم دیده که ترامپ هنوز رییس جمهور بوده. حال اگر همین الان از این مدل بپرسید که چه کسی رییس جمهور آمریکاست با پاسخ‌ ترامپ ناامیدتون میکنه. چاره چیه؟

بدیهی‌ترین چاره که به ذهن میرسه میتونه این باشه که این مدل‌ها رو هر از گاهی روی دادگان جدید فاین تیون کنیم. اما در عمل نشون داده شده که این کار باعث اورفیت مدل بر روی این اندک (در قیاس با داده‌های اولیه) داده‌های جدید میشه و عملکرد کلی مدل هم آسیب میبینه. از طرفی اگر بخوایم این داده‌ها رو هم به داده‌های قدیمی الحاق کنیم و مدل رو هر بار از اول روی همه این داده‌ها آموزش بدیم بایستی دارای عمر نوح باشیم که نشدنیه. برای این درد ادیت کردن مدل، تعدادی روش در سال‌های گذشته پیشنهاد شده‌اند. گیر اصلی این روش‌ها عدم مقیاس پذیریشون به مدل‌های بزرگی نظیر GPT است. حالا خانم چلسی فین که از کله گنده‌های متالرنینگ هستند اومدند و روشی تحت عنوان mend رو پیشنهاد دادند که حتی در مقیاس GPT هم قابل انجامه. به علاوه ایشون گفتند که این مدل بایستی سه خاصیت reliability و locality و generality رو ارضا کنه، به بیان ساده‌تر در مورد سوال‌های جدید درست جواب بده، در مورد سوال‌هایی که ربطی به این سوالات جدید ندارند پاسخش عوض نشه و همچنین روی سوالات جدید بتونه خاصیت generalization داشته باشه.

خانم فین برای حل این مساله پیشنهاد دادن که یک مدل عصبی به نام ادیتور داشته باشیم که وظیفه آموزش و تغییر دادن مدل پایه (همون GPTعه) رو داشته باشه. بر این اساس برای هر لایه L ام از وزن‌های شبکه پایه یک مدل ادیتور g_l داریم. فرض کنید حالا متن‌های جدید مربوط به این که بایدن رییس جمهور آمریکاست رو به مدل‌ پایه میدهیم و عمل forward و backward را روی مدل انجام میدهیم. در حالت عادی بهینه‌سازی این گونه عمل میکردیم که در خلاف جهت گرادیان خام برای بهینه‌سازی شبکه پایه حرکت کنیم ولی خب این کار موجب همان اشکالاتی میشه که تو قسمت قبل صحبت کردیم. وظیفه مدل g_l این هست که با ورودی گرفتن گرادیان‌‌های خام نسبت به وزن‌های لایه Lام مدل پایه، یک جهتی رو برای بهینه‌سازی این وزن‌های لایه Lام خروجی بده که سه خواسته ما در قسمت قبل رو برآورده کنه. در طی فرآیند آموزش این پکیج هم هر دور گرادیان تابع loss مدل پایه به ادیتور انتقال داده میشه و این شکلی ادیتور آموزش می‌بینه. (شهودش مثل اینه که چشمای دوستتون رو ببندید و ازش بخواید به سمت هدف تیراندازی کنه و در طول مسابقه با نتایج تیراندازیش یاد بگیرید چطوری به دوستتون راهنمایی برسونید و بهش بگید چه قدر مثلا به چه سمتی مایل بشه). حالا از طرفی چون که ماتریس وزن‌های هر لایه L از مدل پایه به قدر کافی بزرگ هست، فین اینجا هم طرحی زده و این ماتریس با ابعاد d*d رو با تجزیه‌‌ به فرم ضرب خارجی به رنک ۱ و نهایتا یک بردار با سایز d تبدیل کرده که همین باعث شده کلی از بار محاسباتی و زمانی قضیه خلاصی پیدا کنه (این تکه ریزجزییات زیادی داره اگه مشتاق هستید میتونید به مقاله مراجعه کنید)

اما بعد از توضیح معماری نوبت به ریزه‌کاری‌های آموزش مدله. هر نمونه آموزشی که برای آموزش ادیتور بکار میره رو میشه به شکل یک تاپل ۵ تایی دید. چهار تا از این پنجتا، دو جفت x,y هستند که مربوط به سوالات جدید (نظیر رییس جمهور آمریکا کیه: بایدن) و (نظیر پرزیدنت ایالات متحده؟: بایدن) هستند که برای ارضای reliability و generality هستند. اسم این دو تا رو edit example و equivalance example میگذاریم. پنجمین عنصر هم یک سوال رندوم از مجموعه سوالاتیه که مدل پایه روی اونها پیش آموزش دیده (نظیر رییس جمهور روسیه؟: پوتین) که با توجه به این که حجم این سوالات خیلی بیشتر از سوالات جدیده احتمال بی ربط بودن این سوال رندوم با سوالات جدید تقریبا یکه. حالا در فرآیند آموزش، اول edit example به مدل پایه داده می‌شه و گرادیان خام تولید میشه. در گام بعدی ادیتور گرادیان خام رو میگیره و روی مدل پایه یک آپدیت انجام میده و بعد equivalance example به مدل پایه داده میشه و بر حسب loss روی این نمونه ادیتور آپدیت میشه! یک لاس هم برای یکی بودن پیش‌بینی مدل قبل و بعد از ادیت برای داده‌های رندوم اضافه میشه.
تصویر‌هایی برای فهم مدل و دیدن نتایج هم پیوست شده‌اند.

لینک مقاله:
https://arxiv.org/abs/2110.11309

#paper
#read

@nlp_stuff