IIS_2023_1/antonov_dmitry_lab_7/README.md
DmitriyAntonov c15ab42cd4 реади3
2023-10-14 14:43:47 +04:00

115 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лаб 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>