T5 در اندازه های مختلف وجود دارد:
بر اساس مدل اصلی T5 ، Google برخی از کارهای پیگیری را منتشر کرده است:
- T5V1. 1: T5V1. 1 نسخه بهبود یافته T5 با برخی از ترفندهای معماری است و فقط بدون مخلوط کردن در کارهای نظارت شده در C4 از قبل آموزش داده می شود. به مستندات T5V1. 1 مراجعه کنید که در اینجا می توانید پیدا کنید.
- MT5: MT5 یک مدل T5 چند زبانه است. این برنامه در MC4 Corpus از قبل آموزش دیده است ، که شامل 101 زبان است. به مستندات MT5 مراجعه کنید که می توانید در اینجا پیدا کنید.
- BYT5: BYT5 یک مدل T5 است که از قبل در توالی های بایت آموزش داده شده است تا توالی توکن زیر کلمه جمله. به مستندات BYT5 مراجعه کنید که می توانید در اینجا پیدا کنید.
- UL2: UL2 یک مدل T5 مانند مدل است که بر روی اهداف مختلف denoising پیش بینی شده است
- FLAN-T5: Flan یک روش پیش تنظیم است که مبتنی بر درخواست است. FLAN-T5 مدل های T5 هستند که در مجموعه مجموعه داده های Flan آموزش داده شده اند که عبارتند از: TaskMaster2 ، DJAYM7/WIKI_DIALOG ، DEEPMIND/CODE_CONTESTS ، LAMBADA ، GSM8K ، AQUA_RAT ، ESNLI ، QUASC و QED.
- FLAN-UL2: مدل UL2 با استفاده از مجموعه تنظیم سریع "Flan" تنظیم شده است.
تمام پاسگاه ها را می توان در هاب یافت.
این مدل توسط Thomwolf کمک کرده است. کد اصلی را می توان در اینجا یافت.
T5 یک مدل رمزگذار است و تمام مشکلات NLP را به یک قالب متن به متن تبدیل می کند. با استفاده از مجبور معلم آموزش داده می شود. این بدان معنی است که برای آموزش ، ما همیشه به یک دنباله ورودی و یک توالی هدف مربوطه نیاز داریم. دنباله ورودی با استفاده از input_ids به مدل تغذیه می شود. دنباله هدف به سمت راست منتقل می شود ، یعنی با استفاده از یک توکن دنباله شروع شده و با استفاده از رمزگشایی با استفاده از decoder_input_ids به رمزگشایی تغذیه می شود. در سبک معلمان ، دنباله هدف پس از آن توسط نشانه EOS ضمیمه می شود و با برچسب ها مطابقت دارد. از این طریق Pad Token به عنوان نشانه دنباله شروع استفاده می شود. T5 را می توان آموزش داد / تنظیم کرد و هم به صورت نظارتی و بدون نظارت.
می توان از T5ForConditionalGeneration (یا نوع tensorflow/کتان) استفاده کرد ، که شامل سر مدل سازی زبان در بالای رمزگذار است.
در این تنظیم ، دهانه های دنباله ورودی توسط به اصطلاح نشانه های Sentinel (a. k. a نشانه های ماسک منحصر به فرد) پوشانده می شوند و دنباله خروجی به عنوان یک جمع بندی از همان نشانه های سنتینل و نشانه های ماسک واقعی شکل می گیرد. هر نشانه Sentinel نشان دهنده یک ماسک منحصر به فرد برای این جمله است و باید از آن شروع کند ، ... تا. به عنوان یک پیش فرض ، 100 نشانه Sentinel در T5Tokenizer در دسترس است.
به عنوان مثال ، جمله "سگ ناز در پارک می رود" با ماسک هایی که روی "سگ ناز" قرار داده شده و "The" باید به شرح زیر پردازش شود:
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>>input_ids = tokenizer ("پیاده روی در پارک"، Retu_Tensors ="PT") . put_ids>>>برچسب ها = tokenizer ("سگ ناز"، Retu_Tensors ="PT") . put_ids>>> # عملکرد رو به جلو به طور خودکار decoder_input_ids را ایجاد می کند >>>از دست دادن = مدل (input_ids = input_ids ، برچسب ها = برچسب) . loss>>>Loss. Item ()3. 7837 اگر علاقه مند به T5 از T5 در یک قسمت جدید هستید ، اسکریپت RUN_T5_MLM_FLAX. PY را در فهرست نمونه ها بررسی کنید.
در این تنظیم ، دنباله ورودی و دنباله خروجی یک نقشه برداری ورودی به توالی به توالی است. فرض کنید که ما می خواهیم به عنوان مثال مدل را برای ترجمه تنظیم کنیم و یک مثال آموزشی داریم: دنباله ورودی "خانه فوق العاده است". و توالی خروجی "Das haus ist wunderbar." ، سپس آنها باید برای مدل به شرح زیر آماده شوند:
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>>input_ids = tokenizer ("ترجمه انگلیسی به آلمانی: خانه فوق العاده است."، Retu_Tensors ="PT") . put_ids>>>برچسب ها = tokenizer ("Das Haus ist Wunderbar."، Retu_Tensors ="PT") . put_ids>>> # عملکرد رو به جلو به طور خودکار decoder_input_ids را ایجاد می کند >>>از دست دادن = مدل (input_ids = input_ids ، برچسب ها = برچسب) . loss>>>Loss. Item ()0. 2542 همانطور که مشاهده می کنید ، فقط 2 ورودی برای مدل برای محاسبه ضرر مورد نیاز است: input_ids (که ورودی_یدهای دنباله ورودی رمزگذاری شده هستند) و برچسب ها (که input_ids دنباله هدف رمزگذاری شده هستند). این مدل به طور خودکار Decoder_input_ids را بر اساس برچسب ها ایجاد می کند ، با تغییر یک موقعیت به سمت راست و آماده سازی پیکربندی. decoder_start_token_id ، که برای T5 برابر با 0 است (یعنی شناسه نشانه پد). همچنین پیشوند کار را یادداشت کنید: ما دنباله ورودی را با "ترجمه انگلیسی به آلمانی:" قبل از رمزگذاری آن پیش می بریم. این به بهبود عملکرد کمک می کند ، زیرا از این پیشوند کار در طول قبل از آموزش T5 استفاده شده است.
با این حال ، مثال بالا فقط یک نمونه آموزشی واحد را نشان می دهد. در عمل ، یکی مدلهای یادگیری عمیق را در دسته ها آموزش می دهد. این مستلزم این است که ما باید نمونه های مشابه را به همان طول کاهش دهیم. برای مدل های رمزگذار رمزگذار ، یک نفر به طور معمول یک طول max_source_l طول و max_target_l طول را تعریف می کند ، که حداکثر طول توالی های ورودی و خروجی را به ترتیب تعیین می کند (در غیر این صورت آنها کوتاه می شوند). این بسته به کار باید با دقت تنظیم شود.
علاوه بر این ، ما باید اطمینان حاصل کنیم که با استفاده از عملکرد ضرر ، شناسه های توکن برچسب ها در نظر گرفته نمی شوند. در Pytorch و Tensorflow ، این کار را می توان با تعویض آنها ب ا-100 انجام داد ، که Ignore_Index Crossentropyloss است. در کتان ، می توان از decoder_attention_mask برای نادیده گرفتن نشانه های خالی از دست دادن استفاده کرد (برای جزئیات بیشتر به اسکریپت خلاصه کتان مراجعه کنید). ما همچنین به عنوان ورودی اضافی به مدل ، توجه_مس را منتقل می کنیم ، که اطمینان می دهد که نشانه های ورودی ورودی ها نادیده گرفته می شوند. مثال کد زیر همه این موارد را نشان می دهد.
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>> وارد كردنمشعل>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>> # 2 hyperparameters زیر خاص کار هستند >>>max_source_l طول =512 >>>max_target_l طول =128 >>> # فرض کنید ما 2 نمونه آموزش زیر را داریم: >>>input_equence_1 ="به NYC خوش آمدید" >>>output_equence_1 ="bienvenue à nyc" >>>input_equence_2 ="بغل کردن یک شرکت است" >>>output_equence_2 ="HUGGINGFACE EST UNE EXPRISE" >>> # ورودی ها را رمزگذاری کنید >>>task_prefix ="ترجمه انگلیسی به فرانسوی:" >>>input_equence = [input_equence_1 ، input_equence_2]>>>رمزگذاری = tokenizer (.[Task_Prefix + دنبالهبرایتوالیininput_equeences] ،.بالشتک ="طولانی ترین", .max_l طول = max_source_l طول ،.کوتاه شدن =درست است، واقعی, .Retu_Tensors ="PT", . ) >>>input_ids ، توجه_مس = رمزگذاری. input_ids ، رمزگذاری. ATTENTION_MASK>>> # اهداف را رمزگذاری کنید >>>Target_encoding = tokenizer (.[output_equence_1 ، output_equence_2] ،.بالشتک ="طولانی ترین", .max_l طول = max_target_l طول ،.کوتاه شدن =درست است، واقعی, .Retu_Tensors ="PT", . ) >>>برچسب ها = target_encoding. input_ids>>> # شناسه های بالشتک برچسب های برچسب ها را ب ا-100 جایگزین کنید ، بنابراین با از دست دادن نادیده گرفته می شود >>>برچسب ها [برچسب ها == tokenizer. pad_token_id] = -100 >>> # پاس رو به جلو >>>از دست دادن = مدل (input_ids = input_ids ، kind_mask = توجه_مسک ، برچسب ها = برچسب) . loss>>>Loss. Item ()0. 188 نکات آموزشی اضافی:
- مدل های T5 هنگام استفاده از بهینه ساز ADAMW ، به نرخ یادگیری کمی بالاتر از پیش فرض تنظیم شده در مربی نیاز دارند. به طور معمول ، 1E-4 و 3E-4 برای اکثر مشکلات خوب کار می کنند (طبقه بندی ، خلاصه ، ترجمه ، پاسخ به سؤال ، تولید سؤال). توجه داشته باشید که T5 با استفاده از بهینه ساز Adafactor از قبل آموزش دیده بود.
با توجه به این پست تالار گفتمان ، پیشوندهای کار مهم است که (1) انجام آموزش چند کاره (2) وظیفه شما مشابه یا مربوط به یکی از کارهای نظارت شده مورد استفاده در مخلوط قبل از آموزش T5 است (به پیوست D مقاله برای کار مراجعه کنیدپیشوندهای مورد استفاده).
اگر آموزش TPU را آموزش دهید ، توصیه می شود تمام نمونه های مجموعه داده را به همان طول بچسبانید یا از PAD_TO_MULTIPLE_OF استفاده کنید تا تعداد کمی از اندازه سطل از پیش تعریف شده برای متناسب با همه نمونه ها داشته باشید. TPU به عنوان باعث ایجاد مجدد برای هر شکل دسته ای می شود که در طول تمرین با آن روبرو می شود و در نتیجه به طور قابل توجهی سرعت را کاهش می دهد. فقط بالشتک تا طولانی ترین نمونه در یک دسته) منجر به آموزش بسیار کند در TPU می شود.
در زمان استنتاج ، استفاده از تولید () توصیه می شود. این روش از رمزگذاری ورودی و تغذیه حالتهای پنهان رمزگذاری شده از طریق لایه های توجه متقابل به رمزگشایی مراقبت می کند و به طور خودکار با استفاده مجدد از خروجی رمزگذار تولید می کند. این پست وبلاگ را بررسی کنید تا تمام جزئیات مربوط به تولید متن با ترانسفورماتورها را بدانید. همچنین این پست وبلاگ وجود دارد که توضیح می دهد که چگونه تولید به طور کلی در مدل های رمزگذار کار می کند.
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>>input_ids = tokenizer ("ترجمه انگلیسی به آلمانی: خانه فوق العاده است."، Retu_Tensors ="PT") . put_ids>>>outputs = model. generate (input_ids)>>> چاپ(tokenizer. decode (خروجی ها [0] ، skip_special_tokens =درست است، واقعی)) das haus ist wunderbar.توجه داشته باشید که T5 از pad_token_id به عنوان decoder_start_token_id استفاده می کند ، بنابراین هنگام انجام نسل بدون استفاده از تولید () ، حتماً آن را با pad_token_id شروع کنید.
مثال بالا فقط یک مثال واحد را نشان می دهد. شما همچنین می توانید استنباط Batched را انجام دهید ، مانند این:
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>>task_prefix ="ترجمه انگلیسی به آلمانی:" >>> # از جملات مختلف برای آزمایش دسته بندی استفاده کنید >>>جملات = ["خانه فوق العاده است.", "من دوست دارم در NYC کار کنم."] >>>ورودی = tokenizer ([task_prefix + جملهبرایجملهinجملات] ، Retu_Tensors ="PT"، بالشتک =درست است، واقعی) >>>output_مان = model. generate (.input_ids = ورودی ["input_ids"], .توجه_ماس = ورودی ها ["توجه_مسکی"], .do_sample =دروغ, # نمونه برداری را غیرفعال کنید تا در صورت تأثیر بر روی خروجی ، آزمایش کنید . ) >>> چاپ.درست است، واقعی)) ["das haus ist wunderbar.", "ich arbeite gee در NYC."]از آنجا که T5 با هدف Denoising Span Mask آموزش دیده است ، می توان از آن برای پیش بینی نشانه های Sentinel (نقاب دار) در هنگام استنتاج استفاده کرد. سپس نشانه های پیش بینی شده بین نشانه های Sentinel قرار می گیرند.
کپی شده
>>> از جانبمبدل هاوارد كردنt5tokenizer ، t5forconditionalgeneration>>>tokenizer = t5tokenizer. from_pretrained ("T5-small") >>>مدل = t5forConditionalGeneration. from_pretrained ("T5-small") >>>input_ids = tokenizer ("پیاده روی در پارک"، Retu_Tensors ="PT") . put_ids>>>Sequence_ids = model. generate (input_ids)>>>توالی = tokenizer. batch_decode (دنباله_یدها)>>>توالی ها [پارک پارک را ارائه می دهد.']اگر می خواهید یک تمرین سریعتر و عملکرد استنتاج داشته باشید ، Apex را نصب کنید و سپس مدل به طور خودکار از Apex. Normalization. FuseRmsNorm به جای T5Layeorm استفاده می کند. اولی از هسته ذوب شده بهینه شده استفاده می کند که چندین برابر سریعتر از دومی است.
لیستی از منابع رسمی بغل و جامعه (که توسط فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : احمد قانع پور
بازدید : 42
تاريخ : شنبه
11 شهريور
1402 ساعت: 15:11