## Задание Рекуррентная нейронная сеть и задача генерации текста Выбрать тексты на русском и английском языках. Обучить нейронную сеть и подобрать параметры таким образом, чтобы максимально приблизиться к осмысленному результату. Интерпретировать результаты Вариант №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)