۱.۲.۳ پیشآموزش رمزگذار–رمزگشا
در NLP، معماریهای رمزگذار–رمزگشا اغلب برای مدلسازی مسائل دنبالهبهدنباله، مانند ترجمهٔ ماشینی و پاسخگویی به پرسش، استفاده میشوند. افزون بر این مسائل متداول، میتوان مدلهای رمزگذار–رمزگشا را برای بسیاری از مسائل دیگر نیز گسترش داد. یک ایدهٔ ساده این است که هم ورودی و هم خروجی مسئله را متن در نظر بگیریم؛ در این صورت میتوان مدل رمزگذار–رمزگشا را مستقیماً به کار برد. برای مثال، با دریافت یک متن میتوان از مدل خواست متنی تولید کند که احساس متن ورودی را با برچسبهایی مانند مثبت، منفی یا خنثی توصیف کند.
این ایده امکان توسعهٔ یک سامانهٔ واحد متنبهمتن (Text-to-Text) را فراهم میکند که بتواند مسائل مختلف NLP را حل کند. مسائل متفاوت را در قالبی مشترک به شکل متنبهمتن صورتبندی میکنیم. ابتدا یک مدل رمزگذار–رمزگشا با خودنظارتی آموزش میبیند تا دانش عمومی زبان را کسب کند. سپس با دادههای متنبهمتن هدفمند، برای وظایف پاییندستی مشخص ریزتنظیم میشود.
۱.۲.۳.۱ پیشآموزش رمزگذار–رمزگشای ماسکشده
در مدل T5 از Raffel و همکاران [2020]، وظایف گوناگون همگی به یک وظیفهٔ متنبهمتن تبدیل میشوند. هر نمونه در T5 قالب زیر را دارد:
Source Text → Target Text
پیکان، متن مبدأ را ــ شامل توصیف یا دستور وظیفه و ورودی سامانه ــ از متن مقصد، یعنی پاسخ مورد انتظار، جدا میکند. برای نمونه، در ترجمهٔ چینی به انگلیسی میتوان یک نمونهٔ آموزشی را چنین نوشت:
[CLS] Translate from Chinese to English: 你好!
→
⟨s⟩ Hello!
[CLS] و ⟨s⟩ بهترتیب نمادهای شروع در سمت مبدأ و مقصد هستند.۵
وظایف دیگر نیز به همین شکل بیان میشوند. برای مثال:
[CLS] Answer: when was Albert Einstein born?
→
⟨s⟩ He was born on March 14, 1879.
[CLS] Simplify: the professor, who has has published numerous papers in his field,
will be giving a lecture on the topic next week.
→
⟨s⟩ The experienced professor will give a lecture next week.
[CLS] Score the translation from English to Chinese. English: when in Rome, do as
the Romans do. Chinese: 人在罗马就像罗马人一样做事。
→
⟨s⟩ 0.81
در نمونهٔ آخر نکتهٔ جالب این است که مسئلهٔ امتیازدهی نیز به مسئلهٔ تولید متن تبدیل شده است.
هدف، تولید رشتهٔ متنیای است که عدد 0.81 را نمایش دهد، نه خروجیدادن آن صرفاً بهعنوان یک مقدار عددی.
رویکرد بالا چارچوب تازهای برای درک و تولید عمومی زبان فراهم میکند. هم دستور وظیفه و هم ورودی مسئله به صورت متن به سامانه داده میشوند و سامانه با پیروی از دستور، وظیفه را کامل میکند. در این روش، مسائل مختلف در یک قالب کنار یکدیگر قرار میگیرند و مزیت آن این است که میتوان یک مدل واحد را برای انجام همزمان بسیاری از وظایف آموزش داد.
بهطور کلی، برای سازگارکردن مدل پیشآموخته با یک وظیفهٔ پاییندستی خاص، ریزتنظیم لازم است. در این فرایند میتوان به روشهای مختلف وظیفه را برای مدل توصیف کرد؛ از جمله استفاده از نام کوتاه وظیفه بهعنوان پیشوند دنبالهٔ ورودی یا ارائهٔ شرحی کاملتر از آن. چون دستور وظیفه به صورت متن بیان میشود و جزئی از ورودی است، دانش عمومی مربوط به درک دستورها میتواند در مرحلهٔ پیشآموزش و در خلال یادگیری درک زبان به دست آید. این ویژگی میتواند به یادگیری صفرنمونه کمک کند؛ به این معنا که مدل پیشآموخته ممکن است بتواند مسئلهٔ تازهای را حل کند که دستور آن را قبلاً ندیده است.
برای پیشآموزش رمزگذارها یا رمزگشاهای Transformer روشهای خودنظارتی قدرتمندی وجود دارد و بهکارگیری آنها برای مدلهای رمزگذار–رمزگشا نسبتاً مستقیم است. یکی از انتخابهای رایج، آموزش مدل رمزگذار–رمزگشا بهعنوان مدل زبانی است. برای نمونه، رمزگذار پیشوند یک دنباله را دریافت میکند و رمزگشا ادامهٔ آن را تولید میکند. این روش با مدلسازی زبانی علّی استاندارد تفاوت دارد؛ در مدل علّی کل دنباله از توکن نخست بهصورت خودبازگشتی تولید میشود، اما اینجا رمزگذار پیشوند را یکجا پردازش میکند و سپس رمزگشا توکنهای بعدی را به شیوهٔ مدلسازی زبانی علّی پیشبینی میکند. دقیقتر، این یک مسئلهٔ مدلسازی زبانی مبتنی بر پیشوند (Prefix Language Modeling) است: مدل زبانی با داشتن یک پیشوند بهعنوان بافت، دنبالهٔ پس از آن را پیشبینی میکند.
نمونه:
[CLS] The puppies are frolicking → ⟨s⟩ outside the house .
Prefix Subsequent Sequence
میتوان مدل رمزگذار–رمزگشا را مستقیماً با نمونههایی از این نوع آموزش داد. رمزگذار یاد میگیرد پیشوند را درک کند و رمزگشا یاد میگیرد بر پایهٔ این درک، ادامهٔ متن را بنویسد. برای پیشآموزش در مقیاس بزرگ نیز تولید شمار زیادی نمونه از متن بدونبرچسب ساده است.
برای آنکه مدلهای رمزگذار–رمزگشای پیشآموخته در وظایف چندزبانه و میانزبانی مانند ترجمهٔ ماشینی مؤثر باشند، باید با دادههای چندزبانه آموزش ببینند. معمولاً لازم است واژگان مدل شامل توکنهای همهٔ زبانهای موردنظر باشد. به این ترتیب، مدل میتواند بازنماییهای مشترک میان زبانهای گوناگون را یاد بگیرد و توانایی درک و تولید را در محیط چندزبانه و میانزبانی به دست آورد.
رویکرد دوم برای پیشآموزش مدلهای رمزگذار–رمزگشا، مدلسازی زبانی ماسکشده است. همانگونه که در بخش ۱.۲.۲ گفته شد، توکنهایی از دنباله بهطور تصادفی با نماد ماسک جایگزین میشوند و مدل برای پیشبینی آنها بر اساس کل دنبالهٔ ماسکشده آموزش میبیند.
برای نمونه، جملهٔ زیر را برای ماسککردن و بازسازی در نظر بگیرید:
The puppies are frolicking outside the house .
اگر دو توکن، مثلاً frolicking و the، ماسک شوند، ورودی و خروجی به سبک BERT چنین خواهند بود:
[CLS] The puppies are [MASK] outside [MASK] house .
→
⟨s⟩ frolicking the
در این نمایش، موقعیتهای ماسکنشده الزاماً نیاز به پیشبینی توکن ندارند. با تغییر درصد توکنهای ماسکشده، میتوان این روش را به سمت آموزش به سبک BERT یا آموزش به سبک مدلسازی زبان تعمیم داد [Song et al., 2019]. برای نمونه، اگر همهٔ توکنها ماسک شوند، مدل باید کل دنباله را تولید کند:
[CLS] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK] [MASK]
→
⟨s⟩ The puppies are frolicking outside the house .
در این حالت، رمزگشا عملاً مانند یک مدل زبانی آموزش میبیند.
در معماری رمزگذار–رمزگشا، میتوان رمزگذار را برای خواندن دنبالهٔ ماسکشده و رمزگشا را برای پیشبینی دنبالهٔ اصلی به کار برد. با این هدف، عملاً یک خودرمزگذار نویززدای (Denoising Autoencoder) داریم: رمزگذار ورودی خرابشده را به بازنمایی پنهان تبدیل میکند و رمزگشا از این بازنمایی، ورودی سالم را بازسازی میکند. نمونهٔ ورودی و خروجی:
[CLS] The puppies are [MASK] outside [MASK] house .
→
⟨s⟩ The puppies are frolicking outside the house .
با یادگیری نگاشت دنبالهٔ خرابشده به نسخهٔ سالم آن، مدل در سمت رمزگذار توانایی درک و در سمت رمزگشا توانایی تولید به دست میآورد. شکل ۱.۴ آموزش مدل رمزگذار–رمزگشا با هدفهای به سبک BERT و خودرمزگذاری نویززدای را نشان میدهد.
از آنجا که توکنها برای ماسککردن بهصورت تصادفی انتخاب میشوند، میتوان چند توکن متوالی را نیز ماسک کرد [Joshi et al., 2020]. نمونه:
[CLS] The puppies are [MASK] outside [MASK] [MASK] .
→
⟨s⟩ The puppies are frolicking outside the house .
روش دیگر، نمایش چند توکن ماسکشدهٔ متوالی بهصورت span است. مطابق Raffel و همکاران [2020]، از توکنهای نگهبان [X]، [Y] و [Z] استفاده میکنیم که هر کدام یک یا چند توکن ماسکشدهٔ متوالی را پوشش میدهند:
[CLS] The puppies are [X] outside [Y] .
→
⟨s⟩ [X] frolicking [Y] the house [Z]
شکل ۱.۴ — آموزش یک مدل رمزگذار–رمزگشا با روش مدلسازی زبانی ماسکشده به سبک BERT و روش خودرمزگذاری نویززدای. در هر دو روش، ورودی رمزگذار یک دنبالهٔ توکن خرابشده است که در آن بعضی توکنها ماسک و با [MASK] ــ یا به اختصار [M] ــ جایگزین شدهاند. رمزگشا این توکنها را پیشبینی میکند، اما روش محاسبه متفاوت است. در آموزش به سبک BERT، رمزگشا فقط برای توکنهای ماسکشده زیان محاسبه میکند و دیگر موقعیتها را میتوان همچون ماسک نادیده گرفت. در خودرمزگذاری نویززدای، رمزگشا همهٔ توکنهای دنباله را بهصورت خودبازگشتی پیشبینی میکند؛ در نتیجه، مانند مدلسازی زبانی استاندارد، زیان با جمعکردن زیان همهٔ توکنها به دست میآید.
ترجمهٔ برچسبهای شکل: Encoder = رمزگذار؛ Decoder = رمزگشا؛ Loss = زیان؛ Loss over the sequence = زیان روی کل دنباله.
ایده این است که دنبالهٔ خرابشده را بهصورت دنبالهای دارای جایگاههای خالی نمایش دهیم و وظیفهٔ آموزش این باشد که این جایگاهها با استفاده از بافت اطراف با توکنهای درست پر شوند. مزیت این روش آن است که دنبالههای مورد استفاده در آموزش کوتاهتر میشوند و آموزش کارآمدتر خواهد بود. مدلسازی زبانی ماسکشده چارچوبی بسیار عمومی برای آموزش مدلهای رمزگذار–رمزگشا فراهم میکند. با تنظیم پارامترهایی مانند درصد توکنهای ماسکشده و بیشینهٔ طول spanهای ماسکشده، نسخههای آموزشی مختلفی میتوان ساخت.
۱.۲.۳.۲ آموزش نویززدایی
اگر آموزش مدلهای رمزگذار–رمزگشا را مسئلهٔ آموزش خودرمزگذارهای نویززدای بدانیم، راههای متعددی برای خرابکردن ورودی و سپس بازسازی آن وجود خواهد داشت. برای نمونه، افزون بر ماسککردن تصادفی توکنها میتوان برخی توکنها را تغییر داد یا ترتیب آنها را جابهجا کرد.
فرض کنید مدل رمزگذار–رمزگشایی داریم که دنبالهٔ ورودی x را به دنبالهٔ خروجی y نگاشت میکند.
y = Decodeω(Encodeθ(x)) = Modelθ,ω(x) (1.15)
در این رابطه θ و ω بهترتیب پارامترهای رمزگذار و رمزگشا هستند. در مسئلهٔ خودرمزگذاری نویززدای، مقداری نویز به x اضافه میکنیم تا ورودی خرابشدهٔ xnoise به دست آید. با تغذیهٔ این ورودی به رمزگذار، انتظار داریم رمزگشا ورودی اصلی را بازتولید کند. هدف آموزش را میتوان چنین تعریف کرد:
(θ̂, ω̂) = arg maxθ,ω Loss(Modelθ,ω(xnoise), x) (1.16)
تابع Loss(Modelθ,ω(xnoise), x) اندازه میگیرد مدل تا چه اندازه ورودی اصلی x را از ورودی خرابشده بازسازی میکند. مطابق معمول میتوان از زیان آنتروپی متقاطع استفاده کرد.
پس از مشخصشدن معماری مدل و شیوهٔ آموزش، مسئلهٔ باقیمانده نحوهٔ خرابکردن ورودی است. Lewis و همکاران [2020] در مدل BART چند روش مختلف پیشنهاد میکنند:
- ماسککردن توکن (Token Masking). همان روش مدلسازی زبانی ماسکشده است؛ توکنهای دنبالهٔ ورودی بهطور تصادفی انتخاب و ماسک میشوند.
- حذف توکن (Token Deletion). مشابه ماسککردن است، اما بهجای جایگزینکردن توکن منتخب با [MASK]، توکن از دنباله حذف میشود. مقایسهٔ نمونهای:
Original (x):
The puppies are frolicking outside the house .
Token Masking (xnoise):
The puppies are [MASK] outside [MASK] house .
Token Deletion (xnoise):
The puppies are frolicking outside the house .
در متن اصلی، توکنهایی که زیر آنها خط کشیده شده است در دو نسخه بهترتیب ماسک یا حذف میشوند.
- ماسککردن span (Span Masking). spanهای بدون همپوشانی بهصورت تصادفی از دنباله نمونهگیری و هر span با [MASK] جایگزین میشود. span با طول صفر نیز در نظر گرفته میشود؛ در این حالت صرفاً یک [MASK] در موقعیتی از دنباله درج میشود. نمونه:
Original (x):
The [length-0 position] puppies are frolicking outside the house .
Span Masking (xnoise):
The [MASK] puppies are [MASK] house .
در این مثال span شامل frolicking outside the با یک [MASK] جایگزین شده است و ماسک دیگر یک span با طول صفر بین The و puppies را نشان میدهد. ماسککردن span چالش تازهای ایجاد میکند: مدل باید تشخیص دهد هر span چند توکن تولید میکند. این مسئله شباهت زیادی به مدلسازی باروری (Fertility Modeling) در ترجمهٔ ماشینی دارد [Brown et al., 1993].
اگر دنباله از چند جمله تشکیل شده باشد، میتوان روشهای خرابسازی دیگری نیز اعمال کرد. BART دو روش زیر را به کار میگیرد:
برای پیشآموزش میتوان چند روش خرابسازی را با هم به کار برد؛ برای مثال برای هر نمونهٔ آموزشی یکی از آنها را بهطور تصادفی انتخاب کرد. در عمل، نتیجهٔ پیشآموزش رمزگذار–رمزگشا بهشدت به روش خرابسازی ورودی وابسته است، بنابراین معمولاً لازم است هدفهای آموزشی مناسب با آزمایش دقیق انتخاب شوند.
۱.۲.۴ مقایسهٔ وظایف پیشآموزش
تا اینجا چندین وظیفهٔ پیشآموزش معرفی شد. از آنجا که یک هدف آموزشی واحد میتواند برای معماریهای مختلف استفاده شود ــ مثلاً مدلسازی زبانی ماسکشده هم در پیشآموزش فقطرمزگذار و هم در پیشآموزش رمزگذار–رمزگشا ــ دستهبندی وظایف صرفاً بر اساس معماری مدل ایدهآل نیست. بهتر است آنها را بر اساس هدف آموزشی خلاصه کنیم:
- مدلسازی زبان (Language Modeling). معمولاً به فرایند تولید خودبازگشتی دنباله اشاره دارد؛ در هر گام، توکن بعدی بر اساس بافت پیشین پیشبینی میشود.
- مدلسازی زبانی ماسکشده (Masked Language Modeling). عضوی از چارچوب عمومی mask-predict است؛ توکنهایی را بهطور تصادفی در یک دنباله ماسک میکند و سپس با استفاده از کل دنبالهٔ ماسکشده، همان توکنها را پیشبینی میکند.