96 lines
7.2 KiB
Markdown
96 lines
7.2 KiB
Markdown
# Лабораторная работа №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`, слишком большая,
|
||
и поэтому малообученная модель их часто использует.
|
||
|
||
Для русскоязычного текста генерация текста выполнилась сильно лучше, чем для англоязычного.
|