نمونهٔ یادگیری درونمتنی که از بخش قبل ادامه مییابد:
Assume that the polarity of a text is a label chosen from {positive, negative,
neutral}. Identify the polarity of the input.
Input: The traffic is terrible during rush hours, making it difficult to reach the
airport on time.
Polarity: Negative
Input: The weather here is wonderful.
Polarity: Positive
Input: I love the food here. It’s amazing!
Polarity:
در این پرامپت، دو نمونهٔ نخست بهعنوان نمایش (Demonstration) به مدل نشان میدهند ورودی چگونه باید به برچسب خروجی نگاشت شود و نمونهٔ سوم مسئلهای است که مدل باید پاسخ آن را کامل کند.
پرامپتدهی و یادگیری درونمتنی در رشد اخیر مدلهای زبانی بزرگ نقشی مهم دارند. در فصل ۳ این موضوعها با جزئیات بیشتری بررسی میشوند. با این حال، باید توجه داشت که هرچند پرامپتدهی راه قدرتمندی برای سازگارکردن مدلهای زبانی بزرگ است، برای اطمینان از اینکه مدلها دستورها را دقیق دنبال میکنند همچنان مقداری تنظیم لازم است. افزون بر این، فرایند ریزتنظیم برای همترازکردن ارزشهای این مدلها با ارزشهای انسانی اهمیت اساسی دارد. بحث مفصلتر دربارهٔ ریزتنظیم در فصل ۴ ارائه میشود.
۱.۲ وظایف پیشآموزش خودنظارتی
در این بخش، رویکردهای پیشآموزش خودنظارتی برای معماریهای عصبی مختلف، از جمله معماریهای فقطرمزگشا، فقطرمزگذار و رمزگذار–رمزگشا بررسی میشوند. بحث را به Transformerها محدود میکنیم، زیرا مبنای بیشتر مدلهای پیشآموخته در NLP هستند. با این حال، پیشآموزش مفهومی گسترده است؛ بنابراین برای مختصرماندن این بخش، فقط معرفی کوتاهی از رویکردهای پایه ارائه میکنیم.
۱.۲.۱ پیشآموزش فقطرمزگشا
معماری فقطرمزگشا در توسعهٔ مدلهای زبانی بهطور گسترده استفاده شده است [Radford et al., 2018]. برای مثال، میتوان با حذف سادهٔ زیرلایههای توجه متقاطع (Cross-attention) از رمزگشای Transformer، آن را بهعنوان مدل زبانی به کار برد. چنین مدلی با توجه به توکنهای پیشین، توزیع احتمال توکنها را در موقعیت بعدی پیشبینی میکند و خروجی، توکنی است که بیشترین احتمال را دارد.
روش استاندارد آموزش این مدل، مانند مسئلهٔ مدلسازی زبان، کمینهکردن یک تابع زیان روی مجموعهای از دنبالههای توکن است. فرض کنید Decoderθ(·) رمزگشایی با پارامترهای θ باشد. در هر موقعیت i، رمزگشا بر اساس توکنهای پیشین {x0, ..., xi} توزیعی برای توکن بعدی تولید میکند که آن را Prθ(·|x0, ..., xi) یا به اختصار pθi+1 مینامیم. فرض کنید توزیع معیار در همان موقعیت pgoldi+1 باشد. در مدلسازی زبان، میتوان این توزیع معیار را بازنمایی one-hot واژهٔ درست دانست. سپس تابع زیان L(pθi+1, pgoldi+1) اختلاف پیشبینی مدل با مقدار درست را اندازه میگیرد. در NLP معمولاً از آنتروپی متقاطع در مقیاس لگاریتمی استفاده میشود.
برای یک دنبالهٔ شامل m توکن {x0, ..., xm}، زیان روی این دنباله برابر مجموع زیان در موقعیتهای {0, ..., m−1} است:
Lossθ(x0, ..., xm) = Σi=0m−1 L(pθi+1, pgoldi+1) = Σi=0m−1 LogCrossEntropy(pθi+1, pgoldi+1) (1.5)
در این رابطه LogCrossEntropy(·) آنتروپی متقاطع در مقیاس لگاریتمی است و pgoldi+1 بازنمایی one-hot توکن xi+1 است.
این تابع زیان را میتوان به مجموعهای از دنبالهها، یعنی D، تعمیم داد. در این صورت هدف پیشآموزش یافتن بهترین پارامترهایی است که زیان روی D را کمینه کنند:
θ̂ = arg minθ Σx∈D Lossθ(x) (1.6)
این هدف از نظر ریاضی معادل برآورد بیشینهٔ درستنمایی (Maximum Likelihood Estimation) است و میتوان آن را به شکل زیر بازنویسی کرد:
θ̂ = arg maxθ Σx∈D log Prθ(x) = arg maxθ Σx∈D Σi=0m−1 log Prθ(xi+1|x0, ..., xi) (1.7)
با پارامترهای بهینهشدهٔ θ̂ میتوان از مدل زبانی پیشآموختهٔ Decoderθ̂(·) برای محاسبهٔ احتمال Prθ̂(xi+1|x0, ..., xi) در هر موقعیت یک دنبالهٔ دادهشده استفاده کرد.
۱.۲.۲ پیشآموزش فقطرمزگذار
همانگونه که در بخش ۱.۱.۲.۱ تعریف شد، رمزگذار Encoderθ(·) تابعی است که دنبالهٔ توکن x = x0...xm را میخواند و دنبالهای از بردارها H = h0...hm تولید میکند.۴ آموزش مستقیم این مدل ساده نیست، زیرا دادهٔ معیار مستقیمی نداریم که با آن کیفیت خروجی یک تابع با مقادیر حقیقی را اندازه بگیریم. رویکرد متداول در پیشآموزش رمزگذار این است که رمزگذار را با چند لایهٔ خروجی ترکیب کنیم تا سیگنالهای نظارتیای دریافت شود که بهدستآوردن آنها آسانتر است.
شکل ۱.۲ معماری رایجی برای پیشآموزش رمزگذارهای Transformer را نشان میدهد که در آن یک لایهٔ Softmax روی رمزگذار Transformer قرار میگیرد. روشن است که این معماری همان ساختار مدل زبانی مبتنی بر رمزگشا را دارد و خروجی آن دنبالهای از توزیعهای احتمال است:
[pW,θ1, ..., pW,θm]T = SoftmaxW(Encoderθ(x)) (1.9)
شکل ۱.۲ — پیشآموزش یک رمزگذار Transformer (سمت چپ) و سپس بهکارگیری رمزگذار پیشآموخته (سمت راست). در مرحلهٔ پیشآموزش، رمزگذار همراه با یک لایهٔ Softmax از طریق خودنظارتی آموزش داده میشود. در مرحلهٔ کاربرد، لایهٔ Softmax حذف میشود و رمزگذار پیشآموخته با یک شبکهٔ پیشبینی ترکیب میشود تا مسئلهٔ مشخصی را حل کند. بهطور معمول، برای سازگاری بهتر با وظیفه، کل سامانه با دادهٔ برچسبخورده ریزتنظیم میشود.
ترجمهٔ برچسبهای شکل: masked = ماسکشده؛ Encoder = رمزگذار؛ Softmax = سافتمکس؛ Self-supervision = خودنظارتی؛ Pre-training = پیشآموزش؛ Pre-trained Encoder = رمزگذار پیشآموخته؛ Prediction Network = شبکهٔ پیشبینی؛ Output for Downstream Tasks = خروجی برای وظایف پاییندستی.
در اینجا pW,θi توزیع خروجی Pr(·|x) در موقعیت i است. نماد SoftmaxW(·) نشان میدهد لایهٔ Softmax با W پارامتردهی شده است، یعنی SoftmaxW(H) = Softmax(H · W). برای سادهترشدن نمادگذاری، گاهی بالانویسهای W و θ را از توزیعهای احتمال حذف میکنیم.
تفاوت این مدل با مدلهای زبانی استاندارد در معنای خروجی pi است. در مدلسازی زبان، pi توزیع احتمال پیشبینی واژهٔ بعدی است. این فرایند از رمزگشایی خودبازگشتی پیروی میکند: مدل زبانی فقط واژهها را تا موقعیت i میبیند و توکن بعدی را پیشبینی میکند. در مقابل، در پیشآموزش رمزگذار، کل دنباله میتواند همزمان مشاهده شود؛ بنابراین پیشبینی مستقیم یکی از توکنهای موجود در همان دنباله معنای مفیدی ندارد.
۱.۲.۲.۱ مدلسازی زبانی ماسکشده
یکی از محبوبترین روشهای پیشآموزش رمزگذار، مدلسازی زبانی ماسکشده (Masked Language Modeling یا MLM) است که اساس مدل مشهور BERT را تشکیل میدهد [Devlin et al., 2019]. ایدهٔ اصلی این است که با پوشاندن تعدادی از توکنهای دنبالهٔ ورودی، یک چالش پیشبینی ایجاد کنیم و مدل را برای پیشبینی توکنهای پوشاندهشده آموزش دهیم.
از این دیدگاه، مسئلهٔ متعارف مدلسازی زبان که گاهی «مدلسازی زبانی علّی» (Causal Language Modeling) نامیده میشود، حالت خاصی از مدلسازی زبانی ماسکشده است: در هر موقعیت، توکنهای سمت راست را میپوشانیم و توکن آن موقعیت را با استفاده از بافت سمت چپ پیشبینی میکنیم. با این حال، در مدلسازی زبانی علّی فقط بافت چپ برای پیشبینی واژه استفاده میشود، در حالی که پیشبینی یک واژه میتواند به توکنهای بافت راست نیز وابسته باشد. در مدلسازی زبانی ماسکشده، همهٔ توکنهای ماسکنشده برای پیشبینی واژه به کار میروند و در نتیجه یک مدل دوسویه شکل میگیرد که پیشبینی خود را بر مبنای هر دو بافت چپ و راست انجام میدهد.
بهصورت رسمیتر، برای دنبالهٔ ورودی x = x0...xm فرض کنید توکنهای موقعیتهای A(x) = {i1, ..., iu} را ماسک کنیم. در نتیجه دنبالهٔ توکنِ خرابشدهٔ x̄ به دست میآید که در هر موقعیت عضو A(x) توکن اصلی با نماد ویژهٔ [MASK] جایگزین شده است. برای نمونه، در دنبالهٔ زیر:
The early bird catches the worm
ممکن است دنبالهٔ ماسکشده چنین باشد:
The [MASK] bird catches the [MASK]
که در آن توکنهای early و worm ماسک شدهاند؛ یعنی i1=2 و i2=6.
اکنون دو دنبالهٔ x و x̄ را داریم. مدل بهگونهای بهینه میشود که بتوان x را بر اساس x̄ بهدرستی پیشبینی کرد. این فرایند شبیه یک خودرمزگذار است و هدف آموزش بیشینهکردن احتمال بازسازی Pr(x|x̄) است. میان x و x̄ همترازی سادهٔ موقعیتبهموقعیت وجود دارد. از آنجا که هر توکن ماسکنشده در x̄ با توکن متناظر در همان موقعیتِ x یکسان است، نیازی نیست پیشبینی آن توکن ماسکنشده در هدف آموزش لحاظ شود. بنابراین هدف ساده میشود و فقط احتمال توکنهای ماسکشده را بیشینه میکند:
(Ŵ, θ̂) = arg maxW,θ Σx∈D Σi∈A(x) log PrW,θi(xi|x̄) (1.10)
همین هدف را میتوان با زیان آنتروپی متقاطع نیز نوشت:
(Ŵ, θ̂) = arg minW,θ Σx∈D Σi∈A(x) LogCrossEntropy(pW,θi, pgoldi) (1.11)
در این رابطه PrW,θk(xk|x̄) احتمال توکن درست xk در موقعیت k با ورودی خرابشدهٔ x̄ و pW,θk توزیع احتمال خروجی در همان موقعیت است.
برای روشنشدن موضوع، همان مثال «the early bird catches the worm» را در نظر بگیرید که دو توکن آن ماسک شدهاند. در این نمونه، هدف بیشینهکردن مجموع لگاریتم احتمال دو توکن واقعی است:
Loss = log Pr(x2=early | x̄=[CLS] The [MASK] bird catches the [MASK]) + log Pr(x6=worm | x̄=[CLS] The [MASK] bird catches the [MASK]) (1.12)
پس از بهدستآوردن پارامترهای بهینهٔ Ŵ و θ̂ میتوان Ŵ را کنار گذاشت. سپس رمزگذار پیشآموختهٔ Encoderθ̂(·) را میتوان برای وظایف پاییندستی ریزتنظیم کرد یا مستقیماً به کار برد.
۱.۲.۲.۲ مدلسازی زبانی جایگشتی
مدلسازی زبانی ماسکشده ساده و پرکاربرد است، اما مشکلات تازهای ایجاد میکند. یکی از معایب آن استفاده از توکن ویژهٔ [MASK] است؛ این توکن در زمان آموزش استفاده میشود اما در زمان آزمون وجود ندارد.
این تفاوت باعث ناهماهنگی میان آموزش و استنتاج میشود. علاوه بر آن، فرایند خودرمزگذاری وابستگی میان توکنهای ماسکشده را نادیده میگیرد. برای مثال، در نمونهٔ بالا پیشبینی x2 ــ نخستین توکن ماسکشده ــ مستقل از x6 ــ دومین توکن ماسکشده ــ انجام میشود، در حالی که x6 باید بخشی از بافت x2 باشد.
این مسائل را میتوان با رویکرد مدلسازی زبانی جایگشتی (Permuted Language Modeling) در پیشآموزش برطرف کرد [Yang et al., 2019]. مانند مدلسازی زبانی علّی، در این روش نیز توکنها بهصورت دنبالهای پیشبینی میشوند؛ اما برخلاف مدل علّی که پیشبینی از ترتیب طبیعی متن، مانند چپبهراست یا راستبهچپ، پیروی میکند، مدلسازی جایگشتی اجازه میدهد توکنها در هر ترتیبی پیشبینی شوند. روش ساده است: یک ترتیب برای پیشبینی توکنها تعیین میکنیم و سپس مدل را همانند مدلسازی زبانی استاندارد، مطابق بخش ۱.۲.۱، آموزش میدهیم. توجه کنید که ترتیب واقعی توکنها در متن تغییر نمیکند؛ فقط ترتیب پیشبینی آنها با مدلسازی استاندارد تفاوت دارد.
برای نمونه، دنبالهای پنجتوکنی x0x1x2x3x4 را در نظر بگیرید. فرض کنید ei تعبیهٔ توکن xi باشد که از ترکیب تعبیهٔ توکن و تعبیهٔ موقعیت ساخته میشود. در مدلسازی زبانی استاندارد، دنباله با ترتیب x0 → x1 → x2 → x3 → x4 تولید میشود و احتمال آن از فرایند زیر به دست میآید:
Pr(x) = Pr(x0) · Pr(x1|x0) · Pr(x2|x0,x1) · Pr(x3|x0,x1,x2) · Pr(x4|x0,x1,x2,x3)
= Pr(x0) · Pr(x1|e0) · Pr(x2|e0,e1) · Pr(x3|e0,e1,e2) · Pr(x4|e0,e1,e2,e3) (1.13)
اکنون ترتیب دیگری را برای پیشبینی توکنها در نظر بگیرید: x0 → x4 → x2 → x1 → x3. فرایند تولید دنباله در این صورت چنین است:
Pr(x) = Pr(x0) · Pr(x4|e0) · Pr(x2|e0,e4) · Pr(x1|e0,e4,e2) · Pr(x3|e0,e4,e2,e1) (1.14)
این ترتیب تازه باعث میشود تولید بعضی توکنها بر بافت گستردهتری شرط شود و مانند مدل زبانی استاندارد فقط به توکنهای پیشین محدود نباشد. برای نمونه، هنگام تولید x3، مدل هم بافت چپ آن یعنی e0, e1, e2 و هم بافت راست یعنی e4 را در نظر میگیرد. تعبیههای e0, e1, e2, e4 اطلاعات موقعیتی توکنهای اصلی را حفظ میکنند؛ بنابراین ترتیب واقعی متن از بین نمیرود. از این جهت، روش تا حدی شبیه مدلسازی زبانی ماسکشده است: x3 را پنهان میکنیم و از توکنهای پیرامونی برای پیشبینی آن استفاده میکنیم.
پیادهسازی مدلسازی زبانی جایگشتی برای Transformerها نسبتاً آسان است. از آنجا که سازوکار خودتوجهی نسبت به ترتیب فیزیکی ورودی حساس نیست، برای دستیابی به تجزیهای مانند معادلهٔ (۱.۱۴) لازم نیست دنباله را واقعاً جابهجا کنیم. در عوض میتوان جایگشت را با تنظیم ماسکهای مناسب خودتوجهی اعمال کرد. برای مثال در محاسبهٔ Pr(x1|e0, e4, e2) توکنها را در ترتیب اصلی قرار میدهیم و ارتباطهای توجه نامجاز را ماسک میکنیم.
x0 x1 x2 x3 x4
Masks for Self-attention:
Blue box = valid attention
Gray box = blocked attention
برای مشاهدهٔ تصویری روشنتر، شکل ۱.۳ نتیجهٔ ماسکگذاری خودتوجهی را در سه روش مدلسازی زبانی علّی، مدلسازی زبانی ماسکشده و مدلسازی زبانی جایگشتی مقایسه میکند.
۱.۲.۲.۳ پیشآموزش رمزگذارها بهعنوان طبقهبند
ایدهٔ رایج دیگری برای آموزش رمزگذار، استفاده از وظایف طبقهبندی است. در یادگیری خودنظارتی، این کار معمولاً با ساخت چالشهای طبقهبندی تازه از متن بدونبرچسب انجام میشود. راههای زیادی برای طراحی چنین وظایفی وجود دارد؛ در اینجا دو وظیفهٔ محبوب را معرفی میکنیم.
یک روش ساده که «پیشبینی جملهٔ بعدی» (Next Sentence Prediction یا NSP) نام دارد، در مقالهٔ اصلی BERT معرفی شد [Devlin et al., 2019]. فرض NSP این است که یک رمزگذار متنی خوب باید رابطهٔ میان دو جمله را درک کند. برای مدلکردن این رابطه، میتوان از خروجی کدگذاری دو جملهٔ پیاپی، SentA و SentB، استفاده کرد تا مشخص شود آیا SentB واقعاً جملهٔ بعد از SentA است یا خیر.
برای مثال، فرض کنید:
SentA = 'It is raining .'
SentB = 'I need an umbrella .'
دنبالهٔ ورودی رمزگذار میتواند چنین باشد:
[CLS] It is raining . [SEP] I need an umbrella . [SEP]
[CLS] نماد شروع، یعنی x0، است که در پیشآموزش رمزگذار معمولاً استفاده میشود و [SEP] جداکنندهٔ دو جمله است. پردازش این دنباله مطابق فرایند استاندارد کدگذاری Transformer انجام میشود: ابتدا هر توکن xi با تعبیهٔ ei نمایش داده میشود، سپس دنبالهٔ تعبیهها {e0, ..., em} وارد رمزگذار میشود تا دنبالهٔ خروجی {h0, ..., hm} به دست آید. از آنجا که h0 معمولاً بازنمایی کل دنباله در نظر گرفته میشود، یک لایهٔ Softmax روی آن قرار میدهیم تا یک طبقهبند دودویی ساخته شود:
token: [CLS] It is raining . [SEP] I need an umbrella . [SEP]
embedding: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 e10 e11
↓ Encoder ↓
encoding: h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11
↓
Softmax
↓
Is Next or Not?
شکل ۱.۳ — مقایسهٔ نتیجهٔ ماسکگذاری خودتوجهی در مدلسازی زبانی علّی، مدلسازی زبانی ماسکشده و مدلسازی زبانی جایگشتی. سلول خاکستری نشان میدهد توکن موقعیت j به توکن موقعیت i توجه نمیکند. سلول آبی (i,j) نشان میدهد توکن موقعیت j به توکن موقعیت i توجه میکند. emask تعبیهٔ نماد [MASK] است که از ترکیب تعبیهٔ توکن و تعبیهٔ موقعیت ساخته میشود.
ترجمهٔ عناوین زیرشکل: (الف) مدلسازی زبانی علّی؛ (ب) مدلسازی زبانی ماسکشده؛ (پ) مدلسازی زبانی جایگشتی.
برای تولید نمونههای آموزشی NSP در هر نوبت به دو جمله نیاز داریم: یکی برای SentA و دیگری برای SentB. یک روش ساده استفاده از ترتیب طبیعی دو جملهٔ پیاپی در متن است. برای مثال، با انتخاب دو جملهٔ واقعاً متوالی یک نمونهٔ مثبت میسازیم و با انتخاب تصادفی جملهٔ دوم یک نمونهٔ منفی تولید میکنیم. در نتیجه، آموزش این مدل همانند آموزش یک طبقهبند است. معمولاً NSP بهعنوان یک زیان آموزشی افزوده در کنار پیشآموزش مبتنی بر مدلسازی زبانی ماسکشده استفاده میشود.
نمونهٔ دوم برای آموزش رمزگذارهای Transformer بهصورت طبقهبند، اعمال سیگنال نظارتی طبقهبندی به هر خروجی رمزگذار است. برای مثال، Clark و همکاران [2019] در مدل ELECTRA پیشنهاد میکنند رمزگذار Transformer آموزش ببیند تا برای هر توکن ورودی تشخیص دهد آیا آن توکن با ورودی اصلی یکسان است یا به شکلی تغییر کرده است.
گام نخست این روش، ساخت دنبالهٔ جدیدی از یک دنبالهٔ توکن است که در آن بعضی توکنها تغییر داده شدهاند. برای این کار یک مدل زبانی ماسکشدهٔ کوچک ــ که آن را مولد (Generator) مینامیم ــ به کار میرود: تعدادی از توکنها را بهصورت تصادفی ماسک میکنیم و مدل را برای پیشبینی آنها آموزش میدهیم. برای هر نمونهٔ آموزشی، این مدل در هر موقعیت ماسکشده یک توکن خروجی میدهد که ممکن است با توکن اصلی متفاوت باشد. همزمان رمزگذار Transformer دیگری ــ تمایزدهنده (Discriminator) ــ آموزش داده میشود تا مشخص کند هر توکن پیشبینیشده با توکن اصلی یکسان است یا جایگزین شده است.
بهطور مشخص، مولد دنبالهای ایجاد میکند که بعضی توکنهای آن جایگزین شدهاند:
original: [CLS] The boy spent hours working on toys .
↓ mask ↓ mask
masked: [CLS] The boy spent [MASK] working on [MASK] .
↓ Generator (small masked language model)
replaced: [CLS] The boy spent decades working on toys .
سپس تمایزدهنده هر توکن را بهعنوان «اصلی» یا «جایگزینشده» برچسب میزند:
replaced: [CLS] The boy spent decades working on toys .
↓ Discriminator (the model we want)
label: original original original original replaced original original original original
در آموزش، مولد مانند یک مدل زبانی ماسکشده با برآورد بیشینهٔ درستنمایی بهینه میشود و تمایزدهنده مانند یک طبقهبند با زیان مبتنی بر طبقهبندی آموزش میبیند. در ELECTRA، زیان مبتنی بر بیشینهٔ درستنمایی و زیان طبقهبندی با هم ترکیب میشوند تا مولد و تمایزدهنده بهطور مشترک آموزش ببینند.
رویکرد جایگزین استفاده از شبکههای مولد تخاصمی (GAN) است؛ در این حالت مولد طوری آموزش میبیند که تمایزدهنده را فریب دهد و تمایزدهنده نیز یاد میگیرد خروجی مولد را از توزیع واقعی تشخیص دهد. با این حال، آموزش به سبک GAN مسئلهٔ آموزش را پیچیدهتر میکند و مقیاسدادن آن دشوارتر است. در هر دو حالت، پس از پایان آموزش، مولد کنار گذاشته میشود و بخش کدگذاریِ تمایزدهنده بهعنوان مدل پیشآموخته برای وظایف پاییندستی استفاده میشود.