IIS_2023_1/mashkova_margarita_lab_7/README.md

96 lines
7.2 KiB
Markdown
Raw 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.

# Лабораторная работа №6
## ПИбд-42 Машкова Маргарита (Вариант 19)
## Задание
Выбрать англоязычный и русскоязычный художественные тексты и обучить на нем рекуррентную нейронную сеть для решения задачи генерации.
Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
### Данные:
Художественные тексты в файлах `english_text.txt` и `russian_text.txt`.
## Запуск программы
Для запуска программы необходимо запустить файл main.py
## Используемые технологии
> **Язык программирования:** python
>
> **Библиотеки:**
> - `keras` - библиотека для глубокого обучения. Она предоставляет простой и интуитивно понятный интерфейс для создания
и обучения различных моделей машинного обучения, включая нейронные сети.
> - `numpy` - предоставляет мощные инструменты для работы с многомерными массивами и выполнения математических операций над ними.
## Описание работы программы
Т.к. нейронная сеть принимает на вход числа, необходимо закодировать исходные тексты.
Сделать это можно с помощью Tokenizer. Метод `fit_on_texts()` создает словарь вида (слово - индекс)
на основе частоты использования слов. Чем меньше индекс, тем чаще встречается слово.
Метод `texts_to_sequences()` преобразовывает текст в последовательность чисел.
Таким образом каждое слово принимает целочисленное значение.
![Результат кодирования текста](tokenize.png)
Затем создаются входные и выходные последовательности, инициализируется, настраивается и компилируется модель.
Модель обучается на данных и генерирует текст на основе начальной фразы.
## Тесты
### Варьирование количества слоев и эпох обучения для русскоязычного текста:
1 слой и 50 эпох обучения:
![1 слой 50 эпох](1lstm50ep.png)
Присутствуют осмысленные словосочетания, например, `преобразившейся природе`, `бодрящей свежести`,
`ветерок поднимающийся изредка пощипывает лицо уши` (хоть это должен быть и морозец, но все же)
2 слоя и 50 эпох обучения (1 вариант):
![2 слоя 50 эпох_1вариант](2lstm50ep_v1.png)
Присутствуют осмысленные словосочетания, например, `снежинки кружатся`, `наполняет чувством`,
`в воздухе кружатся`, `невольно наполняет`, `морозец он колюч приятен`
2 слоя и 50 эпох обучения (2 вариант):
![2 слоя 50 эпох_2вариант](2lstm50ep_v2.png)
Помимо некоторых осмысленных словосочетаний, если исключить повторы слов, можно прочесть вполне осмысленную фразу:
`невольно улыбаешься, хочется сказать дружески этому зимнему утру "здравствуй зима"`
2 слоя и 100 эпох обучения:
![2 слоя 100 эпох](2lstm100ep.png)
В данном случае присутствуют осмысленные словосочетания, и при этом эпитеты стоят рядом с нужными существительными
(подходящим по тематике),
т.е., например, снежинки - `мягкие`, `нежные`, `кружатся`, морозец - `колюч`, магазины - `окна`,
солнце - `переливается слепящим блеском` и т.д.
2 слоя и 500 эпох обучения:
![2 слоя 500 эпох](2lstm500ep.png)
Увеличение количества эпох снизило качество генерации текста.
### Варьирование количества слоев и эпох обучения для англоязычного текста:
1 слой и 50 эпох обучения:
![1 слой 50 эпох](1lstm50ep_eng.png)
2 слоя и 50 эпох обучения:
![2 слоя 50 эпох](2lstm50ep_eng.png)
2 слоя и 100 эпох обучения:
![2 слоя 100 эпох](2lstm100ep_eng.png)
2 слоя и 500 эпох обучения:
![2 слоя 500 эпох](2lstm500ep_eng.png)
В данном случае видно, что увеличение количество слоев и эпох положительно влияет на генерацию текста.
**Вывод:** т.к. кодировались в числа не буквы, а слово, для оценки работы модели нужно обращать внимание
на осмысленность условных предложений, а не самих слов. Увелечение количества слоев привело к более хорошему результату
для обоих текстов.
Для русскоязычного текста увеличение количества эпох обучения не сильно улучшает результат, а иногда даже ухудшает.
Скорее всего, потому что данных не так много и они разнообразные, и размер потерь не сильно уменьшается в каждой
эпохе обучения.
Для англоязычного текста увеличение количества эпох привело к сильному улучшению результата
(как минимум, сократились повторения одних и тех же слов подряд).
Скорее всего, потому что частота встречаемости слов, таких как, например, `gingerbread`, `cookies`, слишком большая,
и поэтому малообученная модель их часто использует.
Для русскоязычного текста генерация текста выполнилась сильно лучше, чем для англоязычного.