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) |