51 lines
6.1 KiB
Markdown
51 lines
6.1 KiB
Markdown
|
**Задание**
|
|||
|
***
|
|||
|
Выбрать художественный текст (четные варианты – русскоязычный, нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом.
|
|||
|
|
|||
|
**Как запустить лабораторную**
|
|||
|
***
|
|||
|
Запустить файл main.py
|
|||
|
|
|||
|
**Используемые технологии**
|
|||
|
***
|
|||
|
Библиотеки tensorflow, numpy, их компоненты
|
|||
|
|
|||
|
**Описание лабораторной (программы)**
|
|||
|
***
|
|||
|
Данный код представляет собой пример использования рекуррентной нейронной сети LSTM (Long Short-Term Memory) с использованием библиотеки Keras для обучения модели генерации текста на русском языке.
|
|||
|
|
|||
|
Описание работы кода:
|
|||
|
1. Загрузка и предобработка данных:
|
|||
|
- Импортируются необходимые библиотеки, включая TensorFlow, NumPy и Keras.
|
|||
|
- Открывается файл с русским текстом "rus.txt" и считывается его содержимое в переменную "rus_text".
|
|||
|
- Создается объект "tokenizer_rus" для токенизации текста на отдельные слова.
|
|||
|
- Производится обучение токенизатора на предоставленном русском тексте.
|
|||
|
- Вычисляется общий размер словаря на основе уникальных слов в тексте.
|
|||
|
- Преобразование входных и выходных последовательностей текста в числовой формат, используя токенизатор.
|
|||
|
- Выравнивание входных последовательностей до максимальной длины для обеспечения единой размерности.
|
|||
|
|
|||
|
2. Построение модели:
|
|||
|
- Создается объект модели Sequential.
|
|||
|
- Добавляется слой Embedding для преобразования числовых представлений слов в векторные представления.
|
|||
|
- Добавляется слой LSTM для анализа последовательности входных данных.
|
|||
|
- Добавляется полносвязный слой Dense с функцией активации softmax для прогнозирования следующего слова.
|
|||
|
- Компилируется модель с выбранным оптимизатором и функцией потерь.
|
|||
|
|
|||
|
3. Обучение модели:
|
|||
|
- Обучение модели на тренировочных данных с выбранными параметрами batch_size и epochs.
|
|||
|
|
|||
|
4. Функция генерации текста:
|
|||
|
- Создается функция generate_text, которая принимает модель, токенизатор, максимальную длину последовательности и начальный текст.
|
|||
|
- В цикле генерируются следующие слова на основе текущего состояния модели и добавляются к выходному тексту.
|
|||
|
- Функция возвращает сгенерированный текст.
|
|||
|
|
|||
|
5. Генерация текста на основе обученной модели:
|
|||
|
- Вызывается функция generate_text, передавая ей обученную модель, токенизатор, максимальную длину последовательности и начальный текст.
|
|||
|
- Выводятся результаты, включая потери модели на тренировочных данных и сгенерированный текст на основе обученной модели.
|
|||
|
**Результат**
|
|||
|
***
|
|||
|
Результат сгенерированного текста на русском языке: Был мальчик по имени тимофей он жил в маленьком домике на краю леса у него была большая мечта – стать лучшим рыцарем во всей стране каждый день тимофей тренировался с мечом прыгал через препятствия и никогда не терял надежды он знал что для достижения своей мечты нужно много работать и верить в себя однажды когда тимофей был в лесу он услышал громкий крик он поспешил к месту откуда раздавался крик и увидел что дракон похитил принцессу тимофей решил спасти её и стать настоящим героем он с силой размахнулся мечом и атаковал дракона они долго сражались но тимофей был очень храбрым
|
|||
|
|
|||
|
Потери на тренировочных данных: 0.026399850845336914
|
|||
|
|
|||
|
Вывод: текст получился немного сокращенным, так как стоит ограничение в 100 слов, но довольно похожим и несущим примерный смысл той истории, которая находится в файле.
|