رمز المصدر لورقة ACL 2022 "تعزيز التماسك: عندما لا يكون نموذج اللغة المسبق الخاص بك لا يولي اهتمامًا كافيًا" (Arxiv ، ACL Anthology)
لا يزال التماسك الدلالي طويل المدى يمثل تحديًا في توليد اللغة التلقائية والتفاهم. نوضح أن نماذج اللغة الكبيرة لم تتعلم بشكل كافٍ تأثير الكلمات البعيدة على التنبؤ المالي. نقدم تعزيز التماسك ، وهو إجراء استنتاج يزيد من تركيز LM على سياق طويل. نوضح فوائد تعزيز التماسك مع النماذج المسبقة من خلال التحليلات التوزيعية لاستجابات النص والحوار العادي الذي تم إنشاؤه. وقد وجد أيضًا أن التماسك الذي يعزز مع النماذج الحديثة لمختلف مهام NLP لا تحقق مكاسب أداء مع عدم وجود تدريب إضافي.
إذا وجدت الورقة والرمز مفيدة ، يرجى تفضل ببطولة هذا الريبو واستشهد بالورقة. ًشكراً جزيلا!
@inproceedings { malkin-etal-2022-coherence , title = " Coherence boosting: When your pretrained language model is not paying enough attention " , author = " Malkin, Nikolay and Wang, Zhen and Jojic, Nebojsa " , booktitle = " Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " , month = may, year = " 2022 " , address = " Dublin, Ireland " , publisher = " Association for Computational Linguistics " , url = " https://aclanthology.org/2022.acl-long.565 " , doi = " 10.18653/v1/2022.acl-long.565 " , pages = " 8214--8236 " }نقدم برنامجًا تجريبيًا لإثبات عدم التماسك على LMS الحالي الذي تم تدريبه مسبقًا ، أي فشل في التنبؤ برمز المميز التالي الذي يتطلب سياقًا ، والذي يتطلب بوضوح فهم الكلمات البعيدة. يمكن حل مثل هذه الأخطاء عن طريق تعزيز التماسك المقترح ، والذي يتنبأ على النقيض من الرمز المميز التالي عن طريق الخلط الخطي الخطي من التوزيع من السياق الكامل وسياق جزئي.
> >> from cb_demo import contrasting > >> contrasting ( model_name = 'gpt2' , context = ' Ballad metre is "less regular and more conversational" than common metre' , - - partial_length = 8 , - - alpha = 0.5 ) [ out ] Top tokens based on full context : Ballad metre is "less regular and more conversational" than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.405 9.03 % 2 Ġin - 3.900 2.02 % 3 . - 3.978 1.87 % 4 , - 4.097 1.66 % 5 Ġpractice - 4.287 1.37 % ... ... ... ... 13 Ġmetre ** - 5.098 0.610609 % * * Target Token Top tokens based on partial context : regular and more conversational " than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.547 7.83 % 2 ĠEnglish - 3.352 3.50 % 3 . - 3.427 3.25 % 4 Ġconversation - 3.445 3.19 % 5 , - 3.634 2.64 % ... ... ... ... 14103 Ġmetre ** - 13.450 0.000144 % * * Target Token Contrastive next token prediction : Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġmetre ** - 0.923 39.74 % 2 Ġsense - 2.334 9.69 % 3 Ġmeter - 2.785 6.17 % 4 Ġin - 3.210 4.03 % 5 Ġfoot - 3.220 3.99 % * * Target Tokenيمكنك تكرار النتائج لبعض الأمثلة في الشكل 1 من الورقة بواسطة الكود التالي:
python cb_demo . py - - context = ' Ballad metre is "less regular and more conversational" than common metre' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Isley Brewing Company: Going Mintal — a minty milk chocolate stout' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Other times anxiety is not as easy to see, but can still be just as debilitating' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5مهمة LAMBADA على سياق طويل تشبه الأمثلة الموضحة أعلاه حيث من المتوقع أن يتنبأ النموذج بالكلمة الأخيرة في مقاطع من عدة جمل. مجموعة البيانات هذه معيارًا قياسيًا لتقييم نماذج Langauge الحديثة (مثال).
والأهم من ذلك ، أن هذه المهمة تتطلب بشكل صريح التفكير في سياق واسع: يمكن للبشر تخمين الكلمة الأخيرة بشكل موثوق عند إعطاء مقطع كامل ، ولكن ليس عند إعطاء الجملة الأخيرة فقط. مثل هذه الخاصية تجعل هذا المعيار اختبارًا مثاليًا لتقييم فعالية تعزيز التماسك المقترح.
لتشغيل تجارب Lambada ، ما عليك سوى تشغيل الأمر التالي:
python main . py - - tasks = 'lambada' - - models = 'gpt2-small' - - use_val = False - - alpha_start = 1 - - alpha_end = 1 - - alpha_step = 0.1 - - slen_start = 10 - - slen_end = 10يتم القائمة بعض الوسيطات المهمة ، يرجى استخدام python main.py --help .
--models : اسم نماذج اللغة التي تم تدريبها مسبقًا ، مفصول بواسطة Semicolon إذا كنت ترغب في تشغيل نماذج متعددة في نفس الوقت ، على سبيل المثال ، 'gpt2-small;gpt2-medium' ؛ إذا كنت ترغب في استخدام نماذج GPT-3 ، راجع ملاحظات حول GPT-3.--use_val : ما إذا كان لاستخدام مجموعة التحقق من صحة لتحديد اثنين من المقاييس المفرطة ، alpha و slen التي تمثل معامل التعزيز والطول للسياق الجزئي-alpha --alpha_start --alpha_end ، --alpha_step :--slen_start --slen_end --slen_step alpha slen مقياس البارامير لاحظ أن كلا الإعدادات الفائقة على مقياس الاستدلال لمهمة Lambadaنقوم بتقييم التماسك المقترح على تعزيز مهام NLU التالية.
| المهمة | إغلاق | سؤال سؤال الإجابة على | تصنيف النص | nli | حقيقة واقعة على استرجاع | |
|---|---|---|---|---|---|---|
| مجموعات | البيانات | Hellaswag كوبا | كومافنسا OpenBookqa قوس سهلة/التحدي PIQA | SST-2/5 TREC agnews | rte CB بولك | لاما |
يمكن تحميل معظم مجموعات البيانات بواسطة مجموعات بيانات Hugginface ؛ لا يتطلب سوى عدد قليل منهم التنزيل يدويًا باستخدام التعليمات المطلوبة عند تشغيل الرمز.
لتشغيل تجارب NLU ، ما عليك سوى تشغيل الأمر التالي:
python main . py - - tasks = 'storycloze;csqa;openbookqa' - - models = 'gpt2-small;gpt2-medium;gpt2-large' - - alpha_start = 2 - - alpha_end = - 3 - - alpha_step = 0.01يتم قائمة بعض الحجج المهمة على أنها متابعة ، يرجى استخدام python main.py --help
--models : اسم نماذج اللغة التي تم تدريبها مسبقًا ، مفصل بواسطة Semicolon إذا كنت ترغب في تشغيل نماذج متعددة في نفس الوقت ، على سبيل المثال ، 'gpt2-small;gpt2-medium'--alpha_end --alpha_start--use_val alpha slen يمثلون معامل التعب--alpha_step : معلمات بحث الشبكة لفرط alpha ؛ لاحظ أن الكود يخبؤ النتائج المتوسطة وأنك حر في تغيير هذه المعلمات بعد تشغيل الاستدلال لمرة واحدةapi_key.txtبالإضافة إلى المهام السابقة ، فإن قاعدة الشفرة الخاصة بنا مرنة بما يكفي لدمج أي مجموعة بيانات جديدة متعددة الاختيار مع جهود مصغرة (مستوحاة من المشروع المفتوح المصدر ، LM-Evaluation-Harness). هناك ما يقرب من ثلاث خطوات:
__init__.py في مجلد tasks .MultipleChoiceTask مع وظائف معالجة البيانات (على سبيل المثال ، load_data ، standardize )get_contrast_ctx ، وهو المكان الذي تحدد فيه موجهًا خاليًا من الفرضية لزيادة التماسك ،انظر فئات المهام الأخرى كأمثلة ويرجى أن تدعنا تعرف على أي مشكلات عند تبنيها.
نحن نقدم غلاف النموذج الأولي متوافق مع مكتبة Huggingface transformers في generation/generation.py . يمكنك إنشاء متغيرات معززة بالتماسك لأي LM التلقائي باستخدام الفئة في النص النصي:
> >> boosted_model = generation . BoostedModel ( base_model , k = 8 , alpha_long = 1.5 , alpha_short = - 0.5 )يمكن بعد ذلك استخدام boosted_model بمرونة مع دالة generate ،
> >> ins = T . LongTensor ([ tokenizer . encode ( 'Once upon a midnight dreary,' )]) > >> outputs = boosted_model . generate ( input_ids = ins , do_sample = True , max_length = 100 , top_p = 0.95 ) > >> tokenizer . decode ( outputs [ 0 ]) "Once upon a midnight dreary, while I pondered over these things, I suddenly became aware of a strange and terrible noise. I turned round, and saw that the old man was standing near me. He was wearing a black suit, with a black tie, and a black hat. He had a long, thin, black beard, and his eyes were black. His hair was of a dark brown colour, and was very long. His face was rather large, and his lips were somewhat". تم تكييفه مع السيناريوهات التي يكون فيها السياق القصير الناتج الذي تم إنشاؤه حاليًا ناقصًا بادئة بطول معين ( على سبيل المثال ، المنعطف السابق في محادثة) عن طريق تعيين boosted_model.k بشكل ديناميكي إلى طول البادئة السلبية.
نقدم بعض مخرجات التوليد الشرطي. يمكن تقييم مقاييس التقييم الموضحة في الجدول 1 باستخدام الرمز من هذا المستودع للأعمدة الأربعة الأولى أو استخدام الكود هنا للحصول على مقاييس التماسك الطويلة المدى التي قدمناها.
إذا كان لديك أي أسئلة ، فلا تتردد في الاتصال بـ Kolya (nikolay.malkin في Mila.quebec) و Zhen (Wang.9215 في OSU.EDU).