50 lines
6.3 KiB
Markdown
50 lines
6.3 KiB
Markdown
### Задание
|
||
Выбрать художественный текст(четные варианты – русскоязычный, нечетные – англоязычный)и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом.
|
||
|
||
Вариант 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 после них, что, однако, потребовало бы вычислительные мощности, которых у меня нет в наличии. Иначе следует взять очень маленький текст.
|