IIS_2023_1/zhukova_alina_lab_7
2023-12-18 19:25:37 +04:00
..
flask-server.py zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
img_screen_1.png zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
img_screen_2.png zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
img_screen_3.png zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
img_screen_4.png zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
img_screen_5.png zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
lab_4_1__7_text_eng.txt zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
lab_4_1__7_text_rus.txt zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00
readme.md zhukova_alina_lab_7 is ready 2023-12-18 19:25:37 +04:00

Задание

Рекуррентная нейронная сеть и задача генерации текста Выбрать тексты на русском и английском языках. Обучить нейронную сеть и подобрать параметры таким образом, чтобы максимально приблизиться к осмысленному результату. Интерпретировать результаты

Вариант №10

Используемые технологии

В лабораторной были использованы библиотеки:

  • keras - используется для работы с реккурентной нейронной сетью и методами машинного обучения
  • numpy - позволяет работать с массивами и матрицами
  • Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения

Используемые компоненты

  • Tokenizer - инструмент для токенизации текста, подсчитывает частоту вхождения слов
  • Sequential - предоставляет линейный набор слоев нейронной сети
  • Embedding - слой keras, который преобразует целочисленный последовательности в плотные векторы
  • LSTM - представляет особую структуру реккурентной нейронной сети, способную к обучению долговременными зависимостями
  • Dense - предоставляет плотные(полносвязные) слои нейросети

Как запустить

Запустить файл flask-server, который поднимет локальный сервер и позволит обратиться к программе через браузер по ссылке http://127.0.0.1:5000/

Что делает программа

В зависимости от параметров в коде, обучается и генерирует русский или английский текст. В первую очередь считанный из файла текст проходит токенизацию, строится модель нейронной сети. Далее полученная реккурентная нейронная сеть обучается, а после генерирует 250 символов исходя из начальной фразы

Анализ

Наиболее качественные результаты модель предоставляет при 15 итерациях обучения. Если итераций недостаточно, модель генерирует не слова, а одно и то же сочетание букв, разделяя сочетания пробелами.

На 15 итерациях с текстом величиной в 3 400 знаков, время обучения составило около 5-6 часов. Потому в программе реализованы функции сохранения и загрузки моделей, чтобы не обучать нейросетей заново, а дообучать на тех же или новых данных.

На выбранной архитектуре сети при введении новых данных качество работы модели значительно снижалось. При работе на одних и тех же данных выполнение 15 итераций достаточно, чтобы сеть могла генерировать слова из текста. Однако осмысленного текста добиться не удалось. Очевидно это связано с выбранной архитектурой, нехватке данных и недостаточном обучении. Можно сделать вывод о том, что обучить нейросеть генерировать осмысленный текст на имеющейся аппаратуре если и возможно, то очень затратно.

Скриншоты работы программы

Наилучший результат генерации русского текста.

Генерация русского текста при достаточном обучении. Почти все сгенерированные слова являются реальными. Однако полученный текст все же нельзя назвать осмысленным img.png

Остальные варианты

Генерация русского текста при недостаточном обучении. Вместо слов создаются сочетания букв, которые очень быстро зацикливаются. img.png

Генерация русского текста при переобучении. Нейросеть не генерирует новый текст, она переписывает фрагмент из обучающих данных. img.png

В случае с английским текстом все происходит точно также.

Наилучший результат генерации английского текста.

Генерация английского текста при достаточном обучении. Почти все сгенерированные слова являются реальными. Однако полученный текст все же нельзя назвать осмысленным img.png

При генерации английских текстов зацикление происходит быстрее. Возможно это связано с меньшим количеством используемых символов. img.png