برت - BERT

برت چیست؟

برت نوعی مدل زبانی (language model) برای حل چالش‌های به‌روز در زمینۀ پردازش زبان‌های طبیعی (NLP) است. این مدل حاصل مقاله‌ای از محققان گوگل است که اولین بار در سال ۲۰۱۸ به چاپ رسید و در سال ۲۰۱۹ بازبینی شد. نتایج به‌دست‌آمدۀ برت در معیار‌های پردازش و فهم زبان‌های طبیعی به‌قدری خوب بود که توجه زیادی به خود جلب کرد.

نو‌آوری فنی کلیدی برت که آن را متمایز می‌سازد پیاده‌سازی آموزش دوطرفه روی معماری ترنسفورمر‌ها (نوعی معماری یادگیری عمیق با استفاده از مکانیزم توجه) برای مدل‌سازی زبان‌هاست. تلاش‌های قبل از این دنبالۀ متون را یا از چپ به راست یا از راست به چپ بررسی می‌کردند. نتایج مقالۀ برت نشان می‌دهد که رویکرد دوطرفه باعث می‌شود مدل طراحی‌شده ازنظر فهم زمینه (context) و جریان کلمات (flow)، در مقایسه با مدل‌های یک‌طرفه، زبان را عمیق‌تر درک کند. در این مقاله، تکنیکی با عنوان MLM یا Masked Language Model معرفی می‌شود که آموزش دوطرفه را ممکن می‌سازد.


پیش‌زمینه

چندین سال است که دانشمندان از مفهوم یادگیری انتقالی (Transfer Learning) در حوزۀ بینایی ماشین استفاده می‌کنند. یادگیری انتقالی به این معناست که شبکه‌ای عصبی را روی دادگان بسیار زیادی به‌صورت بدون نظارت برای انجام کار مشخصی آموزش دهید (مثل ImageNet). سپس از این مدل به‌عنوان لایه‌های پایه‌ای برای تنظیم دقیق (fine-tune) روی داده‌های محدود به کار خود استفاده کنید (Dog/Cat Classification).

در سال‌های اخیر، محققان نشان داده‌اند که همین تکنیک در بسیاری از تسک‌های پردازش زبان طبیعی مفید واقع می‌شود. ترنسفورمر‌ها (Transformers)، که پیش از این به آن‌ها اشاره شد، در واقع تلاشی برای پیاده‌سازی این مفهوم در زمینۀ پردازش زبان‌های طبیعی هستند که از مکانیزم توجه (Attention Mechanism) بهره می‌برند.


عملکرد برت

برت از مکانیزم توجه ترنسفورمر‌ها استفاده می‌کند که رابطۀ‌ بین کلمات را در زمینه‌های مختلف یاد می‌گیرد. در ساده‌ترین شکل خود، ترنسفورمر شامل دو مکانیزم جداست: یک کدگذار (Encoder) که متن ورودی را می‌خواند و یک کدگشا (Decoder) که پیش‌بینی محتمل را برای تسک مشخص‌شده بیان می‌کند.


 مثال استفاده از ترنسفورمر در تسک ترجمه‌ی ماشینی
مثال استفاده از ترنسفورمر در تسک ترجمه‌ی ماشینی


از آنجا که هدف برت ساختن نوعی مدل زبانی است که متون را می‌فهمد، تنها استفاده از لایه‌های کدگذار (Encoder) ضروری است.

برعکس مدل‌های قبلی (RNNs و LSTM) که متن ورودی را به‌ترتیب از چپ به راست یا از راست به چپ می‌خواند، لایۀ کدگذار ترنسفورمر‌ها دنباله‌ای از کلمات ورودی را به‌صورت یکجا می‌خواند. این خصوصیت باعث می‌شود که مدل مدنظر زمینۀ (context)‌ یک کلمه را بر اساس کلمه‌های نزدیکش (چپ یا راست) یاد بگیرد.


معماری برت

دو اندازه برای مدل برت معرفی شده است:

  • برت پایه (BERTBASE): متشکل از ۱۲ لایۀ کدگذار است. تعداد کل پارامتر‌های شبکه ۱۱۰ میلیون است.
  • برت بزرگ (BERTLARGE): متشکل از ۲۴ لایۀ کدگذار که طبیعتاً تعداد پارامتر‌ها ۳۴۰ میلیون است و حجم بیشتری دارد. همچنین سرعت آموزش آن کمتر است، ولی نسبت به مدل پایه دقت بیشتر و عملکرد بهتری دارد.
اندازه‌های مختلف مدل برت
اندازه‌های مختلف مدل برت


این دو از دیگر جنبه‌ها نیز متفاوت هستند: برت پایه ۷۶۸ لایۀ پنهان (hidden layer) در شبکۀ خود دارد؛ این در حالی است که برت بزرگ ۱۰۲۴ لایۀ پنهان دارد.

ورودی/خروجی برت

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


نحوه دریافت ورودی توسط برت
نحوه دریافت ورودی توسط برت


ورودی مدل ممکن است یک دنباله شامل حداکثر ۵۱۲ توکن باشد‌ (این عدد را می‌شود تنظیم کرد) که با توکن [CLS] شروع می‌شود و دنباله‌ها با توکن [SEP] از هم جدا می‌شوند. هر المان خروجی یک بردار با اندازۀ لایه‌های پنهانی است که برای مدل پایه، بردار‌هایی به طول ۷۶۸ است. برای مثال، از این بردار می‌توان در ورودی یک شبکۀ یک‌لایه برای دسته‌بندی استفاده کرد.


مثالی از خروجی برت برای تسک دسته‌بندی
مثالی از خروجی برت برای تسک دسته‌بندی


اگر دسته‌بندی شما بیشتر از دو حالت باشد (multi class classification)، تنها کافی است لایۀ softmax را طوری تغییر دهید که تعداد خروجی به‌ اندازۀ کلاس‌های مدنظر شما شود.