IIS_2023_1/alexandrov_dmitrii_lab_7/readme.md

6.3 KiB
Raw Permalink Blame History

Задание

Выбрать художественный текст(четные варианты русскоязычный, нечетные англоязычный)и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом.

Вариант 1: первостепенно - английский текст. Кооперироваться, впрочем, не с кем.

Запуск программы

Файл lab7.py содержит и запускает программу, аргументов и настройки вроде не требует.

Описание программы

Программа представляет собой консольное приложение-инструмент для работы с моделями. Она может создавать и обучать однородные модели для разных текстов. В файлах хранятся два текста: англоязычный data.txt (Остров сокровищ) и русскоязычный rus_data.txt (Хоббит). Также там хранятся две сохранённые обученные модели:

  • model_eng - модель, обученная на английском тексте. На текущий момент 27 эпох обучения.
  • model_rus - модель, обученная на русском тексте. На текущий момент 12 эпох обучения. Обучение проходило 1 день.

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

Программа содержит методы пересоздания модели и дообучения модели (передаётся модель и количество эпох дообучения). Оба метода отключены и могут быть подключены обратно при необходимости.

После возможных пересоздания и дообучения моделей программа запрашивает текст-кодовое слово, которое модели будет необходимо продолжить, сгенерировав свой текст.

Сама модель имеет следующую архитектуру:

  • слой, преобразующий слова в векторы плотности, Embedding с входом, равным числу слов, с выходом 100, и с длиной ввода, равной длине максимального слова.
  • слой с блоками долгой краткосрочной памятью, составляющая рекуррентную сеть, LSTM со 150 блоками.
  • слой, задающий степень разрыва нейронных связей между соседними слоями, Dropout с процентом разрыва 15.
  • слой вычисления взвешенных сумм Dense с числом нейронов, равным числу слов в тексте и функцией активации 'softmax'

Результаты тестирования

По результатам дневного обучения можно сказать следующее:

Модель успешно генерирует бессмысленные последовательности слов, которые либо состоят из обрывков фраз, либо случайно (но достаточно часто) складываются в осмысленные словосочетания, но не более.

Примеры генераций (первое слово - код генерации):

Модель, обученная на 'Острове сокровищ', 27 эпох обучения:

ship that he said with the buccaneers a gentleman and neither can read and figure but what is it anyway ah 'deposed' that's it is a

chest said the doctor touching the black spot mind by the arm who is the ship there's long john now you are the first that were

silver said the doctor if you can get the treasure you can find the ship there's been a man that has lost his score out he

Модель, обученная на 'Хоббите', 12 эпох обучения:

дракон и тут они услыхали про смога он понял что он стал видел и разозлился как слоны у гэндальфа хороши но все это было бы он

поле он не мог сообразить что он делал то в живых и слышал бильбо как раз доедал пуще прежнего а бильбо все таки уж не мог

паук направился к нему толстому из свертков они добрались до рассвета и даже дальше не останавливаясь а именно что гоблины обидело бильбо они не мог ничего

Итого: Даже такая простая модель с таким малым количеством эпох обучения может иногда сгенерировать нечто осмысленное. Однако для генерации нормального текста необходимо длительное обучение и более сложная модель, из нескольких слоёв LSTM и Dropout после них, что, однако, потребовало бы вычислительные мощности, которых у меня нет в наличии. Иначе следует взять очень маленький текст.