84 lines
6.8 KiB
Markdown
84 lines
6.8 KiB
Markdown
|
# Лаб 7 RNN
|
|||
|
|
|||
|
Выбрать художественный текст (четные варианты – русскоязычный,
|
|||
|
нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть
|
|||
|
для решения задачи генерации. Подобрать архитектуру и параметры так,
|
|||
|
чтобы приблизиться к максимально осмысленному результату. Далее
|
|||
|
разбиться на пары четный-нечетный вариант, обменяться разработанными
|
|||
|
сетями и проверить, как архитектура товарища справляется с вашим текстом.
|
|||
|
В завершении подобрать компромиссную архитектуру, справляющуюся
|
|||
|
достаточно хорошо с обоими видами текстов.
|
|||
|
|
|||
|
# Вариант 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 разных мест без повтора)
|
|||
|
<p>
|
|||
|
<div>Обучение</div>
|
|||
|
<img src="screens/img_2.png" width="650" title="Обучение">
|
|||
|
</p>
|
|||
|
|
|||
|
<p>
|
|||
|
<div>Результат</div>
|
|||
|
<img src="screens/img_3.png" width="650" title="Результат">
|
|||
|
</p>
|