Это часть 5 и продолжение серии. Пожалуйста, перейдите к Вступительной статье, в которой рассказывается о мотивации этой серии. Мы рассмотрим различные разделы абстрактного обобщения общедоступных данных XSum в Блокноте Colab и сделаем соответствующие комментарии для каждого из разделов.

  • Существует два типа резюмирования - экстрактивное и абстрактное. Экстрактивное обобщение резюмирует исходный текст путем поиска ключевых предложений в тексте и может быть выполнено аналогично обучению вопросам и ответам. Абстрактивное обобщение будет генерировать резюме, в котором точные предложения не будут найдены в исходном тексте. Это более сложная проблема, и она потребует от последовательности к последовательной модели DL вместо моделей кодировщика, с которыми мы имели дело в прошлом. Модели SeqtoSeq - это модели преобразователей, которые имеют как преобразователь кодировщика, так и преобразователь декодера. Декодер декодирует (или отображает) скрытое представление исходного текста в целевой текст. Модели SeqtoSeq можно использовать для сценария использования перевода, и мы увидим это в Части 6.
  • Загрузка и импорт библиотек - установлена ​​библиотека rouge_score - она ​​используется для вычисления самой длинной общей подпоследовательности (LCS) между двумя частями текста и является показателем, используемым для оценки прогнозов суммирования. Помимо этого, устанавливаются и импортируются обычные библиотеки Pytorch, трансформаторов и Pytorch Lightning.
  • Загрузить данные. Набор данных XSUM предварительно обработан и доступен для загрузки из библиотеки наборов данных Transformers. Этот набор данных используется вместо извлечения данных из общедоступного репозитория. В наборе данных 204 045 обучающих образцов, 11332 проверочных образца и 11 334 тестовых образца. Каждая строка данных выглядит так, как показано ниже.
{'document': 'Army explosives experts were called out to deal with a suspect package at the offices on the Newtownards Road on Friday night.\nRoads were sealed off and traffic diverted as a controlled explosion was carried out.\nThe premises, used by East Belfast MP Naomi Long, have been targeted a number of times.\nMost recently, petrol bomb attacks were carried out on the offices on consecutive nights in April and May.\nThe attacks began following a Belfast City Council vote in December 2012 restricting the flying of the union flag at the City Hall.\nCondemning the latest hoax, Alliance MLA Chris Lyttle said: "It is a serious incident for the local area, it causes serious disruption, it puts people\'s lives at risk, it can prevent emergency services reaching the area.\n"Ultimately we need people with information to share that with the police in order for them to do their job and bring these people to justice."',  
'id': '28381580',  
'summary': 'A suspicious package left outside an Alliance Party office in east Belfast has been declared a hoax.'}
  • Определите предварительно обученную модель. Используемая предварительно обученная модель - это модель T5-small. T5 - это современная модель Seq2Seq от Google (T5 - T ext- t o- T ext Т преобразователь Т преобразователь). После успешного обучения с этим можно попробовать другие предварительно обученные модели, изменив переменную model_checkpoint. Некоторые из других моделей Seq2Seq: MBART (перевод), MarianMT (перевод). Модель T5 может выполнять 8 различных категорий задач (например, обобщение, перевод, mnli, stsb, cola и т. д.) и требует ввода с правильным префиксом для идентификации текущей задачи. Для задачи Суммирование мы указываем префикс суммировать: перед каждым вводимым текстом.
  • Определите функцию предварительной обработки или класс набора данных. Здесь мы определяем функцию предварительной обработки, которая будет создавать обучающие, проверочные и тестовые данные в формате набора данных, который необходим загрузчику данных. Pytorch использует класс DataLoader для объединения данных в мини-пакеты. Данные токенизируются в этой функции с помощью предварительно обученного токенизатора. Текст документа и итоговый текст вывода маркируются отдельно. Сводный текст токенизируется с использованием метода target_tokenizer класса токенизатора.
  • Определите класс DataModule - это класс, определенный Pytorch Lightning, который содержит весь код, необходимый для подготовки мини-пакетов данных с использованием DataLoaders. В начале обучения класс Trainer сначала вызовет функции prepare_data и setup. Здесь есть функция сопоставления, которая выполняет заполнение мини-пакетов. Функция сопоставления помогает дополнить входные данные мини-пакета до самой длинной длины данных в этом мини-пакете. Это обеспечивает более быстрое обучение и меньшее использование памяти. Ключ ‘labels’ необходимо заполнить вручную, так как метод tokenizer.pad не заполняет целевой столбец. Столбец decoder_input_ids создается с помощью метода модели prepare_decoder_input_ids_from_labels. Декодер ожидает decoder_input_ids - аналогично размеченному столбцу input_ids для кодировщика. Если в этой модели нет этого метода, decoder_input_ids создается путем сдвига столбца меток вправо. Идентификаторы входа декодера используются для принуждения учителя при обучении декодера - предоставления декодеру информации о прошлых токенах итогового текста, чтобы помочь в более быстром обучении декодера.
  • Определите класс модели - здесь определяется прямая функция модели DL. «Input_ids», «Внимание_mask» и «decoder_input_ids» задаются как входные данные для модели. «Decoder_input_ids» имеет тот же размер, что и метки. Во время логического вывода также даются encoder_outputs. Линейный слой применяется к decoded_outputs для генерации логитов с формой decoder_input_ids X размером словаря 32,128 (размер словаря предварительно обученной модели).
  • Определите класс модуля Pytorch Lightning - здесь определяются функции обучения, проверки и шага тестирования. Потери и точность модели вычисляются в ступенчатых функциях. Здесь также определены оптимизаторы и планировщики. Убыток рассчитывается с использованием обычного CrossEntropyLoss для расчета потерь. Метрики проверки и тестирования рассчитываются с помощью пакета метрик Rouge в функциях compute_metrics. Метрика Rouge имеет несколько различных метрик, таких как Rouge1, Rouge2, RougeL, RougeLsum, gen_len.
  • Определение параметров трейнера - здесь определяются все необходимые параметры трейнера и обратные вызовы трейнера. Мы определили 3 разных обратных вызова - EarlyStopping, LearningRate Monitor и Checkpointing. Вместо использования argparse для определения параметров последнее обновление Pytorch Lightning позволяет определять параметры с помощью файла .yaml - этот файл .yaml может быть предоставлен в качестве аргумента для файла .py python при запуске CLI. Таким образом, параметры тренера можно поддерживать отдельно от обучающего кода. Поскольку в демонстрационных целях мы используем Colab Notebook, мы придерживаемся метода argparse.
  • Обучение модели. Это делается с помощью метода Trainer.fit (). Профилировщик может быть определен в параметрах тренера, чтобы предоставить больше информации о времени выполнения тренинга.
  • Оцените производительность модели - после 1 эпохи обучения мы получаем следующие показатели тестирования:
TEST RESULTS 
{'gen_len': 47.58674240112305,  
'rouge1': 21.525144577026367,  
'rouge2': 4.095888137817383,  
'rougeL': 19.751005172729492,  
'rougeLsum': 19.937564849853516,  
'test_loss': 4.333302974700928}
  • Это не высокие баллы, и вам потребуется тренировка для дополнительных эпох. На прохождение одной Эпохи ушло 2 часа 8 минут. Потеря теста близка к потере обучения. Пример записной книжки Трансформеров, использующих их тренер, показывает потерю в обучении 2,72 после 1 эпохи с продолжительностью 1 час 22 минуты. И потери, и время работы ниже, чем у этого ноутбука с Pytorch Lightning. Вносит ли фреймворк Lightning задержки на этапе обучения? Не уверен, почему этот ноутбук не может достичь такого же результата, как ноутбук Transformers. Более высокие потери в обучении означают, что модель не может генерировать хороший итоговый текст в Inference. В итоговом заключении будет большая разница между потерей обучения 4,33 и 2,72.
  • Оценка SOTA 45,1 Rouge1 была получена на тестовых данных с использованием модели BART - это гораздо большая модель по сравнению с моделью T5-small. Невозможно точно настроить модель BART в бесплатной версии Colab, так как у нее закончится память. Но должно быть возможно воспроизвести результат SOTA, используя более крупный графический процессор.
  • Выполнить вывод на обученной модели - здесь показан образец кода вывода. Вывод с использованием модели Seq2Seq более сложен, чем вывод с использованием модели кодировщика. Вывод логического вывода генерируется токеном за токеном и ограничен максимальной длиной текстового параметра. Есть несколько техник для генерации выходного текста, такие как Greedy_search, Beam_search, Sampling, top-K Sampling. Код для Greedy_search и Beam_search показан в записной книжке - это заняло немало часов, чтобы понять и распутать код трансформаторов generation utils.
  • Сгенерированная сводка не подходит, и для улучшения ее возможностей суммирования модели потребуется дополнительное обучение.
  • Данные журналов TensorBoard - это откроет TensorBoard в записной книжке Colab и позволит вам просматривать различные журналы TensorBoard. Pytorch Lightning по умолчанию ведет журналы TensorBoard, и это можно изменить с помощью обратного вызова Logger.

Далее мы рассмотрим тренинг по задачам перевода в Части 7 этой серии.