На основе трансформера, как улучшить результаты генерации текста?

Aug 19 2020

Если я не буду предварительно обучать модель генерации текста, такую ​​как BART, как улучшить результат на основе преобразователя, такого как tensor2tensor?

Какие есть идеи по улучшению преобразователя в задаче генерации текста?

Ответы

1 noe Aug 19 2020 at 14:41

Если у вас есть много данных для обучения, вам следует применить методы, используемые в больших моделях трансформаторов, например GPT-2 : очень глубокие модели (48 уровней для параметров 1,5B), модифицированная инициализация, предварительная нормализация и обратимая токенизация. . Вы также можете применить шаблоны рассеянного внимания GPT-3 с локальными полосами.

Если у вас очень мало данных для обучения, вы можете применить «неписаные» агрессивные методы, описанные в этом твите , а именно: увеличение данных, прерывание дискретного встраивания, нормальный отсев и снижение веса, а также много времени на обучение пациента.

Обновление: я считаю, что тема твита, о которой я упоминал, важна, поэтому вот самые важные твиты:

  • Как можно успешно обучать трансформеров на небольших наборах данных, таких как PTB и WikiText-2? LSTM лучше подходят для небольших наборов данных? Я провел 339 экспериментов на 568 часов работы графического процессора и нашел несколько ответов. У меня нет времени писать сообщения в блоге, поэтому вместо этого я буду писать в твиттере.

  • Чтобы дать немного предыстории: все это произошло из-за моего прошлого разочарования по поводу репликации результатов Transformer-XL на PTB и очень плохих результатов на WikiText-2 (WT2). На WT2 моей лучшей моделью после 200+ экспериментов было 90 человек на человека, что далеко от стандартных базовых показателей LSTM (65,8 человек).

  • ...

  • Ключевой вывод заключается в следующем: в режиме небольшого набора данных все сводится к увеличению набора данных. Аналогом компьютерного зрения является то, что вы получаете гораздо лучшие результаты, особенно на небольших наборах данных, если выполняете определенные дополнения набора данных. Это также упорядочивает модель.

  • Наиболее значительный прирост производительности достигается за счет исключения дискретного встраивания: вы встраиваете как обычно, но теперь с вероятностью p вы обнуляете весь вектор слов. Это похоже на моделирование языка с масками, но цель не в том, чтобы предсказать маску, а просто в обычном LM с неопределенным контекстом.

  • Вторым по важности фактором является регулярный выпадение входных данных: вы берете встраиваемые и выпадающие элементы с вероятностью p. Это также имеет эффект увеличения данных, очень похожий на отбрасывание случайных пикселей для изображений. Как правильно думать об этом? 1/2

  • Помните, что мы можем сделать Король-мужчина + женщина = Королева? Теперь представьте, что исключение ввода удаляет компонент «человек» из «Короля». Это заставляет модель распределять конкретную информацию (в данном случае пол) по нескольким измерениям, чтобы улучшить обобщение и сделать ее более надежной. 2/2

  • В противном случае это игра в дальнейшую регуляризацию (большее количество выпадений + снижение веса) и терпение. Я могу натренировать хорошую модель без этих трюков за 15 минут и получить 97 человек. Если я применяю все эти исключения, модель не подходит после 7 часов обучения до 63,4 чел. (Лучше, чем LSTM).

  • Вы также можете применить эти рецепты увеличения данных к большим наборам данных, но никто не захочет месяцами тренироваться на WT-103 за пару баллов на человека. На мой взгляд, методы, требующие так много дополнительных вычислений, больше вредны для сообщества, чем полезны. 1/2

  • Здесь код изменяется на общедоступное репозиторий Transformer-XL, на котором основаны мои результаты: https://github.com/TimDettmers/transformer-xl/tree/wikitext2

  • С моими изменениями в общедоступном репозитории Transformer-XL вы можете запустить этот скрипт, чтобы снизить до 63,4 человек на WT2: https://github.com/TimDettmers/transformer-xl/blob/wikitext2/pytorch/replicate_wt2.sh