Модель BART для суммирования текста
Введение
Подходы с самоконтролем позволили решить множество различных типов задач НЛП.
Автокодировщики шумоподавления, обученные восстанавливать текст, когда случайное подмножество слов было замаскировано, оказались наиболее эффективным методом.
В недавней работе были доказаны преимущества за счет улучшения распределения маски, порядка прогнозирования маски и контекста для замены токенов маски.
Несмотря на многообещающие результаты, эти подходы часто ограничиваются несколькими отдельными задачами (такими как прогнозирование интервала, создание интервала и т. д.).
Предварительные условия
Чтобы следовать этой статье, вам понадобится опыт работы с кодом Python и начальное понимание глубокого обучения. Мы будем исходить из предположения, что все читатели имеют доступ к достаточно мощным машинам, чтобы они могли запускать предоставленный код.
Если у вас нет доступа к графическому процессору, мы предлагаем получить к нему доступ через облако. Существует множество облачных провайдеров, предлагающих графические процессоры. DigitalOcean GPU Droplets в настоящее время находится в ранней доступности. Узнайте больше и подпишитесь на интерес к GPU Droplets здесь.
Чтобы получить инструкции по началу работы с кодом Python, мы рекомендуем попробовать это руководство для начинающих, чтобы настроить систему и подготовиться к запуску руководств для начинающих.
Что такое модель трансформатора BART в НЛП?
В этом документе представлен BART, метод предварительного обучения, который сочетает в себе двунаправленные и авторегрессионные преобразователи. BART — это автокодировщик с шумоподавлением, использующий парадигму «последовательность-последовательность», что делает его полезным для различных приложений. Предварительное обучение состоит из двух этапов: (1) текст искажается с использованием произвольной функции шума, и (2) изучается последовательная модель для восстановления исходного текста.
Архитектуру нейронного машинного перевода BART на основе трансформатора можно рассматривать как обобщение BERT (благодаря двунаправленному кодировщику), GPT (с декодером слева направо) и многих других современных подходов к предварительному обучению.
Источник
В дополнение к его преимуществам в задачах понимания, эффективность BART увеличивается за счет тонкой настройки генерации текста. Он генерирует новые современные результаты по различным абстрактным беседам, ответам на вопросы и задачам обобщения, сопоставляя производительность RoBERTa с сопоставимыми учебными ресурсами по GLUE и SQuAD.
Архитектура
За исключением изменения функций активации ReLU на GeLU и инициализации параметров из (0, 0,02), BART следует общей конструкции преобразователя последовательность-последовательность (Vaswani et al., 2017). В кодере и декодере базовой модели имеется шесть слоев, а в большой модели — по двенадцать слоев в каждом.
Подобно архитектуре, используемой в BERT, два основных различия заключаются в том, что (1) в BERT каждый уровень декодера дополнительно выполняет перекрестное внимание над последним скрытым уровнем кодера (как в модели преобразователя последовательность-последовательность). ; и (2) в BERT перед предсказанием слова используется дополнительная сеть прямой связи, тогда как в BART ее нет.
Предварительная подготовка БАРТ
Чтобы обучить BART, мы сначала искажаем документы, а затем оптимизируем потери при реконструкции, которые представляют собой перекрестную энтропию между выходными данными декодера и исходным документом. В отличие от обычных автокодировщиков с шумоподавлением, BART можно использовать для любого типа повреждения документа.
Наихудший сценарий для BART — это потеря всей исходной информации, что становится аналогом языковой модели. Исследователи опробовали несколько новых и старых трансформаций, но они также считают, что есть много возможностей для создания еще более уникальных альтернатив.
Ниже мы опишем выполненные ими преобразования и приведем несколько примеров. Ниже приводится краткое описание использованных ими преобразований, а на рисунке представлены иллюстрации некоторых результатов.
- Маскировка токенов. После BERT случайные токены выбираются и заменяются элементами MASK.
- Удаление токенов. Случайные токены удаляются из входных данных. В отличие от маскировки токенов, модель должна предсказать, в каких позициях отсутствуют входные данные.
- Заполнение текстом. Выбирается несколько текстовых фрагментов, длина которых определяется из распределения Пуассона (λ=3). Каждый диапазон заменяется одним токеном MASK. Заполнение текста учит модель прогнозировать, сколько токенов отсутствует в диапазоне.
- Перестановка предложений. Документ делится на предложения на основе точек, и эти предложения перемешиваются в случайном порядке.
- Ротация документа. Токен выбирается равномерно случайным образом, и документ поворачивается, начиная с этого токена. Эта задача обучает модель идентифицировать начало документа.
Источник
Точная настройка БАРТ
Существует несколько потенциальных вариантов использования представлений, которые BART генерирует на последующих этапах обработки:
- Задачи классификации последовательностей. Для задач классификации последовательностей одни и те же входные данные подаются в кодер и декодер, а конечные скрытые состояния последнего токена декодера передаются в новый многоклассовый линейный классификатор.
Источник
- Задачи классификации токенов. И кодер, и декодер принимают весь документ в качестве входных данных, а из верхнего скрытого состояния декодера получается представление каждого слова. Классификация токена основана на его представлении.
- Задачи создания последовательностей. Для задач создания последовательностей, таких как ответы на абстрактные вопросы и обобщение текста, авторегрессионный декодер BART позволяет выполнять прямую точную настройку. Обе эти задачи связаны с целью шумоподавления перед обучением, поскольку они включают копирование и последующее манипулирование входными данными. Здесь входная последовательность служит входными данными для кодера, а декодер генерирует выходные данные авторегрессионным способом.
- Машинный перевод. Исследователи исследуют возможность использования BART для улучшения декодеров машинного перевода для перевода на английский язык. Доказано, что использование предварительно обученных кодировщиков улучшает модели, тогда как преимущества от включения предварительно обученных языковых моделей в декодеры более ограничены. Используя набор параметров кодировщика, полученный из битового текста, они демонстрируют, что всю модель BART можно использовать в качестве единого предварительно обученного декодера для машинного перевода. Точнее, они заменяют уровень внедрения кодера BART совершенно новым кодером, использующим случайную инициализацию. Когда модель обучается от начала до конца, новый кодер обучается отображать иностранные слова во входные данные, которые BART затем может перевести на английский язык. На обоих этапах обучения перекрестная энтропийная потеря распространяется обратно от выходных данных модели BART для обучения исходного кодировщика. На первом этапе они фиксируют большинство параметров BART и обновляют только случайно инициализированный исходный кодер, позиционные внедрения BART и матрицу входной проекции самообслуживания первого уровня кодера BART. Во-вторых, они выполняют ограниченное количество обучающих итераций для всех параметров модели.
Источник
Модель BART для суммирования текста
Исследователю или журналисту требуется много времени, чтобы просмотреть всю обширную информацию в Интернете и найти то, что им нужно. Вы можете сэкономить время и силы, просматривая основные моменты объемной литературы, используя краткое изложение или перефраз.
Задача НЛП по обобщению текстов может быть автоматизирована с помощью моделей-трансформеров. Для достижения этой цели существуют экстрактивные и абстрактные методы. Экстрактивное обобщение документа предполагает поиск наиболее важных утверждений в тексте и их запись. Это можно классифицировать как тип поиска информации. Более сложным, чем буквальное изложение, является абстрактное обобщение, которое стремится охватить весь материал и предоставить перефразированный текст для суммирования ключевых моментов. Второй тип суммирования осуществляют модели-трансформеры типа BART.
HuggingFace дает нам быстрый и легкий доступ к тысячам предварительно обученных и точно настроенных весов для моделей Transformer, включая BART. Вы можете выбрать индивидуальную модель BART для задания суммирования текста на веб-сайте обозревателя моделей HuggingFace. Каждая представленная модель включает подробное описание ее конфигурации и обучения. Удобная для начинающих модель bart-large-cnn заслуживает внимания, так что давайте взглянем на нее. Чтобы начать, воспользуйтесь страницей установки HuggingFace или запустите pip install Transformers. Далее мы выполним следующие три простых шага, чтобы создать сводку:
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
Конвейер модели трансформаторов должен быть загружен первым. Модуль в конвейере определяется именем задачи и модели. Используется термин «суммирование», а модель называется «facebook/bart-large-xsum». «Если мы хотим попробовать что-то отличное от стандартного набора данных новостей, мы можем использовать набор данных Extreme Summary (XSum). Модель была обучена генерировать резюме, состоящее исключительно из одного предложения.
Последний шаг — создание входной последовательности и ее проверка с помощью конвейера summarizer(). Что касается токенов, общую длину также можно настроить с помощью необязательных аргументов функции max_length и min_length.
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
ARTICLE = """ New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared "I do" five more times, sometimes only within two weeks of each other.
In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her "first and only" marriage.
Barrientos, now 39, is facing two criminal counts of "offering a false instrument for filing in the first degree," referring to her false statements on the
2010 marriage license application, according to court documents.
Prosecutors said the marriages were part of an immigration scam.
On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
The case was referred to the Bronx District Attorney\'s Office by Immigration and Customs Enforcement and the Department of Homeland Security\'s
Investigation Division. Seven of the men are from so-called "red-flagged" countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
If convicted, Barrientos faces up to four years in prison. Her next court appearance is scheduled for May 18.
"""
print(summarizer(ARTICLE, max_length=130, min_length=30, do_sample=False))
Output:
[{'summary_text': 'Liana Barrientos, 39, is charged with two counts of "offering a false instrument for filing in the first degree" In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. She is believed to still be married to four men.'}]
Другой вариант — использовать BartTokenizer для создания токенов из текстовых последовательностей и BartForConditionalGeneration для суммирования.
# Importing the model
from transformers import BartForConditionalGeneration, BartTokenizer, BartConfig
As a pre-trained model, " bart-large-cnn" is optimized for the summary job.
The **from_pretrained()** function is used to load the model, as seen below.
# Tokenizer and model loading for bart-large-cnn
tokenizer=BartTokenizer.from_pretrained('facebook/bart-large-cnn')
model=BartForConditionalGeneration.from_pretrained('facebook/bart-large-cnn')
Предположим, вам нужно резюмировать тот же текст, что и в примере выше. Для этой цели вы можете воспользоваться функцией batch_encode_plus() токенизатора. При вызове этот метод создает словарь, в котором хранится закодированная последовательность или пара последовательностей и любая другая предоставленная информация.
Как мы можем ограничить кратчайшую возможную последовательность, которую можно вернуть?
В batch_encode_plus() установите значение параметра max_length. Чтобы получить id итогового вывода, мы передаем input_ids в функцию model.generate().
# Transmitting the encoded inputs to the model.generate() function
inputs = tokenizer.batch_encode_plus([ARTICLE],return_tensors='pt')
summary_ids = model.generate(inputs['input_ids'], num_beams=4, max_length=150, early_stopping=True)
Сводка исходного текста была сгенерирована как последовательность id с помощью метода model.generate(). Функция model.generate() имеет множество параметров, среди которых:
- input_ids: последовательность, используемая в качестве подсказки для генерации.
- max_length: максимальная длина генерируемой последовательности. Между min_length и бесконечностью. По умолчанию 20.
- min_length: минимальная длина генерируемой последовательности. Между 0 и бесконечностью. По умолчанию 0.
- num_beams: Количество лучей для поиска лучей. Должно быть от 1 до бесконечности. 1 означает отсутствие поиска луча. По умолчанию 1.
- early_stopping: если установлено значение True Beams, поиск луча останавливается, когда в каждом пакете завершено хотя бы num_beams предложений.
Функцию decode() можно использовать для преобразования последовательности ids в обычный текст.
# Decoding and printing the summary
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print(summary)
Функция decode() преобразует список списков id токенов в список строк. Он принимает несколько параметров, среди которых упомянем два:
- token_ids: список токенизированных входных id.
- skip_special_tokens: следует ли удалять специальные токены при декодировании.
В результате мы получаем следующее:
Liana Barrientos, 39, is charged with two counts of offering a false instrument for filing in the first degree. In total, she has been married 10 times, with nine of her marriages occurring between 1999 and 2002. At one time, she was married to eight men at once, prosecutors say.
Обобщение документов с помощью BART с использованием ktrain
ktrain — это пакет Python, который уменьшает объем кода, необходимого для реализации машинного обучения. Обертывая TensorFlow и другие библиотеки, он стремится сделать передовые модели машинного обучения доступными для неспециалистов, одновременно удовлетворяя потребности экспертов в этой области. Благодаря оптимизированному интерфейсу ktrain вы можете решать самые разнообразные проблемы с помощью всего трех или четырех «команд» или строк кода, независимо от того, являются ли данные, с которыми вы работаете, текстовыми, визуальными, графическими или табличными.
Используя предварительно обученную модель BART из библиотеки трансформаторов, ktrain может суммировать текст. Сначала мы создадим экземпляр TransformerSummarizer для фактического суммирования. (Обратите внимание, что для использования этой функции необходима установка PyTorch.)
from ktrain.text.summarization import TransformerSummarizer
ts = TransformerSummarizer()
Давайте продолжим и напишем статью:
article = """ Saturn orbiter and Titan atmosphere probe. Cassini is a joint
NASA/ESA project designed to accomplish an exploration of the Saturnian
system with its Cassini Saturn Orbiter and Huygens Titan Probe. Cassini
is scheduled for launch aboard a Titan IV/Centaur in October of 1997.
After gravity assists of Venus, Earth and Jupiter in a VVEJGA
trajectory, the spacecraft will arrive at Saturn in June of 2004. Upon
arrival, the Cassini spacecraft performs several maneuvers to achieve an
orbit around Saturn. Near the end of this initial orbit, the Huygens
Probe separates from the Orbiter and descends through the atmosphere of
Titan. The Orbiter relays the Probe data to Earth for about 3 hours
while the Probe enters and traverses the cloudy atmosphere to the
surface. After the completion of the Probe mission, the Orbiter
continues touring the Saturnian system for three and a half years. Titan
synchronous orbit trajectories will allow about 35 flybys of Titan and
targeted flybys of Iapetus, Dione and Enceladus. The objectives of the
mission are threefold: conduct detailed studies of Saturn's atmosphere,
rings and magnetosphere; conduct close-up studies of Saturn's
satellites, and characterize Titan's atmosphere and surface."""
We can now summarize this article by using TransformerSummarizer instance:
ts.summarize(article)
Заключение
Прежде чем углубиться в архитектуру BART и данные обучения, в этой статье описываются проблемы, на которые BART пытается ответить, и методология, которая приводит к его выдающейся производительности. Мы также рассмотрели демонстрационный пример вывода с использованием HuggingFace, ktrain и реализации Python от BART. Этот обзор теории и кода даст вам отличный старт, позволяя построить мощную модель seq2seq на основе Transformer на Python.
Ссылки
https://huggingface.co/transformers/v2.11.0/model_doc/bart.html
https://arxiv.org/abs/1910.13461
https://www.projectpro.io/article/transformers-bart-model-explained/553
https://github.com/amaiya/ktrain
https://www.machinelearningplus.com/nlp/text-summarization-approaches-nlp-example/