خداحافظ توکنایزر برای همیشه و ممنون بابت اونهمه ماهی؟
داستان چگونگی ورودی دادن متن به شبکههای عمیق یکی از مهمترین گلوگاههای کار با داده متنی است. شروع این داستان به این نحو بود که ابتدا یک دیکشنری از تمامی کلمات به صورت سخت ایجاد میکردند و طبعا هر کلمهای که در این دیکشنری حاضر بود میتوانست به عنوان ویژگی ورودی به شبکه مورد استفاده قرار بگیرد (سوال امتیازی: عیب این روش چه بود؟ پاسخ: طبیعتا اگر کلمهای در این دیکشنری حاضر نبود مدل هنگام مواجهه با آن کلمه مجبور بود توکن پیشفرضی نظیر UNK را به جای آن کلمه نادیده بگذارد) پس از مدتی سر و کله زدن با ایدههای مختلف نظیر این که به جای کلمهها، کاراکترها را به شبکه ورودی بدهیم، سرانجام ایدههای زیرکلمهای (subword) ظهور پیدا کردند. این ایدهها مبتنی بر این بودند که کلمات به یک سری زیرکلمه شکسته شوند و مخلوطی از کلمات و زیرکلمات در دیکشنری اولیه ذخیره شوند. طبیعتا اگر مدل کلمهای را ببیند که قبلا در دیکشنری خود نداشته است، میتواند با استفاده از این زیرکلمهها آن کلمه نادیده را به کلمات حاضر در دیکشنری بشکند (به فرض مثال فرض کنید مدل کلمه یارانه در ورودی آمده و قبلا هم هیچ جا این کلمه را ندیده ولی دو کلمه «یار» و زیرکلمه «انه» را از قبل دارد بنابراین یارانه را به صورت یار + انه به خوردش میدهیم. اگر بیشتر علاقهمند شدید بفهمید این توکنایزرها اصلا چطوری ساخته میشوند میتوانید این پست [https://t.me/nlp_stuff/6] کهن کانال رو بخونید). با ظهور این مدلها عملکرد مدلهای عصبی در مسائل مختلف پردازش زبان بهبود قابل توجهی را تجربه کردند و همینک نیز شبکههای از پیش آموزش داده شده نظیر برت نیز از این توکنایزرهای subword استفاده میکنند. اما از آن جا که گل بی عیب خداست این توکنایزرها هم در چند جا میلنگد: یکی وقتی که میخواهند عملکرد بین زبانی را امتحان کنند و دیگری نیز وقتی که با دیتای نویژی نواجه میشوند (شما متوجه شدید من نویز و مواجه را اشتباه نوشتم ولی توکنایزرها و مدلهای بناشده بر آنها این را نمیفهمند)
بر این اساس دوستان گوگلی آمدند و ایده دادند که اصلا چه کاری است توکنایز کنیم بیایم به صورت بایت به بایت همان UTF-8ای که هست، رشتههای متنی را به مدل ورودی بدهیم. بر این اساس این دوستان مدل MT5 (که یک مدل چندزبانه بسیار خفنی است و هر مسالهای را به شکل یک مساله text-2-text نگاه میکند) را به عنوان مدل اولیه در نظر گرفته اند و سعی کرده این ایده بایت به بایت ورودی دادن متن به آن را روی آن اعمال کرده و یک مدل به اصطلاح tokenizer free به نام ByT5 را ارائه دهند. شیوه پیش آموزش مدل نیز مانند MT5 است به این صورت که اسپنهایی از محدوده متن ورودی را خراب کرده و از مدل خواستهاند تا آنها را بازسازی کند (برای فهم بهتر این مطلب بهتر است مقالههای T5 و MT5 را مطالعه بفرمایید). از دیگر ابتکار قابل توجه خالقان Byt5 نیز میتوان به عمیقتر کردن قسمت رمزگذار و متقابلا سبک کردن قسمت رمزگشای ترنسفورمر Byt5 اشاره کرد. در نهایت محصول پنج مدل ByT5 در سایزهای مختلف شده است که:
+ اولا در سایزهای با کمتر از یک میلیارد پارامتر نسبت به مدل مشابه نسخه MT5 عملکرد بهتری دارند.
+ ثانیا در مسائل تولید متن نسبت به مدلهای MT5 عملکرد بهتری دارند.
+ ثالثا در مسائل بین زبانی نسبت به مدلهای MT5 درخشانتر هستند.
+ و رابعا که شاید مهم ترین نکته باشد این است که نسبت به دیتاهای نویزی در ورودی خود ( همان داستان نویژی و نواجه و اینها ) محکمتر و کاراتر هستند.
لینک مقاله:
https://arxiv.org/abs/2105.13626
در ضمن این مدل در انواع سایزها بر روی هاگینگ فیس نیز قرار داده شده است و میتوانید اگر حوصله دارید، یه تن بزنید:
https://huggingface.co/google/byt5-base
پ.ن.۱. حیف نیست کانال ما رو به بقیه معرفی نمیکنید؟
پ.ن.۲. عکسهای ضمیمه شده چهارتاست. ورق بزنید و همه رو ببینید.
پ.ن.۳. تیتر هم سرچ کنید. چیز خوبیه.
#read
#paper
@nlp_stuff
Post #185
1.68K