IIS_2023_1/alexandrov_dmitrii_lab_7/readme.md

50 lines
6.3 KiB
Markdown
Raw Permalink Normal View 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 после них, что, однако, потребовало бы вычислительные мощности, которых у меня нет в наличии. Иначе следует взять очень маленький текст.