И снова всем привет! На этот раз рассмотрим извлекающие методы, которым нужны эталонные рефераты для обучения. При этом эти методы всё ещё могут лишь выбирать предложения из оригинального текста. К методам этой группы и относятся описываемые ниже SummaRuNNer и BertSumExt. Статьи цикла:
1) Постановка задачи автоматического реферирования и методы без учителя
2) Извлекающие методы автоматического реферирования ⬅️
3) Секреты генерирующего реферирования текстов Я не хочу объяснять вещи, которые не связаны непосредственно с реферированием. Поэтому под спойлером ссылки на другие источники, в которых необходимые для понимания вещи объясняются подробно. Первое, что потребуется — понимание того, как обучать нейронные сети. То есть обратное распространение ошибки и различные модификации стохастического градиентного спуска.
📚🇬🇧 Deep Learning, глава 6
📺🇬🇧 Stanford CS231n, лекция 4
📄🇷🇺 курс Воронцова, «Нейронные сети: градиентные методы оптимизации» Дальше — рекуррентные сети.
📄🇬🇧 «Understanding LSTM Networks»
📄🇷🇺 «LSTM – сети долгой краткосрочной памяти»
📺🇬🇧 Stanford CS224N, лекция 6 И наконец, механизм внимания и внимания-на-себя, Трансформеры и BERT.
📄🇬🇧 курс Лены Войты, глава «Sequence to Sequence (seq2seq) and Attention»
📄🇬🇧 курс Лены Войты, глава «(Introduction to) Transfer Learning»
📄🇬🇧 «The Illustrated BERT, ELMo, and co.»
📄🇷🇺 «BERT, ELMO и Ко в картинках»
📺🇬🇧 Stanford CS224N, лекция 14
💡🇬🇧 «Attention Is All You Need»
💡🇬🇧 «BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding» SummaRuNNer — один из первых нейросетевых извлекающих методов автоматического реферирования с учителем. Основная его идея — метод "оракула", сведение задачи автоматического реферирования к бинарной классификации предложений. Он заключается в том, чтобы набрать предложения из исходного документа так, чтобы квазиреферат из них был максимально похож на эталонный реферат по какой-либо метрике (например, по ROUGE). При этом мы делаем этот набор жадно: сначала выбираем такое первое предложение, которое максимально похоже на эталонный реферат по нашей метрике, потом подбираем второе предложение так, чтобы получившиеся два предложения оптимизировали метрику, и так далее. Останавливаемся тогда, когда добавление нового предложения не улучшает нашу целевую метрику. Вот пример кода для метода "оракула". Архитектура модели представляет из себя двухуровневую двунаправленную рекуррентную нейронную сеть, первый уровень которой проходится по словам, а второй уровень — по предложениям. Схематично она представлена на рисунке ниже.  Подробнее на архитектуре я останавливаться не буду, рекуррентные сети уже не особо актуальны, как и большинство применяемых в этой модели хаков. Отмечу только, что модель по ходу своей работы собирает эмбеддинг документа и использует его в предсказаниях вместе с выходами сети и позиционными эмбеддингами. А также используется упомянутый в первой статье цикла штраф за однообразие. В итоге модель получает для каждого предложения оригинального текста оценку вероятности быть включённым в итоговый квазиреферат. Всё, что нам остаётся сделать — отсортировать предложения по этой оценке и взять первые N в качестве квазиреферата. SummaRuNNeR отлично показал себя на CNN/DailyMail, который долгое время был основным бенчмарком для реферирования, и до сих пор довольно важен. Модель работала лучше всех других моделей на этом наборе данных на момент написания оригинальной статьи (2016 год). Важное её преимущество — высокая по сравнению с абстрактивными методами скорость работы. Мне довелось написать эту модель, код доступен тут. Можно запустить на своих текстах, в README есть пример применения. Работает она очень резво и выдаёт вполне приличные метрики. BertSumExt — метод извлекающего реферирования на основе BERT и сведения к задаче бинарной классификации тем же методом "оракула". Модификации по сравнению с оригинальным BERT: Схематично это всё представлено на рисунке ниже.  А теперь немного субъективного: код у коллег так себе. Основная его часть взята из OpenNMT, но переделана в худшую сторону. Абстракции протекают, баги не исправляются, пулл-реквесты не принимаются. 120+ issues чего только стоят. У меня и моего студента, Лёши Бухтиярова, получалось запустить это всё, но никому такой опыт не советую. И это не единственный неприятный момент. По ablation study модификации с сегментными эмбеддингами в оригинальной статье выходит, что она вообще-то не нужна, прирост там крайне незначительный. В оригинальной статье нет ablation study на последнюю модификацию, но оно есть в предыдущей статье автора. И знаете что? Дополнительный Трансформер тоже не нужен. То есть выходит, что единственное, что нужно для работы модели — взять представления предложений из [CLS] или [SEP] и подать их в линейный слой с сигмоидой, то есть задача сводится к тегировнию токенов. И это правда работает, вот моя модель на основе RuBERT, обученная ровно таким способом (но чередующиеся сегментные эмбеддинги я всё-таки оставил). Бывают отдельные случаи, когда системам автоматического реферирования не позволено генерировать новые тексты. В конце концов, когда автоматика не генерирует отсебятину, доверие к ней выше. И в таких случаях извлекающие методы с учителем — прекрасный выбор. Классификаторы по построению проще и быстрее генераторов, поэтому эти модели могут пригодится ещё и в CPU-bound среде, типа мобильных устройств. Как было отмечено, этим моделям нужна обучающая выборка. В отличие от абстрактивных методов, она не обязана быть большой — тысяч или даже сотен пар должно хватить. Есть ли такие выборки для русского? К счастью, да: Gazeta, MLSUM, XLSum, WikiLingua. Осталось ещё две самых больших и самых главных темы: абстрактивные модели и метрики качества. Увидимся в следующих статьях! Программист