Выбрать художественный текст (четные варианты – русскоязычный,
нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть
для решения задачи генерации. Подобрать архитектуру и параметры так,
чтобы приблизиться к максимально осмысленному результату. Далее
разбиться на пары четный-нечетный вариант, обменяться разработанными
сетями и проверить, как архитектура товарища справляется с вашим текстом.
В завершении подобрать компромиссную архитектуру, справляющуюся
достаточно хорошо с обоими видами текстов.
# Вариант 3
Рекуррентная нейронная сеть и задача
генерации текста
# Запуск
Выполнением скрипта файла (вывод в консоль).
# Описание модели:
Использованы библиотеки:
* numpy (np): популярная библиотека для научных вычислений.
* tensorflow (tf): библиотека для тренировки нейросетей.
* Sequential: тип Keras модель которая позволяет создавать нейросети слой за слоем.
* Embedding, LSTM, Dense: различные типы слоев в нейросетях.
* Tokenizer: класс для конвертации слов в числовой понятный для нейросети формат.
<p></p>
Каждая строка текста переводится в числа с помощью Tokernizer.
Класс Tokenizer в Keras - это утилита обработки текста, которая преобразует текст в
последовательность целых чисел. Он присваивает уникальное целое число (индекс) каждому слову
в тексте и создает словарь, который сопоставляет каждое слово с соответствующим индексом.
Это позволяет вам работать с текстовыми данными в формате, который может быть передан в нейронную сеть.
Все это записывается в input_sequences.
Строим 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 разных мест без повтора)