115 lines
8.7 KiB
Markdown
115 lines
8.7 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 разных мест без повтора)
|
||
|
||
Так же модель работает и на русском тексте. Вот что сгенерировала модель на 150 эпохах.
|
||
Предложения взяты из разных мест и выглядят осмысленно.
|
||
"Я хочу летать потому что в этом заложено желание преодолевать границы хочу чувствовать себя
|
||
свободным словно ветер несущим меня к новым приключениям я хочу летать и продолжать этот бескрайний
|
||
полет вперед ибо в этом полете заключена вся суть моего существования существования существования
|
||
существования существования трудности трудности трудности неважными хочу летать потому что."
|
||
|
||
Чем больше текст мы берем, тем более интересные результаты получаем, но моих вычислительных мощностей уже не хватит.
|
||
Так же чем больше прогонов, тем лучше модель, но тоже не до бесконечности можно получить хороший результат.
|
||
<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>
|
||
|
||
<p>
|
||
<div>Обучение 1</div>
|
||
<img src="screens/step1.png" width="650" title="Обучение 1">
|
||
</p>
|
||
<p>
|
||
<div>Обучение 2</div>
|
||
<img src="screens/step2.png" width="650" title="Обучение 2">
|
||
</p>
|
||
<p>
|
||
<div>Обучение 3</div>
|
||
<img src="screens/step3.png" width="650" title="Обучение 3">
|
||
</p>
|
||
<p>
|
||
<div>Обучение 4</div>
|
||
<img src="screens/step4.png" width="650" title="Обучение 4">
|
||
</p>
|
||
<p>
|
||
<div>Обучение 5</div>
|
||
<img src="screens/step5.png" width="650" title="Обучение 5">
|
||
</p> |