آشنایی با نحوه تبدیل نشانه ها

ساخت وبلاگ

قبل از شروع ، اطمینان حاصل کنید که تمام کتابخانه های لازم را نصب کرده اید:

کپی شده

مجموعه داده های ترانسفورماتور نصب PIP Seqeval را ارزیابی کنید

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

کپی شده

>>> از جانبHUGGINGFACE_HUBوارد كردنnotebook_login>>>notebook_login ()

WNUT 17 DATASET LOAD

با بارگیری مجموعه داده WNUT 17 از کتابخانه مجموعه داده ها شروع کنید:

کپی شده

>>> از جانبمجموعه داده هاوارد كردنload_dataset>>>wnut = load_dataset ("wnut_17")

سپس به یک مثال نگاهی بیندازید:

کپی شده

>>>wnut ["قطار - تعلیم دادن"][0] 'شناسه': '0', 'ner_tags': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0], "توکن": ['paulwalk', 'آی تی', "S", '', 'چشم انداز', 'از جانب', 'جایی که', 'من', "" م ", 'زندگي كردن', 'برای', "دو", "هفته ها", '.', "امپراتوری", 'حالت', 'ساختمان', '=', "ESB", '.', 'بسیار', "بد", 'طوفان', 'اینجا', 'آخر', "عصر", '.']>

هر شماره در ner_tags یک موجودیت را نشان می دهد. اعداد را به نامهای برچسب خود تبدیل کنید تا دریابید که موجودات چیست:

کپی شده

>>>label_list = wnut ["قطار - تعلیم دادن"]. امکانات[f "ner_tags"] . Feature. Names>>>label_list ["ای", "B-Corporation", "I-Corporation", "b-creative-work", "من-کار-کار", "گروه B", "من گروه", "B-location", "من-مکان", "B-Person", "I-Person", "B-Product", "I-Product", ]

نامه ای که پیشوند هر ner_tag را نشان می دهد ، موقعیت توکن موجودیت را نشان می دهد:

  • B- نشانگر آغاز یک نهاد است.
  • من نشان می دهد که یک نشانه در همان موجودیت موجود است (به عنوان مثال ، نشانه دولت بخشی از موجودی مانند ساختمان امپراتوری ایالت است).
  • 0 نشان می دهد که نشانه با هیچ موجودی مطابقت ندارد.

مرحله بعدی بارگذاری یک توکین کننده Distilbert برای پیشبرد قسمت Tokens است:

کپی شده

>>> از جانبمبدل هاوارد كردنخودکشی ساز>>>tokenizer = autoTokenizer. from_pretrained ("Distilbert-base-uns")

همانطور که در قسمت Tokens Tokens در بالا مشاهده کردید ، به نظر می رسد که ورودی قبلاً نشانه گذاری شده است. اما ورودی در واقع هنوز نشانه گذاری نشده است و شما نیاز به تنظیم IS_SPLIT_INTO_WORDS = صحیح برای نشانه گذاری کلمات در زیر کلمات. مثلا:

کپی شده

>>>مثال = wnut ["قطار - تعلیم دادن"][0] >>>tokenized_input = tokenizer (مثال ["توکن ها"] ، is_split_into_words =درست است، واقعی) >>>tokens = tokenizer. convert_ids_to_tokens (tokenized_input ["input_ids"]) >>>نشانه ها ['[CLS]', '@', "پل", '##راه رفتن', 'آی تی', "'", 's', '', 'چشم انداز', 'از جانب', 'جایی که', 'من', "'", 'م', 'زندگي كردن', 'برای', "دو", "هفته ها", '.', "امپراتوری", 'حالت', 'ساختمان', '=', 'es', '## B', '.', 'بسیار', "بد", 'طوفان', 'اینجا', 'آخر', "عصر", '.', '[سپتامبر]']

با این حال ، این برخی از نشانه های خاص [CLS] و [SEP] را اضافه می کند و نشانه گذاری زیر کلمه باعث عدم تطابق بین ورودی و برچسب ها می شود. یک کلمه واحد مربوط به یک برچسب واحد اکنون ممکن است به دو زیر کلمه تقسیم شود. شما باید نشانه ها و برچسب ها را مجدداً تنظیم کنید:

  1. نقشه برداری از همه نشانه ها به کلمه مربوطه با روش Word_IDS.
  2. اختصاص برچس ب-100 به نشانه های ویژه [CLS] و [SEP] بنابراین آنها توسط عملکرد از دست دادن Pytorch نادیده گرفته می شوند.
  3. فقط برچسب زدن اولین نشانه یک کلمه معین.-100 را از همان کلمه به سایر زیرنویس ها اختصاص دهید.

در اینجا نحوه ایجاد تابعی برای تنظیم مجدد نشانه ها و برچسب ها آورده شده است ، و توالی های کوتاه را کوتاه تر از حداکثر طول ورودی Distilbert نیست:

کپی شده

>>> دنباله tokenize_and_align_labels(مثال ها): .tokenized_inputs = tokenizer (نمونه ها ["توکن ها"] ، کوتاه شدن =درست است، واقعی، is_split_into_words =درست است، واقعی) .برچسب ها = []. برایمن ، برچسبin شمارش کردن(مثال ها[f "ner_tags"]): .word_ids = tokenized_inputs. word_ids (batch_index = i)# توکن نقشه به کلمه مربوطه. .prior_word_idx =هیچ یک .label_ids = []. برایword_idxinWord_ids:# نشانه های ویژه را رو ی-100 تنظیم کنید. . ifword_idxis هیچ یک: .label_ids. append (-100) . الیفword_idx! = prior_word_idx:# فقط اولین نشانه یک کلمه معین را برچسب گذاری کنید. .label_ids. append (برچسب [word_idx]). دیگر: .label_ids. append (-100) .قبلی_هه_یدکس = word_idx.LABELS. APPEND (label_ids).tokenized_inputs ["برچسب ها"] = برچسب ها. برگشتtokenized_inputs

برای اعمال عملکرد پیش پردازش در کل مجموعه داده ها ، از عملکرد نقشه Datastets استفاده کنید. شما می توانید با تنظیم batched = درست برای پردازش چندین عناصر مجموعه داده به طور هم زمان ، عملکرد نقشه را سرعت بخشید:

کپی شده

>>>tokenized_wnut = wnut.نقشه(tokenize_and_align_labels ، batched =درست است، واقعی)

اکنون با استفاده از DataCollatorWithPadding ، نمونه ای از نمونه ها را ایجاد کنید. این کارآمدتر است که به طور پویا جملات را به طولانی ترین طول در یک دسته در حین جمع آوری ، به جای اینکه کل مجموعه داده ها را به حداکثر طول برساند ، قرار دهید.

بهترین استراتژی معاملات...
ما را در سایت بهترین استراتژی معاملات دنبال می کنید

برچسب : نویسنده : صدرا ذوالریاستین بازدید : 33 تاريخ : شنبه 11 شهريور 1402 ساعت: 12:15