.. | ||
screens | ||
lab7.py | ||
my_model.h5 | ||
README.md | ||
rus.txt | ||
small.txt |
Лаб 7 RNN
Выбрать художественный текст (четные варианты – русскоязычный, нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом. В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.
Вариант 3
Рекуррентная нейронная сеть и задача генерации текста
Запуск
Выполнением скрипта файла (вывод в консоль).
Описание модели:
Использованы библиотеки:
- numpy (np): популярная библиотека для научных вычислений.
- tensorflow (tf): библиотека для тренировки нейросетей.
- Sequential: тип Keras модель которая позволяет создавать нейросети слой за слоем.
- Embedding, LSTM, Dense: различные типы слоев в нейросетях.
- Tokenizer: класс для конвертации слов в числовой понятный для нейросети формат.
Строим RNN модель используя Keras:
-
Embedding: Этот слой превращает числа в векторы плотности фиксированного размера. Так же известного как "word embeddings". Вложения слов - это плотные векторные представления слов в непрерывном векторном пространстве.Они позволяют нейронной сети изучать и понимать взаимосвязи между словами на основе их контекста в содержании текста.
-
LSTM: это тип рекуррентной нейронной сети (RNN), которая предназначена для обработки зависимостей в последовательностях.
-
Dense: полносвязный слой с множеством нейронов, нейронов столько же сколько и уникальных слов. Он выводит вероятность следующего слова.
-
Модель обучаем на разном количестве эпох, по умолчанию epochs = 100 (итераций по всему набору данных).
Определеяем функцию generate_text которая принимает стартовое слово, а также, число слов для генерации. Модель генерирует текст путем многократного предсказания следующего слова на основе предыдущих слов в начальном тексте.
- В конце мы получаем сгенерированную на основе текста последовательность.
Задача генерации англоязычного текста
На вход подаем историю с похожими повторяющимися слова. Историю сохраняем в файл. Задача проверить насколько сеть не станет повторять текст, а будет действительно генерировать относительно новый текст.
Результаты
Тестируется английский текст, приложенный в репозитории.
-
на 50 эпохах ответ на I want
-
I want to soar high up in the sky like to glide through the clouds feeling the wind beneath my wings i want to fly i want to fly i want to fly i want to fly i want to fly i want to fly i want to fly i want to
-
на 100 эпох ответ на I want
-
I want to fly i want to soar high up in the sky like a bird to glide through the clouds feeling the wind beneath my wings i want to fly i want to fly i want to spread my wings and soar into the open sky to glide far above the
-
на 150 эпохах ответ на I want
-
I want to fly i want to spread my wings and soar into the open sky to glide far above the earth unbounded by gravity i want to fly i want to fly i want to fly i want to soar high up in the sky like a bird to glide through
-
на 220 эпохах ответ на I want
-
I want to fly i want to soar high up in the sky like a bird to glide through the clouds feeling the wind beneath my wings i want to fly i want to fly i want to fly i want to fly i want to fly i want to fly i
-
На 220 эпохах результаты хуже, это произошло скорее всего из-за переобучения(грубый повтор).
-
На 50 эпохах нейронная сеть плохо обучена (из 1 места плюс повтор)
-
На 100 эпохах средний результат (из 2 мест)
-
На 150 эпохах нейронная сеть показывает наилучший результат (из 3 разных мест без повтора)