# برت - رمزگذاری و رمزگذاری

ساخت وبلاگ

برای استفاده از یک مدل BERT از قبل آموزش دیده ، باید داده های ورودی را به یک قالب مناسب تبدیل کنیم تا بتوانیم هر جمله را به مدل از پیش آموزش داده شود تا تعبیه مربوطه را بدست آورد. در این مقاله چگونگی انجام این کار با استفاده از ماژول ها و توابع موجود در بسته بندی ترانسفورماتور Face (https://huggingface. co/transformers/index. html) ارائه شده است.

# نمایندگی ورودی در برت

بیایید ابتدا سعی کنیم درک کنیم که چگونه یک جمله ورودی باید در BERT نشان داده شود. تعبیه های برت با دو کار آموزشی آموزش داده می شوند:

  1. کار طبقه بندی: برای تعیین کدام دسته از جمله باید در آن قرار گیرد
  2. وظیفه پیش بینی جمله بعدی: برای تعیین اینکه آیا جمله دوم به طور طبیعی جمله اول را دنبال می کند یا خیر.

# نشانه های [CLS] و [SEP]

برای کار طبقه بندی ، یک بردار واحد که نماینده کل جمله ورودی است برای تغذیه به یک طبقه بندی کننده لازم است. در برت ، تصمیم این است که حالت پنهان اولین نشانه برای نشان دادن کل جمله گرفته شود. برای دستیابی به این هدف ، یک نشانه اضافی باید به صورت دستی به جمله ورودی اضافه شود. در اجرای اصلی ، توکن [CLS] برای این منظور انتخاب شده است.

در کار "پیش بینی جمله بعدی" ، ما به روشی نیاز داریم تا مدل را به آن اطلاع دهیم که جمله اول به کجا پایان می یابد و جمله دوم از کجا آغاز می شود. از این رو ، یکی دیگر از نشانه های مصنوعی ، [SEP] معرفی شده است. اگر ما سعی در آموزش یک طبقه بندی کننده داریم ، هر نمونه ورودی فقط یک جمله (یا یک ورودی متن واحد) را شامل می شود. در این حالت ، نشانه [SEP] به انتهای متن ورودی اضافه می شود.

به طور خلاصه ، برای پردازش داده های متن ورودی ، اولین کاری که ما باید انجام دهیم این است که در ابتدا نشانه [CLS] را اضافه کنیم و نشانه [SEP] در انتهای هر متن ورودی.

# توکن بالشتک [پد]

مدل BERT طول ثابت جمله را به عنوان ورودی دریافت می کند. معمولاً حداکثر طول یک جمله به داده هایی که ما روی آن کار می کنیم بستگی دارد. برای جملاتی که کوتاه تر از این حداکثر طول هستند ، ما باید برای ایجاد طول ، به جملات اضافه کنیم. در اجرای اصلی ، از Token [PAD] برای نشان دادن بالشتک ها به جمله استفاده می شود.

# تبدیل نشانه ها به IDS

هنگامی که مدل برت آموزش دید ، به هر نشانه شناسه منحصر به فرد داده شد. از این رو ، هنگامی که می خواهیم از یک مدل پیش از آموزش BERT استفاده کنیم ، ابتدا باید هر نشانه را در جمله ورودی به شناسه های منحصر به فرد مربوطه تبدیل کنیم.

نکته مهمی که باید در هنگام استفاده از یک مدل از قبل آموزش داده شود ، وجود دارد. از آنجا که این مدل بر روی یک جسد خاص از قبل آموزش داده شده است ، واژگان نیز ثابت شده است. به عبارت دیگر ، هنگامی که ما یک مدل از پیش آموزش داده شده را برای برخی از داده های دیگر اعمال می کنیم ، ممکن است برخی از نشانه های موجود در داده های جدید در واژگان ثابت مدل از پیش آموزش دیده نشوند. این معمولاً به عنوان مشکل خارج از لرزش (OOV) شناخته می شود.

برای نشان دادن نشانه هایی که در واژگان اصلی ظاهر نمی شوند ، طراحی شده است که آنها باید با یک نشانه خاص [UNK] جایگزین شوند ، که مخفف توکن ناشناخته است.

با این حال ، تبدیل همه نشانه های غیب به [UNK] اطلاعات زیادی را از داده های ورودی از بین می برد. از این رو ، BERT از یک الگوریتم Wordpiece استفاده می کند که یک کلمه را به چندین کلمه زیرزمینی می شکند ، به گونه ای که زیر کلمات متداول نیز می توانند توسط مدل نشان داده شوند.

به عنوان مثال ، کلمه از نظر شخصیتی در واژگان اصلی ظاهر نمی شود. با این وجود ، هنگامی که ما از Bert Tokenizer استفاده می کنیم تا یک جمله حاوی این کلمه را نشان دهد ، چیزی را که در زیر نشان داده شده است دریافت می کنیم:

>>> from transformers import BertTokenizer>>> tz = BertTokenizer.from_pretrained("bert-base-cased")>>> tz.convert_tokens_to_ids(["characteristically"]) [100]>>> sent = "He remains characteristically confident and optimistic.">>> tz.tokenize(sent) ['He', 'remains', 'characteristic', '##ally', 'confident', 'and', 'optimistic', '.']>>>tz. convert_tokens_to_ids (tz. tokenize (ارسال شده)) [1124 ، 2606 ، 7987 ، 2716 ، 9588 ، 1105 ، 24876 ، 119]

ما می توانیم ببینیم که کلمه از نظر شخصیتی به ID 100 تبدیل می شود ، که شناسه توکن [UNK] است ، اگر عملکرد توکن سازی مدل BERT را اعمال نکنیم.

از طرف دیگر ، عملکرد توکن سازی BERT ابتدا این کلمه را به دو زیر زیر وهله می شکند ، یعنی مشخصه و ## متحد ، جایی که نشانه اول یک کلمه رایج تر (پیشوند) در یک جسد است ، و نشانه دوم پیشوند استتوسط دو هش ## برای نشان دادن این که این پسوند به دنبال برخی از زیر کلمات دیگر است.

پس از این مرحله نشانه گذاری ، همه نشانه ها را می توان به شناسه های مربوطه تبدیل کرد.

# خلاصه

به طور خلاصه ، یک جمله ورودی برای یک کار طبقه بندی قبل از تغذیه در مدل BERT ، مراحل زیر را طی می کند.

  1. نشانه گذاری: تجزیه این جمله به نشانه ها
  2. اضافه کردن نشانه [CLS] در ابتدای جمله
  3. اضافه کردن نشانه [SEP] در انتهای جمله
  4. بالشتک جمله را با نشانه های [پد] به گونه ای که طول کل برابر با حداکثر طول باشد
  5. تبدیل هر نشانه به شناسه های مربوطه در مدل

نمونه ای از تهیه یک جمله برای ورودی به مدل BERT در زیر نشان داده شده است. برای سادگی ، فرض می کنیم حداکثر طول در مثال زیر 10 باشد (در حالی که در مدل اصلی تنظیم شده است 512).

# جمله اصلی بیایید یادگیری عمیق را یاد بگیریم!# جمله توکن ["اجازه" ، "" "،" S "،" یادگیری "،" عمیق "،" یادگیری "،"!] # اضافه کردن [CLS] و [SEP] نشانه ها ['[[CLS] ،'بگذارید "،" "" ، "S" ، "یادگیری" ، "عمیق" ، "یادگیری" ، "!" ، "[SEP]] # padding ['[cls] ،" let "،" "" "'s' ، 'Lea' ، 'Deep' ، 'Leaing' ، '!' ، '[Sep]' ، '[Pad]] # تبدیل به IDS [101 ، 2421 ، 112 ، 188 ، 3858 ، 1996 ، 3776، 106 ، 102 ، 0]

# توکن سازی با استفاده از بسته ترانسفورماتور

در حالی که چندین مرحله برای تبدیل یک جمله ورودی به بازنمایی مناسب وجود دارد ، ما می توانیم از توابع ارائه شده توسط بسته ترانسفورماتور استفاده کنیم تا به ما در انجام رمزگذاری و تحول به راحتی کمک کنیم. به طور خاص ، ما می توانیم از عملکرد ENCODE_PLUS استفاده کنیم ، که موارد زیر را به صورت یک انجام می دهد:

  1. جمله ورودی را نشان دهید
  2. نشانه های [CLS] و [SEP] را اضافه کنید.
  3. پد یا کوتاه کردن جمله را به حداکثر طول مجاز
  4. نشانه ها را در پد IDS مربوطه رمزگذاری کنید یا تمام جملات را به همان طول کوتاه کنید.
  5. ماسک های توجه را ایجاد کنید که به صراحت نشانه های واقعی را از نشانه های [PAD] متمایز می کند

کدهای زیر نشان می دهد که چگونه می توان این کار را انجام داد.

# وارد کننده Tokenizer از بسته ترانسفورماتور از ترانسفورماتورها واردات BertTokenizer # بار توکینر مدل پیش ساخته "Bert-Base-Cased" # مراجعه کنید به https://huggingface. co/transformers/pretrained_models. html برای سایر مدل ها tz = bertokenizer. from_pretraise ("" "Bert-base-based ") # Senetence که رمزگذاری می شود =" بیایید یادگیری عمیق را یاد بگیریم! "# جمله رمزگذاری شده = tz. encode_plus (متن = ارسال شده ، # جمله رمزگذاری شده add_special_tokens = true ، # اضافه کردن [cls] و [sep] max_l طول = 64 ، # حداکثر طول یک جمله pad_to_max_length = true ، # اضافه کردن [اضافه کردن [PAD] S Retu_Attion_Mask = درست ، # ماسک توجه Retu_Tensors = 'PT' را ایجاد کنید ، # از عملکرد بخواهید که تنش های Pytorch را برگردانید) # دریافت شناسه های ورودی و ماسک توجه در فرمت Tensor input_ids = رمزگذاری شده ['input_ids'] ATTN_MASK = کدگذاری شده ["توجه_انه"]

پس از اجرای کدهای بالا ، ما محتوای زیر را برای متغیرهای input_ids و attn_mask خواهیم داشت:

>>> input-ids tensor([[ 101, 2421, 112, 188, 3858, 1996, 3776, 106, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])>>>>>>Tensor ATTN_MASK ([[1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0]])

"ماسک توجه" به مدل می گوید که نشانه ها باید در آن شرکت کنند و کدام (نشانه های [پد]) نباید (برای جزئیات بیشتر به مستندات مراجعه کنید). هنگامی که ورودی را به مدل BERT تغذیه می کنیم ، لازم خواهد بود.

# ارجاع

  • Devlin و همکاران. 2018. BERT: پیش از ترانسفورماتورهای دو طرفه عمیق برای درک زبان
  • BERT - مستندات ترانسفورماتور: https://huggingface. co/transformers/model_doc/bert. html
کتاب آموزش بورس...
ما را در سایت کتاب آموزش بورس دنبال می کنید

برچسب : نویسنده : محمود استادمحمد بازدید : 31 تاريخ : يکشنبه 1 مرداد 1402 ساعت: 13:00