Path: blob/main/transformers_doc/ar/tensorflow/token_classification.ipynb
4544 views
تصنيف الرموز(Token classification)
يهدف تصنيف الرموز إلى إعطاء تسمية لكل رمز على حدة في الجملة. من أكثر مهام تصنيف الرموز شيوعًا هو التعرف على الكيانات المسماة (NER). يحاول NER تحديد تسمية لكل كيان في الجملة، مثل شخص، أو مكان، أو منظمة.
سيوضح لك هذا الدليل كيفية:
ضبط DistilBERT على مجموعة بيانات WNUT 17 للكشف عن كيانات جديدة.
استخدام نموذجك المضبوط بدقة للاستدلال.
للاطلاع جميع البنى والنقاط المتوافقة مع هذه المهمة، نوصي بالرجوع من صفحة المهمة.
قبل أن تبدأ، تأكد من تثبيت جميع المكتبات الضرورية:
نحن نشجعك على تسجيل الدخول إلى حساب HuggingFace الخاص بك حتى تتمكن من تحميل ومشاركة نموذجك مع المجتمع. عندما يُطلب منك، أدخل رمزك لتسجيل الدخول:
تحميل مجموعة بيانات WNUT 17
ابدأ بتحميل مجموعة بيانات WNUT 17 من مكتبة 🤗 Datasets:
ثم ألق نظرة على مثال:
يمثل كل رقم في ner_tags
كياناً. حوّل الأرقام إلى أسماء التصنيفات لمعرفة ماهية الكيانات:
يشير الحرف الذي يسبق كل ner_tag
إلى موضع الرمز للكيان:
B-
يشير إلى بداية الكيان.I-
يشير إلى أن الرمز يقع ضمن نفس الكيان (على سبيل المثال، الرمزState
هو جزء من كيان مثلEmpire State Building
).0
يشير إلى أن الرمز لا يمثل أي كيان.
المعالجة المسبقة(Preprocess)
الخطوة التالية هي تحميل مُجزِّئ النصوص DistilBERT للمعالجة المسبقة لحقل tokens
:
كما رأيت في حقل tokens
المثال أعلاه، يبدو أن المدخل قد تم تحليله بالفعل. لكن المدخل لم يُجزأ بعد ويتعيّن عليك ضبط is_split_into_words=True
لتقسيم الكلمات إلى كلمات فرعية. على سبيل المثال:
ومع ذلك، يضيف هذا بعض الرموز الخاصة [CLS]
و[SEP]
وتقسيم الكلمات إلى أجزاء يُنشئ عدم تطابق بين المُدخلات والتسميات. قد يتم تقسيم كلمة واحدة تقابل تسمية واحدة الآن إلى كلمتين فرعيتين. ستحتاج إلى إعادة محاذاة الرموز والتسميات عن طريق:
ربط كل رمز بالكلمة الأصلية باستخدام الخاصية
word_ids
.تعيين التسمية
-100
للرموز الخاصة[CLS]
و[SEP]
بحيث يتم تجاهلها بواسطة دالة الخسارة PyTorch (انظر CrossEntropyLoss).تسمية الرمز الأول فقط لكلمة معينة. قم بتعيين
-100
لأجزاء الكلمة الأخرى.
هنا كيف يمكنك إنشاء وظيفة لإعادة محاذاة الرموز والتسميات، وقص الجمل لتتجاوز الحد الأقصى لطول مُدخلات DistilBERT:
لتطبيق هذه العملية على كامل مجموعة البيانات، استخدم الدالة map
لمجموعة بيانات 🤗. يمكنك تسريع الدالة map
عن طريق تعيين batched=True
لمعالجة عناصر متعددة من مجموعة البيانات في وقت واحد:
الآن قم بإنشاء دفعة من الأمثلة باستخدام DataCollatorWithPadding
.من الأفضل استخدام الحشو الديناميكي للجمل إلى أطول طول في دفعة أثناء التجميع، بدلاً من حشو مجموعة البيانات بالكامل إلى الطول الأقصى.
التقييم(Evaluate)
يُعدّ تضمين مقياس أثناء التدريب مفيدًا في تقييم أداء نموذجك. يمكنك تحميل طريقة تقييم بسرعة مع مكتبة 🤗 Evaluate. لهذه المهمة، قم بتحميل إطار seqeval (انظر جولة 🤗 Evaluate quick tour لمعرفة المزيد حول كيفية تحميل وحساب مقياس). يُخرج seqeval عدة نتائج: الدقة، والاستذكار، ومقياس F1، والدقة.
احصل على تسميات الكيانات المسماة (NER) أولاً،ثم أنشئ دالة تُمرر تنبؤاتك وتسمياتك الصحيحة إلى compute
لحساب النتائج:
دالة compute_metrics
جاهزة للاستخدام، وستحتاج إليها عند إعداد التدريب.
التدريب(Train)
قبل تدريب النموذج، جهّز خريطة تربط بين المعرّفات المتوقعة وتسمياتها باستخدام id2label
و label2id
:
إذا لم تكن على دراية بتعديل نموذج باستخدام Keras، ألق نظرة على الدليل التعليمي الأساسي هنا!
ثم يمكنك تحميل DistilBERT مع TFAutoModelForTokenClassification
إلى جانب عدد التسميات المتوقعة، وتخطيطات التسميات:
قم بتحويل مجموعات بياناتك إلى تنسيق tf.data.Dataset
مع prepare_tf_dataset()
:
هيّئ النموذج للتدريب باستخدام compile
. لاحظ أن نماذج Transformers تتضمن دالة خسارة افتراضية مرتبطة بالمهمة، لذلك لا تحتاج إلى تحديد واحدة إلا إذا كنت ترغب في ذلك:
آخر أمرين يجب إعدادهما قبل بدء التدريب هو حساب درجات seqeval من التنبؤات، وتوفير طريقة لدفع نموذجك إلى Hub. يتم ذلك باستخدام Keras callbacks.
مرر دالة compute_metrics
الخاصة بك إلى KerasMetricCallback
:
حدد مكان دفع نموذجك والمحلل اللغوي في PushToHubCallback
:
ثم جمّع callbacks الخاصة بك معًا:
أخيرًا، أنت جاهز الآن لبدء تدريب نموذجك! قم باستدعاء fit
مع بيانات التدريب والتحقق، وعدد الحقبات، وcallbacks لتعديل النموذج:
بمجرد اكتمال التدريب، يتم تحميل نموذجك تلقائيًا إلى Hub حتى يتمكن الجميع من استخدامه!
للحصول على مثال أكثر تفصيلاً حول كيفية تعديل نموذج لتصنيف الرموز، ألق نظرة على الدفتر المقابل دفتر PyTorch أو دفتر TensorFlow.
الاستدلال(Inference)
رائع، الآن بعد أن قمت بتعديل نموذج، يمكنك استخدامه للاستدلال!
احصل على بعض النصوص التي تريد تشغيل الاستدلال عليها:
أبسط طريقة لتجربة نموذجك المُدرب مسبقًا للاستدلال هي استخدامه في pipeline()
. قم بتنفيذ pipeline
لتصنيف الكيانات المسماة مع نموذجك، ومرر نصك إليه:
يمكنك أيضًا تكرار نتائج pipeline
يدويًا إذا أردت:
قسّم النص إلى رموز وأرجع المُوتّرات ب TensorFlow:
مرر مدخلاتك إلى النموذج واحصل على logits
:
استخرج الفئة ذات الاحتمالية الأعلى، واستخدم جدول id2label
الخاصة بالنموذج لتحويلها إلى تسمية نصية: