۱.۴ بهکارگیری مدلهای BERT
پس از پیشآموزش یک مدل BERT، میتوان از آن برای حل مسائل NLP استفاده کرد. بااینحال، مدل BERT بلافاصله برای اجرای یک وظیفهٔ پاییندستی مشخص آماده نیست و معمولاً برای سازگاری به ریزتنظیم (fine-tuning) اضافی نیاز دارد. در نخستین گام، به یک پیشبینیگر نیاز داریم تا خروجی مدل را با مسئلهٔ مورد نظر همتراز کند. فرض کنید BERTθ̂(·) مدل BERT با پارامترهای پیشآموختهٔ θ̂ و Predictω(·) شبکهٔ پیشبینی با پارامترهای ω باشد. با یکپارچهکردن شبکهٔ پیشبینی با خروجی BERT، مدلی برای حل وظیفهٔ پاییندستی میسازیم:
y = Predictω(BERTθ̂(x)) (1.21)
که در آن x ورودی و y خروجی متناسب با مسئله است. برای نمونه، در مسائل طبقهبندی مدل یک توزیع احتمال روی برچسبها خروجی میدهد.
سپس مجموعهای از نمونههای برچسبخوردهٔ D گردآوری میکنیم و مدل را بهصورت زیر ریزتنظیم میکنیم:
(ω̃, θ̃) = arg minω, θ̂+ ∑(x,ygold)∈D Loss(yω,θ̂+, ygold) (1.22)
که در آن (x, ygold) یک زوج شامل ورودی و خروجی متناظر آن است. نمادگذاری این معادله کمی پیچیده بهنظر میرسد، اما فرایند آموزش/تنظیم کاملاً استاندارد است. مدل با کمینهکردن زیان روی نمونههای ریزتنظیم بهینه میشود و نتیجه، پارامترهای بهینهشدهٔ ω̃ و θ̃ است. بهینهسازی از پارامترهای پیشآموختهٔ θ̂ آغاز میشود. در اینجا θ̂+ نشان میدهد پارامترها با θ̂ مقداردهی اولیه شدهاند و yω,θ̂+ خروجی مدلی است که با پارامترهای ω و θ̂+ محاسبه میشود.
با پارامترهای ریزتنظیمشدهٔ ω̃ و θ̃، میتوان مدل Predictω̃(BERTθ̃(·)) را روی دادههای جدید همان وظایفی که مدل برای آنها ریزتنظیم شده است بهکار برد. شکل وظیفهٔ پاییندستی، قالب ورودی و خروجی مدل و نیز معماری شبکهٔ پیشبینی را تعیین میکند. در ادامه چند وظیفه که BERT عموماً برای آنها مناسب است فهرست میشوند.
طبقهبندی (یک متن)
یکی از پرکاربردترین کاربردهای BERT طبقهبندی متن است. در این وظیفه، BERT یک دنبالهٔ توکن دریافت و آن را به دنبالهای از بردارها رمزگذاری میکند. نخستین بردار خروجی hcls (یا h0) معمولاً نمایش کل متن در نظر گرفته میشود. شبکهٔ پیشبینی hcls را میگیرد و یک توزیع روی برچسبها تولید میکند. اگر متن ورودی [CLS] x₁ x₂ ... xₘ باشد، ساختار کلی چنین است:
[CLS] x1 x2 ... xm [SEP]
↓ ↓ ↓ ↓ ↓
ecls e1 e2 ... em em+1
↓ ↓ ↓ ↓ ↓
hcls h1 h2 ... hm hm+1
BERT
↓
Class
جعبهٔ خاکستری در شکل منبع شبکهٔ پیشبینی را نشان میدهد. مسائل بسیاری در NLP را میتوان در قالب طبقهبندی متن صورتبندی کرد و چندین بنچمارک طبقهبندی برای ارزیابی مدلهای پیشآموخته وجود دارد. برای نمونه، میتوان متن را از نظر درستی دستوری (grammaticality) یا لحن عاطفی (sentiment) طبقهبندی کرد [Socher et al., 2013; Warstadt et al., 2019]. شبکهٔ پیشبینی میتواند هر مدل طبقهبندی، از شبکهٔ عصبی عمیق تا یک طبقهبند سنتیتر، باشد. سپس کل مدل مانند یک مدل طبقهبندی استاندارد آموزش یا ریزتنظیم میشود. برای مثال، شبکهٔ پیشبینی میتواند تنها یک لایهٔ Softmax باشد و پارامترها با بیشینهکردن احتمال برچسب درست بهینه شوند.
طبقهبندی (جفت متن)
طبقهبندی را میتوان روی یک جفت متن نیز انجام داد. فرض کنید دو متن x₁...xₘ و y₁...yₙ داریم. میتوان آنها را به یک دنبالهٔ واحد با طول len متصل کرد و سپس بر پایهٔ بردار hcls برای دنبالهٔ ترکیبی یک برچسب پیشبینی کرد:
[CLS] x1 x2 ... xm [SEP] y1 y2 ... yn [SEP]
Text 1 Text 2
BERT
↓
Class
که در آن len = n + m + 2. طبقهبندی جفت متن طیفی از مسائل را پوشش میدهد: قضاوت همارزی معنایی (آیا دو متن از نظر معنا معادلاند؟) [Dolan and Brockett, 2005]؛ قضاوت استلزام متنی (آیا یک فرضیه را میتوان بهطور منطقی از یک مقدمه استنتاج کرد؟) [Bentivogli and Giampiccolo, 2011; Williams et al., 2018]؛ استنتاج عقل سلیم زمینهمند (آیا با داشتن زمینه، رخدادن یک رویداد محتمل است؟) [Zellers et al., 2018]؛ و استنتاج پرسش–پاسخ (آیا پاسخ با پرسش دادهشده متناظر است؟).
رگرسیون
بهجای تولید توزیع برچسب، میتوان شبکهٔ پیشبینی را طوری ساخت که یک امتیاز حقیقی خروجی دهد. برای مثال با افزودن یک لایهٔ Sigmoid به شبکهٔ پیشبینی، سامانه میتواند شباهت دو جمله را محاسبه کند. معماری همان معماری سامانههای طبقهبندی مبتنی بر BERT است و تنها لایهٔ خروجی تغییر میکند:
[CLS] x1 ... xm [SEP] y1 ... yn [SEP]
BERT
↓
Number (similarity/evaluation score/etc.)
برای آموزش یا ریزتنظیم نیز مانند معمول میتوان زیان رگرسیون خروجی مدل را کمینه کرد.
برچسبگذاری دنباله
برچسبگذاری دنباله (sequence labeling) رویکردی در یادگیری ماشین است که برای دامنهٔ وسیعی از مسائل NLP کاربرد دارد. این رویکرد به هر توکن دنبالهٔ ورودی یک برچسب اختصاص میدهد و سپس میتوان از دنبالهٔ برچسبها حاشیهنویسیهای زبانی استخراج کرد. نمونهای از آن برچسبگذاری نقش دستوری (POS tagging) است که در آن به هر واژه نقش دستوری متناظر داده میشود. نمونهٔ دیگر تشخیص موجودیت نامدار (NER) است که در آن هر واژه یک برچسب NER میگیرد و موجودیتهای نامدار از این برچسبها شناسایی میشوند.
[CLS] x1 x2 ... xm [SEP]
BERT
↓ ↓ ↓
Tag Tag ... Tag
{B,I,O} at each position
در اینجا {B, I, O} مجموعهٔ برچسبهای NER است. برای مثال، B-ORG شروع نام یک سازمان، I-ORG قرارداشتن واژه درون نام سازمان و O تعلقنداشتن واژه به هیچ موجودیت نامدار را نشان میدهد. این مدل NER میتواند در هر موقعیت توزیعی روی مجموعهٔ برچسبها تولید کند که آن را با pi نشان میدهیم. آموزش یا ریزتنظیم مدل روی توزیعهای {p₁,...,pₘ} انجام میشود. اگر pi(tagi) احتمال برچسب درست در موقعیت i باشد، زیان آموزش را میتوان درستنمایی منفی تعریف کرد:
Loss = −(1/m) ∑i=1m log pi(tagi) (1.23)
یافتن بهترین دنبالهٔ برچسب با داشتن یک مدل NER آموزشدیده، مسئلهای شناختهشده در NLP است. این کار اغلب با برنامهریزی پویا انجام میشود که در صورت صورتبندی بهعنوان یافتن مسیر روی شبکه (lattice)، پیچیدگی خطی دارد [Huang, 2009].
پیشبینی بازه (Span Prediction)
برخی وظایف NLP به پیشبینی یک بازه از متن نیاز دارند. یک نمونهٔ رایج، درک مطلب است. در این وظیفه پرسوجوی x₁...xₘ و متن زمینهٔ y₁...yₙ داده میشود و هدف، یافتن یک بازهٔ پیوسته در y₁...yₙ است که بهترین پاسخ را به پرسوجو میدهد. این مسئله را میتوان مانند برچسبگذاری دنباله صورتبندی کرد و برای هر yj برچسبی پیشبینی کرد که آغاز یا پایان بازه بودن آن را مشخص کند. مطابق Seo et al. [2017]، روی خروجی BERT برای هر yj دو شبکه قرار میدهیم: یکی احتمال آغاز بازه بودن yj را تولید میکند (pbegj) و دیگری احتمال پایان بازه بودن آن را (pendj).
[CLS] x1 ... xm [SEP] y1 y2 ... yn [SEP]
Query Context Text
BERT
↓ ↓ ↓
Beg/End probabilities for y1...yn
پرسوجو و متن زمینه با هم بستهبندی میشوند تا دنبالهٔ ورودی ساخته شود. شبکههای پیشبینی فقط روی خروجیهای متن زمینه اعمال میشوند و در هر موقعیت احتمالهای pbegj و pendj را میسازند. زیان با جمع درستنمایی لگاریتمی دو مدل در سراسر متن زمینه محاسبه میشود:
Loss = −(1/n) ∑j=1n (log pbegj + log pendj) (1.24)
در زمان آزمون، بهترین بازه با رابطهٔ زیر جستوجو میشود:
(ĵ₁, ĵ₂) = arg max1≤j₁≤j₂≤n (log pbegj₁ + log pendj₂) (1.25)
رمزگذاری برای مدلهای رمزگذار–رمزگشا
اگرچه تمرکز این بخش عمدتاً بر مسائل درک زبان بوده است، BERT را میتوان در دامنهٔ گستردهتری از وظایف NLP بهکار برد. در واقع BERT در هر سناریویی که لازم باشد قطعهای متن رمزگذاری شود کاربرد دارد. یکی از کاربردهایی که هنوز ذکر نکردهایم تولید متن است که وظایفی مانند ترجمهٔ ماشینی، خلاصهسازی، پرسشپاسخ و تولید گفتوگو را دربر میگیرد. این وظایف را میتوان بهصورت مسائل دنبالهبهدنباله صورتبندی کرد: رمزگذار متن مبدأ را نمایش میدهد و رمزگشا متن مقصد متناظر را تولید میکند. یک راه مستقیم برای استفاده از BERT، درنظرگرفتن آن بهعنوان رمزگذار است. پیش از ریزتنظیم، پارامترهای رمزگذار با پارامترهای یک BERT پیشآموخته مقداردهی اولیه میشوند و سپس مدل رمزگذار–رمزگشا مثل معمول روی زوج متنها ریزتنظیم میشود.
Source: [CLS] x1 ... xm [SEP]
BERT (Encoder)
↓
Adapter (optional)
↓
Decoder input: y1 y2 ... y(n-1)
↓
Target output: y1 y2 y3 ... yn
در این نمودار، x₁...xₘ دنبالهٔ مبدأ، y₁...yₙ دنبالهٔ مقصد، eˣ₁...eˣₘ دنبالهٔ تعبیهٔ مبدأ و eʸ₁...eʸₙ دنبالهٔ تعبیهٔ مقصد هستند. سازگارکننده (adapter) اختیاری است و خروجی BERT را به قالبی نگاشت میکند که برای رمزگشا مناسبتر است.
ریزتنظیم BERT یک مسئلهٔ مهندسی پیچیده است و عواملی مانند مقدار دادهٔ ریزتنظیم، اندازهٔ مدل و بهینهساز مورد استفاده بر آن اثر میگذارند. بهطور کلی میخواهیم مدل را بهاندازهٔ کافی ریزتنظیم کنیم تا روی وظایف پاییندستی خوب عمل کند. بااینحال، ریزتنظیم BERT برای وظایف خاص ممکن است به بیشبرازش منجر شود و در نتیجه توان تعمیم مدل به وظایف دیگر را کاهش دهد. برای مثال فرض کنید BERT روی یک وظیفهٔ مشخص خوب عمل میکند؛ اگر سپس آن را برای وظایف جدید ریزتنظیم کنیم، ممکن است عملکردش روی وظیفهٔ اصلی افت کند. این مسئله با «فراموشی فاجعهبار» (catastrophic forgetting) در آموزش پیوسته مرتبط است؛ وضعیتی که شبکهٔ عصبی هنگام بهروزرسانی با نمونههای جدید، اطلاعاتی را که قبلاً آموخته فراموش میکند.
در کاربردهای عملی، راهی رایج برای کاهش فراموشی فاجعهبار این است که مقداری دادهٔ قدیمی به دادهٔ ریزتنظیم افزوده شود و مدل با دادهای متنوعتر آموزش ببیند. همچنین میتوان از روشهای ویژهٔ فراموشی فاجعهبار مانند بازپخش تجربه (experience replay) [Rolnick et al., 2019] و تثبیت کشسان وزنها (elastic weight consolidation) [Kirkpatrick et al., 2017] استفاده کرد. برای بحث تفصیلیتر دربارهٔ این مسئله در یادگیری پیوسته میتوان به مرورهای Parisi et al. [2019] و Wang et al. [2023a;e] مراجعه کرد.