Исходный код для бумаги ACL 2022 «Увеличение когерентности: когда ваша модель на предварительном языке не уделяет достаточно внимания» (Arxiv, ACL -антология)
СЕМЕНТАНСКАЯ СЕМЕНТАНСКАЯ СЕМЕНТАНСКАЯ СЕМЕНТАНСКАЯ СЕМЕНТАНСКАЯ СЕМЕНТАНСТВА Остается проблемой в автоматическом генерации языка и понимании. Мы демонстрируем, что крупные языковые модели недостаточно изучили влияние отдаленных слов на следующее предсказание. Мы представляем повышение когерентности , процедуру вывода, которая увеличивает внимание 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_start , --alpha_end , --alpha_step : параметры поиска alpha -SLENETEPERS-SUPEREPERS: gRIDEPERS: gridEpers--slen_start gridEpers: gridEpers: gridEpers: gridEpers: gridEpers: gridEpers: gridepers: gridetep: gridetep: gridetep: --slen_end : --slen_step : slen гиперпараметр; Обратите внимание, что обе настройки гиперпараметра влияют на скорость вывода для задачи Lambadaмы оцениваем предложенное повышение когерентности по следующим задачам NLU.
| Задача | закрыть | задание | Ответ | текстовая | классификация | |
|---|---|---|---|---|---|---|
| NLI | Факт | Hellaswag Copa | Commonsenseqa OpenBookqa Дуга легкий/вызов PIQA | SST-2/5 Трек Agnews | Rte CB Boolq | Lama |
Большинство наборов данных могут быть загружены наборами данных 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'--use_val : использовать ли валидационный набор для выбора двух гиперпараметров, alpha и slen , представляющих коэффициент усиления и длины для Partial---alpha_start --alpha_step --alpha_endalpha -гиперпараметра; Обратите внимание, что промежуточные результаты Code Caches, и вы можете изменить эти параметры после того, как вы запустили вывод для одного времениapi_key.txtВ дополнение к предыдущим задачам, наша кодовая база достаточно гибкая, чтобы включить любой новый набор данных с несколькими выборами с минимальными усилиями (вдохновленный проектом с открытым исходным кодом, LM-оценка-Harness). Там примерно три шага:
__init__.py в папке tasks .MultipleChoiceTask функциями предварительной обработки данных (например, load_data , standardize )get_contrast_ctx , и это то, где вы определяете свою собственную подсказку без предпосылки для усыновления нашего кодекса.Следите за классами задач в качестве примеров и, пожалуйста, сообщите нам о том, если вы сталкиваетесь с любыми проблемами при принятии нашего кодекса.
Мы предоставляем генеральную модель, совместимую с библиотекой transformers Huggingface в 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).