80 lines
6.2 KiB
Markdown
80 lines
6.2 KiB
Markdown
|
## Задание
|
|||
|
Рекуррентная нейронная сеть и задача генерации текста
|
|||
|
Выбрать тексты на русском и английском языках.
|
|||
|
Обучить нейронную сеть и подобрать параметры таким образом,
|
|||
|
чтобы максимально приблизиться к осмысленному результату.
|
|||
|
Интерпретировать результаты
|
|||
|
|
|||
|
Вариант №10
|
|||
|
|
|||
|
## Используемые технологии
|
|||
|
В лабораторной были использованы библиотеки:
|
|||
|
+ keras - используется для работы с реккурентной нейронной сетью и методами машинного обучения
|
|||
|
+ numpy - позволяет работать с массивами и матрицами
|
|||
|
+ Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения
|
|||
|
|
|||
|
## Используемые компоненты
|
|||
|
+ Tokenizer - инструмент для токенизации текста, подсчитывает частоту вхождения слов
|
|||
|
+ Sequential - предоставляет линейный набор слоев нейронной сети
|
|||
|
+ Embedding - слой keras, который преобразует целочисленный последовательности
|
|||
|
в плотные векторы
|
|||
|
+ LSTM - представляет особую структуру реккурентной нейронной сети,
|
|||
|
способную к обучению долговременными зависимостями
|
|||
|
+ Dense - предоставляет плотные(полносвязные) слои нейросети
|
|||
|
|
|||
|
## Как запустить
|
|||
|
Запустить файл flask-server, который поднимет локальный сервер
|
|||
|
и позволит обратиться к программе через браузер по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
|
|||
|
|
|||
|
## Что делает программа
|
|||
|
В зависимости от параметров в коде, обучается и генерирует русский или английский текст.
|
|||
|
В первую очередь считанный из файла текст проходит токенизацию, строится модель нейронной сети.
|
|||
|
Далее полученная реккурентная нейронная сеть обучается, а после генерирует 250 символов
|
|||
|
исходя из начальной фразы
|
|||
|
|
|||
|
## Анализ
|
|||
|
|
|||
|
Наиболее качественные результаты модель предоставляет при 15 итерациях обучения.
|
|||
|
Если итераций недостаточно, модель генерирует не слова, а одно и то же сочетание букв,
|
|||
|
разделяя сочетания пробелами.
|
|||
|
|
|||
|
На 15 итерациях с текстом величиной в 3 400 знаков, время обучения составило около 5-6 часов.
|
|||
|
Потому в программе реализованы функции сохранения и загрузки моделей, чтобы не обучать нейросетей заново,
|
|||
|
а дообучать на тех же или новых данных.
|
|||
|
|
|||
|
На выбранной архитектуре сети при введении новых данных качество работы модели значительно снижалось.
|
|||
|
При работе на одних и тех же данных выполнение 15 итераций достаточно, чтобы сеть могла генерировать
|
|||
|
слова из текста. Однако осмысленного текста добиться не удалось. Очевидно это связано с
|
|||
|
выбранной архитектурой, нехватке данных и недостаточном обучении. Можно сделать вывод о том,
|
|||
|
что обучить нейросеть генерировать осмысленный текст на имеющейся аппаратуре если и возможно,
|
|||
|
то очень затратно.
|
|||
|
|
|||
|
## Скриншоты работы программы
|
|||
|
|
|||
|
**Наилучший результат генерации русского текста.**
|
|||
|
|
|||
|
Генерация русского текста при достаточном обучении. Почти все сгенерированные слова являются реальными.
|
|||
|
Однако полученный текст все же нельзя назвать осмысленным
|
|||
|
![img.png](img_screen_2.png)
|
|||
|
|
|||
|
**Остальные варианты**
|
|||
|
|
|||
|
Генерация русского текста при недостаточном обучении. Вместо слов создаются сочетания букв,
|
|||
|
которые очень быстро зацикливаются.
|
|||
|
![img.png](img_screen_1.png)
|
|||
|
|
|||
|
Генерация русского текста при переобучении. Нейросеть не генерирует новый текст, она переписывает
|
|||
|
фрагмент из обучающих данных.
|
|||
|
![img.png](img_screen_3.png)
|
|||
|
|
|||
|
В случае с английским текстом все происходит точно также.
|
|||
|
|
|||
|
**Наилучший результат генерации английского текста.**
|
|||
|
|
|||
|
Генерация английского текста при достаточном обучении. Почти все сгенерированные слова являются реальными.
|
|||
|
Однако полученный текст все же нельзя назвать осмысленным
|
|||
|
![img.png](img_screen_4.png)
|
|||
|
|
|||
|
При генерации английских текстов зацикление происходит быстрее. Возможно
|
|||
|
это связано с меньшим количеством используемых символов.
|
|||
|
![img.png](img_screen_5.png)
|