معرفی BERT، تحولی در NLP

زمانی که برای اولین بار یک شبکه کانولوشنی در مسابقه Image Net برنده شد، توجه همگان به مبحث یادگیری ماشین و در ادامه یادگیری عمیق جلب شد. دیگر همگان راه حل تمام مشکل ها را در این زمینه جست جو می‌کردند؛ ولی فراموش می‌کردند که مسابقه Image Net دیتای عظیمی در اختیار شرکت کنندگان قرار می‌دهد و برگ برنده شبکه های عمیق نیز همین دیتای زیاد است. در صورتی که برای خیلی از مشکلات این حجم از اطلاعات در دسترس نیست.

از طرفی آموزش یک شبکه عمیق با دیتای زیاد از دست همه ساخته نیست. زیرا این کار نیاز به قدرت پردازشی زیادی دارد.

این جا بود که استفاده از مدل های pre-trained به کمک افرادی آمد که از دیتا و قدرت پردازشی محدودی برخوردار بودند. شبکه هایی که با دیتای مسابقه Image Netآموزش داده شده اند، در اختیار همه قرار دارد و دیگر نیازی نیست که تمام مسیر را از اول طی کنیم. کافیست که یک شبکه را بر داریم و با استفاده از دو روش feature extraction و fine-tuning برای کار خودمان اختصاصی کنیم.

ولی اگر مسأله ما به تصویر مربوط نباشد چه؟ دیتای به این عظیمی برای متن را از کجا بیاوریم؟ چگونه شبکه را آموزش دهیم؟

برای استفاده از مدل های pre-trained در مسائلی که با متن سر و کار دارند، ابتدا به سراغ word embedding ها رفتیم. به ما کمک کردند و تغییر محسوسی در دقت شبکه ها ایجاد کردند. ولی اصلا عمیق نبودند و حاوی اطلاعات کمی بودند. کمک آن ها موثر ولی محدود بود.

در سال ۲۰۱۸ این مسیر برای مسأله های متنی یا به طور دقیق‌تر NLP نیز در دسترس قرار گرفت. شبکه بزرگی با دیتای زیاد (Wikipedia + BookCorpus) توسط مهندسان گوگل آموزش داده شد و در دسترس همه قرار گرفت. حالا یک شبکه بسیار قدرتمند برای بهره گیری در مسائل متنی در اختیار داریم. این شبکه Bidirectional Encoder Representations from Transformers یا BERT نام دارد.

برای استفاده از BERT، همان کاری را می‌کنیم که با شبکه هایی مانند VGGو ResNet در مسائل مرتبط با تصویر انجام می‌دهیم.

معماری

شبکه BERT در دو اندازه متفاوت آموزش داده شده.BERT پایه شامل ۱۲ لایه انکودر (که در مقاله اصلی Transformer Blocks نامیده می‌شوند) و شبکه بزرگ‌تر شامل ۲۴ لایه انکودر تشکیل شده اند.

هر انکودر از یک لایه self-attention ، یک لایه dense و یک لایه dropout تشکیل شده. قبل از انکودر ها لایه امبدینگ و بعد از آن ها لایه های خروجی قرار دارد. شبکه پایه در مجموع ۱۱۰ میلیون پارامتر و شبکه بزرگ ۳۴۵ میلیون پارامتر دارد.

آموزش آن ها ۴ روز طول کشیده.

آموزش BERT

برای آموزش BERT از دو روش زیر استفاده شده:

1- Masked Language Model (MLM)

۱۵٪ لغات متن با توکن [MASK] جایگزین شده و به ورودی BERT داده می‌شوند. یک لایه کلاسیفیکیشن با اندازه تعداد لغات با اکتیویشن softmax به خروجیِ انکودر اضافه شده. در این روش باید لغات حذف شده توسط شبکه حدس زده شود. یعنی آموزش این شبکه دو سویه (Bidirectional) است و به کلمات قبلی و بعدی حساس است.

 

2- Next Sentence Prediction (NSP)

دو جمله با توکن [SEP] از هم جدا می‌شوند. وظیفه شبکه این بار این است که یاد بگیرد این دو جمله، دو جمله متوالی هستند یا نه.

استفاده از BERT

برای استفاده از این شبکه باید tensorflow 1.10 یا جدید‌تر داشته باشید

به دو روش می‌توان از BERT استفاده کرد:

1- fine-tuning

ورودی این شبکه یک لیست به طول ۵۱۲ از توکن ها است. این توکن ها از ۱۲ لایه (در شبکه پایه) می‌گذرند و در انتها یک وکتور با طول ۷۶۸ (در شبکه پایه) به عنوان خروجی برگردانده می‌شود. این وکتور ورودی شبکه دیگری برای مساله خودمان می‌تواند باشد.

برای fine-tune کردن شبکه پایه، به GPU با حداقل ظرفیت 12G نیاز دارید.

2- feature extraction

به جز fine-tuning به روش استخراج ویژگی(feature extraction) هم می‌توان از BERT استفاده کرد. به صورتی که خروجی لایه های میانی انکودر را به عنوان embedding کلمات در نظر بگیریم و شبکه خود را با آن ها آموزش دهیم. در word embedding های قبلی مانند GloVe و word2vec به هر کلمه یک وکتور ویژگی اختصاص می‌یابد. برای مثال به معنای کلمه «خودرو» در دو جمله زیر توجه کنید:
سرخس گیاهی خودرو است.
صنعت خودرو با مشکل مواجه شده.
این دو کلمه، در واقع دو کلمه متفاوت با نوشتار مشابه هستند که در word embedding ها وکتور یکسانی برای هر دو در نظر گرفته می‌شود.
یا مثلا در متنی که به مقایسه زن و مرد می‌پردازد، این دو کلمه در مقابل هم استفاده می‌شود. در صورتی که در متن دیگری هر دو کلمه می‌توانند به گونه انسان اشاره کنند و کاربرد بسیار نزدیکی داشته باشند.
مثال های دیگری نیز برای نشان دادن ضعف word embedding ها وجود دارد.
ولی در BERT قسمت بزرگی از متن همزمان به شبکه داده می‌شود و برای تولید وکتور هر کلمه، به کلمه های قبلی و بعدی نیز توجه می‌شود. مثلا در جمله های بالا، تاثیر «صنعت» و «گیاه» بر روی کلمه «خودرو» متفاوت خواهد بود و در نتیجه وکتور های متفاوتی برای این کلمه تولید خواهد شد.

این روش در مقایسه با fine-tuning متناسب با مساله می‌تواند بهتر یا بدتر باشد. برای مثال در مساله تشخیص موجودیت های متن (named-entity recognition) روش fine-tuning به امتیاز ۹۶.۴ و این روش در بهترین حالت به امتیاز ۹۶.۱ رسید.

برای اطلاعات بیشتر می‌توانید به مقاله و گیت هاب پروژه مراجعه کنید.

منابع:

https://jalammar.github.io/illustrated-bert
http://ruder.io/nlp-imagenet
https://github.com/google-research/bert