الكود المصدري المستخدم لتصنيف النص باستخدام أسماء التسمية فقط: نهج تدريب ذاتي نموذج اللغة ، المنشور في EMNLP 2020.
مطلوب وحدة معالجة الرسومات واحدة على الأقل لتشغيل الرمز.
قبل التشغيل ، تحتاج أولاً إلى تثبيت الحزم المطلوبة عن طريق كتابة الأوامر التالية:
$ pip3 install -r requirements.txt
أيضًا ، تحتاج إلى تنزيل Wordwords في مكتبة NLTK:
import nltk
nltk.download('stopwords')
ينصح بشدة بيثون أو فوق ؛ قد يؤدي استخدام إصدارات Python الأقدم إلى مشكلات عدم التوافق في الحزمة.
نحن نقدم أربعة نصوص get_data.sh لتنزيل مجموعات البيانات المستخدمة في الورقة تحت datasets وأربعة نصوص تدريبات Bash agnews.sh و dbpedia.sh و imdb.sh و amazon.sh لتشغيل النموذج على مجموعات البيانات الأربعة.
ملاحظة: لا يستخدم نموذجنا ملصقات التدريب ؛ نحن نقدم ملصقات الحقيقة التدريبية/الاختبار فقط للاكتمال والتقييم.
تفترض البرامج النصية للتدريب أن لديك وحدات معالجة الرسومات بحجم 10 جيجابايت. إذا كان لديك عدد مختلف من وحدات معالجة الرسومات ، أو وحدات معالجة الرسومات من أحجام الذاكرة المختلفة ، راجع القسم التالي حول كيفية تغيير وسيطات سطر الأوامر التالية بشكل مناسب (مع الحفاظ على الوسيطات الأخرى دون تغيير): train_batch_size ، accum_steps ، eval_batch_size و gpus .
سيتم عرض معاني وسائط سطر الأوامر عند الكتابة
python src/train.py -h
تؤثر الوسيطات التالية بشكل مباشر على أداء النموذج وتحتاج إلى ضبطها بعناية:
train_batch_size ، accum_steps ، gpus : يجب ضبط هذه الوسائط الثلاثة معًا. تحتاج إلى التأكد من أن حجم دفعة التدريب الفعالة ، المحسوبة كـ train_batch_size * accum_steps * gpus ، حوالي 128 . على سبيل المثال ، إذا كان لديك 4 وحدات معالجة الرسومات ، فيمكنك تعيين train_batch_size = 32, accum_steps = 1, gpus = 4 ؛ إذا كان لديك وحدة معالجة الرسومات 1 ، فيمكنك تعيين train_batch_size = 32, accum_steps = 4, gpus = 1 . إذا كانت وحدات معالجة الرسومات الخاصة بك لها أحجام مختلفة للذاكرة ، فقد تحتاج إلى تغيير train_batch_size أثناء ضبط accum_steps و gpus في نفس الوقت للحفاظ على حجم دفعة التدريب الفعالة حوالي 128 .eval_batch_size : تؤثر هذه الوسيطة فقط على سرعة الخوارزمية ؛ استخدم حجم دفعة تقييم كبيرة كما يمكن أن يحمل وحدات معالجة الرسومات الخاصة بك.max_len : تتحكم هذه الوسيطة في الحد الأقصى لطول المستندات التي يتم تغذيتها في النموذج (سيتم اقتطاع المستندات الأطول). من الناحية المثالية ، يجب ضبط max_len على طول أطول مستند (لا يمكن أن يكون max_len أكبر من 512 تحت بنية BERT) ، ولكن استخدام max_len أكبر يستهلك أيضًا ذاكرة GPU ، مما يؤدي إلى حجم الدُفعة الأصغر ووقت تدريب أطول. لذلك ، يمكنك تداول دقة النموذج للتدريب بشكل أسرع عن طريق تقليل max_len .mcp_epochs ، self_train_epochs : إنهم يتحكمون في عدد الحصر لتدريب النموذج على مهمة التنبؤ بالفئة المقنعة ومهمة التدريب الذاتي ، على التوالي. تعيين mcp_epochs = 3, self_train_epochs = 1 سيكون نقطة انطلاق جيدة لمعظم مجموعات البيانات ، ولكن قد تزيدها إذا كانت مجموعة البيانات الخاصة بك صغيرة (أقل من 100,000 مستندات).يمكن الاحتفاظ بالحجج الأخرى كقيمها الافتراضية.
لتنفيذ الرمز على مجموعة بيانات جديدة ، تحتاج إلى ذلك
your_dataset ضمن datasets .train.txt (وثيقة واحدة لكل سطر) تحت your_dataset لتدريب نموذج التصنيف (لا توجد حاجة إلى ملصقات مستندات).label_names.txt ضمنك your_dataset (يحتوي كل سطر على اسم تسمية فئة واحدة ؛ إذا تم استخدام كلمات متعددة كاسم تسمية للفئة ، فضعها في نفس السطر وفصلها بأحرف مساحة بيضاء).test.txt (مستند واحد لكل سطر) مع تسميات الحقيقة الأرضية test_labels.txt (يحتوي كل سطر على عدد صحيح يشير إلى فهرس فئة المستند المقابل ، يبدأ الفهرس من 0 ويجب أن يكون الترتيب متسقًا مع ترتيب الفئة في label_names.txt ). إذا تم توفير مجموعة الاختبار ، فسيقوم الرمز بكتابة نتائج التصنيف إلى out.txt تحت your_dataset بمجرد اكتمال التدريب. إذا تم توفير ملصقات الحقيقة الأرضية لمجموعة الاختبار ، فسيتم عرض دقة الاختبار أثناء التدريب الذاتي ، وهو أمر مفيد لضبط الفصائل واختيار الكرز النموذجي باستخدام مجموعة اختبار صغيرة.final_model.pt تحت your_dataset .ملاحظة: سوف يقوم الرمز بتخزين البيانات الوسيطة ونقاط تفتيش النموذج كملفات .PT ضمن دليل مجموعة البيانات الخاصة بك للتدريب المستمر. إذا قمت بتغيير مجموعة التدريب الخاصة بك أو أسماء التسمية وإعادة تشغيل الرمز ، فستحتاج أولاً إلى حذف جميع ملفات .PT لمنع الكود من تحميل النتائج القديمة.
يمكنك دائمًا الرجوع إلى مجموعات بيانات المثال عند إعداد مجموعات البيانات الخاصة بك.
يرجى الاستشهاد بالورقة التالية إذا وجدت الرمز مفيدًا لبحثك.
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}