آموزشترنسفورمرها

درس ۸ از ۶۲، هوش مصنوعی، حدود ۱۰ دقیقه خواندن

رمزگذار و رمزگشا: دنباله به دنباله (seq2seq)

جواب کوتاه

seq2seq، یعنی «دنباله به دنباله»، روشیه که سال ۲۰۱۴ برای ترجمه با شبکه‌ی عصبی جا افتاد. دو تا شبکه‌ی LSTM داره: «رمزگذار» جمله‌ی ورودی رو کلمه‌به‌کلمه می‌خونه و توی یه بردار با اندازه‌ی ثابت خلاصه می‌کنه؛ «رمزگشا» از روی همون بردار، ترجمه رو کلمه‌به‌کلمه می‌سازه و هر کلمه‌ای که می‌سازه، ورودی قدم بعدش می‌شه، تا وقتی که نشونه‌ی «پایان» رو بنویسه. یه پژوهش ۲۰۱۴ با همین روش، روی ترجمه‌ی انگلیسی به فرانسوی، از یه سیستم ترجمه‌ی آماری قدیمی بهتر شد. مرزش هم همون بردار ثابته: کل جمله، هر چقدر بلند، باید توی همون جا بشه.

یعنی چی

یه شبکه گوش می‌ده، یه شبکه حرف می‌زنه، و وسطشون یه یادداشت کوچیکه.

مثلا یه مترجم رو فرض کنید که اول کل جمله رو گوش می‌ده، یه یادداشت کوچیک برمی‌داره، بعد از روی همون یادداشت، ترجمه رو کلمه‌به‌کلمه می‌گه. توی درس دنباله چیست دیدیم شبکه‌های معمولی نمی‌تونستن دنباله رو به دنباله تبدیل کنن. این روش راه‌حلش بود: دو تا LSTM، یکی برای گوش دادن، یکی برای حرف زدن. اسمش هم از همینه: دنباله به دنباله، یا seq2seq.

دو شبکه و یه پل

رمزگذار جمله‌ی «من نون خریدم» رو کلمه‌به‌کلمه می‌خونه، درست مثل شبکه‌ی بازگشتی. حافظه‌ای که آخر کار براش می‌مونه، می‌شه پل: یه بردار با اندازه‌ی ثابت که قراره کل معنی جمله توش باشه. رمزگشا این بردار رو به‌عنوان حافظه‌ی اولش می‌گیره و شروع می‌کنه به نوشتن: اول «I»، بعد همون «I» رو به‌عنوان ورودی می‌گیره و «bought» رو می‌نویسه، و همین‌طور. یه پژوهش دیگه هم همون سال همین ایده رو با اسم «رمزگذار و رمزگشای بازگشتی» داد؛ هر دو شبکه با هم آموزش می‌بینن.

نشونه‌ی پایان

یه سوال ساده: رمزگشا از کجا بدونه کی تموم کنه؟ ترجمه‌ی یه جمله‌ی سه کلمه‌ای ممکنه پنج کلمه باشه. پژوهش ۲۰۱۴ یه کار ساده کرد: آخر هر جمله یه نشونه‌ی ویژه گذاشت، «پایان جمله». رمزگذار وقتی این نشونه رو می‌خونه، می‌فهمه ورودی تموم شده. رمزگشا هم یاد می‌گیره هر وقت ترجمه کامل شد، همین نشونه رو بنویسه؛ و همون‌جا می‌ایسته. این‌طوری هر طولی ممکنه، هم برای ورودی و هم برای خروجی. همون توکن‌های ویژهای که توی مسیر مدل‌های زبانی دیدیم.

پژوهش ۲۰۱۴

پژوهش ۲۰۱۴ با ۱۲ میلیون جمله‌ی انگلیسی و فرانسوی کار کرد. مدلش ۴ لایه LSTM داشت، هر لایه ۱۰۰۰ خونه، روی هم ۳۸۴ میلیون پارامتر؛ و هر جمله رو با ۸۰۰۰ عدد نشون می‌داد. آموزشش حدود ۱۰ روز روی یه دستگاه ۸ کارتی طول کشید، و برای جلوگیری از انفجار، همون بریدن گرادیان رو به کار برد.

نتیجه با همون نمره‌ی BLEU که توی درس مقاله‌ی ۲۰۱۷ دیدیم: ترکیب ۵ مدل LSTM به ۳۴٫۸ رسید، در حالی که یه سیستم ترجمه‌ی آماری قدیمی ۳۳٫۳ می‌گرفت. وقتی از LSTM خواستن ۱۰۰۰ پیشنهاد همون سیستم قدیمی رو دوباره رتبه‌بندی کنه، به ۳۶٫۵ رسید. یعنی یه شبکه‌ی عصبی، با کمترین فرض درباره‌ی ساختار جمله، از یه سیستم آماری جاافتاده جلو زد.

نقشه‌ی پل‌ها

اون بردار پل واقعا معنی جمله رو نگه می‌داره؟ پژوهش ۲۰۱۴ یه راه ساده برای دیدنش داشت.

بردار پل چند جمله رو با یه روش ساده، از هزاران عدد به دو عدد، کوچیک کردن تا بشه روی یه صفحه کشیدشون. جمله‌هایی مثل «علی مریم رو تحسین می‌کنه» و «علی به مریم احترام می‌ذاره» کنار هم افتادن، و نسخه‌های برعکسشون، «مریم علی رو تحسین می‌کنه» و بقیه، یه جای دیگه. یعنی پل به ترتیب کلمه‌ها حساسه، همون چیزی که توی درس دنباله گفتیم شمردن کلمه‌ها نمی‌بینه. نویسنده‌ها یه چیز جالب‌تر هم دیدن: جمله‌ای که از معلوم به مجهول برده بشه، مثل «یه کارت توسط من بهش داده شد»، کنار همون جمله‌ی معلومش می‌افتاد. یعنی پل بیشتر معنی رو نگه می‌داشت تا شکل ظاهری رو. جمله‌های نقاشی ما فارسی‌شده‌ی جمله‌های انگلیسی همون شکله.

برعکس کردن

جالب‌ترین ترفند این پژوهش همونیه که توی درس دنباله اشاره کردیم: ترتیب کلمه‌های جمله‌ی ورودی رو برعکس کردن، ولی خروجی رو نه. چرا؟ چون کلمه‌ی اول ورودی معمولا به کلمه‌ی اول خروجی ربط داره. وقتی ورودی برعکس بشه، کلمه‌ی اولش آخر از همه خونده می‌شه، درست قبل از اینکه رمزگشا شروع کنه؛ پس این دو تا به هم نزدیک می‌شن. نتیجه‌ش بزرگ بود: BLEU از ۲۵٫۹ به ۳۰٫۶ رسید و سرگشتگی از ۵٫۸ به ۴٫۷. خود نویسنده‌ها گفتن توضیح کاملش رو ندارن، ولی فکر می‌کنن دلیلش همین ربط‌های کوتاه‌تره.

جستجوی پرتو

رمزگشا هر قدم برای کلمه‌ی بعد یه احتمال می‌ده. ساده‌ترین راه اینه که هر بار محتمل‌ترین رو برداره. ولی شاید یه انتخاب کمی ضعیف‌تر الان، به یه ترجمه‌ی بهتر در کل برسه.

جستجوی پرتو یعنی هر قدم، به‌جای یه ترجمه‌ی نیمه‌کاره، چند تای محتمل‌تر رو با هم نگه داری؛ مثلا ۲ تا. هر کدوم رو یه کلمه جلو می‌بری، و دوباره فقط ۲ تای بهتر رو نگه می‌داری. هر کدوم که به نشونه‌ی پایان رسید، کنار گذاشته می‌شه به‌عنوان یه ترجمه‌ی کامل. پژوهش ۲۰۱۴ دید حتی با پرتوی ۱، یعنی فقط محتمل‌ترین، مدل خوب کار می‌کرد، و پرتوی ۲ بیشتر فایده‌ی این روش رو می‌داد.

همین قالب، کارهای دیگه

«یه دنباله بگیر، یه دنباله‌ی دیگه بده» فقط ترجمه نیست.

هر جفتی که ورودی و خروجیش دنباله باشه، توی همین قالب جا می‌شه: یه متن بلند و خلاصه‌ش، یه سوال و جوابش، یا یه پیام و جوابی که توی گفتگو می‌دن. یه پژوهش ۲۰۱۵ همین رو برای گفتگو امتحان کرد: یه بار روی گفتگوهای پشتیبانی فنی و یه بار روی زیرنویس فیلم‌ها. مدل روی پشتیبانی فنی گاهی تونست با گفتگو یه مشکل رو حل کنه، و روی زیرنویس‌ها حتی کمی استدلال ساده نشون داد. ولی مشکل اصلیش رو هم صاف نوشتن: یکدست نبود؛ یه بار یه چیزی می‌گفت و چند جواب بعد برعکسش. این یکی از مشکل‌هایی بود که چت‌بات‌های امروزی با دستیار شدن و مدل‌های خیلی بزرگ‌تر کمش کردن.

چند نکته

  • رمزگذار گوش می‌ده، رمزگشا حرف می‌زنه.
  • نشونه‌ی پایان، طول رو آزاد می‌کنه.
  • برعکس کردن ورودی، ربط‌ها رو کوتاه کرد.
  • همه‌چی از یه بردار ثابت رد می‌شه. همین مرزشه.

درس بعد همین مرز رو از نزدیک می‌بینه: چی می‌شه وقتی یه جمله‌ی خیلی بلند باید توی یه بردار کوچیک جا بشه؟ گلوگاه یک بردار.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • رمزگذار گوش می‌ده، رمزگشا حرف می‌زنه.
  • وسطشون: یه بردار با اندازه‌ی ثابت.
  • نشونه‌ی پایان، طول رو آزاد می‌کنه.
  • برعکس کردن ورودی، کمک بزرگ.
  • جستجوی پرتو: چند ترجمه با هم.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس

درس بعد