IIS_2023_1/antonov_dmitry_lab_7
DmitriyAntonov 3a868e5545 реади1
2023-10-12 21:19:26 +04:00
..
screens реади1 2023-10-12 21:19:26 +04:00
for_test.py реади1 2023-10-12 21:19:26 +04:00
lab7.py реади1 2023-10-12 21:19:26 +04:00
my_model.h5 реади1 2023-10-12 21:19:26 +04:00
README.md реади1 2023-10-12 21:19:26 +04:00
rus.txt реади1 2023-10-12 21:19:26 +04:00
small.txt реади1 2023-10-12 21:19:26 +04:00

Лаб 7 RNN

Выбрать художественный текст (четные варианты русскоязычный, нечетные англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом. В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.

Вариант 3

Рекуррентная нейронная сеть и задача генерации текста

Запуск

Выполнением скрипта файла (вывод в консоль).

Описание модели:

Использованы библиотеки:

  • numpy (np): популярная библиотека для научных вычислений.
  • tensorflow (tf): библиотека для тренировки нейросетей.
  • Sequential: тип Keras модель которая позволяет создавать нейросети слой за слоем.
  • Embedding, LSTM, Dense: различные типы слоев в нейросетях.
  • Tokenizer: класс для конвертации слов в числовой понятный для нейросети формат.

Каждая строка текста переводится в числа с помощью 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 разных мест без повтора)

Обучение

Результат