simonov_nikita_lab7

This commit is contained in:
Никита Симонов 2023-11-30 23:53:21 +04:00
parent a8c58683dd
commit ca2abe9bb4
6 changed files with 163 additions and 0 deletions

View File

@ -0,0 +1,4 @@
In a quiet town, where time flows slowly, each day begins with the soft light of the rising sun painting the sky in shades of pink and purple.
The locals are friendly, knowing each other by name.
Narrow streets are adorned with blooming flower beds, creating a sense of comfort and a unique atmosphere.
In the evening, residents gather at cafes to share impressions of the day and enjoy the warm ambiance.

View File

@ -0,0 +1 @@
In the a quiet town time flows slowly each day begins with the soft light of the rising sun painting the sky in shades of pink and purple the locals are friendly knowing each other by name narrow streets are adorned with blooming flower beds creating a sense of comfort and a unique atmosphere in the evening residents gather at cafes to share impressions of the day and enjoy the ambiance

View File

@ -0,0 +1,72 @@
import numpy as np
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# функция подготовки текста, создания и тренировки модели
def train_model(file_path, epochs):
# cчитывание данных из файла
with open(file_path, encoding='utf-8') as f:
data = f.read()
# создание токенизатора
tokenizer = Tokenizer()
tokenizer.fit_on_texts([data])
# преобразование текста в последовательности чисел
sequences = tokenizer.texts_to_sequences([data])
# создание обучающих данных
input_sequences = []
for sequence in sequences:
for i in range(1, len(sequence)):
n_gram_sequence = sequence[:i+1]
input_sequences.append(n_gram_sequence)
# предобработка для получения одинаковой длины последовательностей
max_sequence_len = max([len(sequence) for sequence in input_sequences])
input_sequences = pad_sequences(input_sequences, maxlen=max_sequence_len, padding='pre')
# разделение на входные и выходные данные
x = input_sequences[:, :-1]
y = input_sequences[:, -1]
# создание модели рекуррентной нейронной сети
model = keras.Sequential()
model.add(keras.layers.Embedding(len(tokenizer.word_index)+1, 100, input_length=max_sequence_len-1))
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.LSTM(150))
model.add(keras.layers.Dense(len(tokenizer.word_index)+1, activation='softmax'))
# компиляция и обучение модели
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x, y, epochs=epochs, verbose=1)
return model, tokenizer, max_sequence_len
# функция генерации текста
def generate_text(model, tokenizer, max_sequence_len, seed_text, next_words):
for _ in range(next_words):
token_list = tokenizer.texts_to_sequences([seed_text])[0]
token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')
predicted = model.predict(token_list)
predict_index = np.argmax(predicted, axis=-1)
word = tokenizer.index_word.get(predict_index[0])
seed_text += " " + word
return seed_text
# русский текст
model_rus, tokenizer_rus, max_sequence_len_rus = train_model('rus.txt', 150)
rus_text_generated = generate_text(model_rus, tokenizer_rus, max_sequence_len_rus, "В", 55)
# английский текст
model_eng, tokenizer_eng, max_sequence_len_eng = train_model('eng.txt', 150)
eng_text_generated = generate_text(model_eng, tokenizer_eng, max_sequence_len_eng, "In the", 69)
# Сохранение в файлы
with open('rus_generated.txt', 'w', encoding='utf-8') as f_rus:
f_rus.write(rus_text_generated)
with open('eng_generated.txt', 'w', encoding='utf-8') as f_eng:
f_eng.write(eng_text_generated)

View File

@ -0,0 +1,81 @@
# Лабораторная работа №7 Вариант 25.
## Задание
Выбрать художественный текст (русскоязычный и англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации.
Подобрать архитектуру, справляющуюся достаточно хорошо с обоими видами текстов, и параметры так, чтобы приблизиться к максимально осмысленному результату.
## Содержание
- [Лабораторная работа №7 Вариант 25.](#лабораторная-работа-7-вариант-25)
- [Задание](#задание)
- [Содержание](#содержание)
- [Введение](#введение)
- [Зависимости](#зависимости)
- [Запуск приложения](#запуск-приложения)
- [Описание кода](#описание-кода)
- [Заключение](#заключение)
## Введение
Этот код создает и обучает рекуррентные нейронные сети для генерации текста на русском и английском языках. Он использует библиотеку TensorFlow и Keras для построения модели и обучения.
## Зависимости
Для работы этого приложения необходимы следующие библиотеки Python:
- NumPy
- TensorFlow
Вы можете установить их с помощью pip:
```bash
pip install numpy tensorflow
```
## Запуск приложения
Чтобы запустить эту программу, выполните следующую команду:
```bash
python lab7.py
```
Результат выведется в файлы.
## Описание кода
1. Подготовка текста:
- Текст читается из файла и токенизируется.
- Создаются обучающие данные с использованием n-грамм.
- Проводится предобработка для унификации длины последовательностей.
2. Создание и обучение модели:
- Создается рекуррентная нейронная сеть с использованием слоев Embedding, Dropout, LSTM и Dense.
- Модель компилируется с выбранными параметрами.
- Обучение модели на входных и выходных данных.
3. Генерация текста:
- Модель используется для предсказания следующего слова на основе введенного текста.
- Сгенерированный текст постепенно увеличивается, добавляя новые слова.
- Сохранение результатов:
Сгенерированный текст сохраняется в новые файлы для дальнейшего использования или анализа.
## Заключение
После выполнения кода будут созданы два файла:
- rus_generated.txt: Сгенерированный текст на русском языке.
```
В тихом городе городе время течет медленно медленно каждый день начинается с мягкого света восходящего солнца окрашивающего небо в оттенки розового и фиолетового местные жители приветливы и знают друг друга по именам узкие улочки украшены цветущими клумбами создавая уют и неповторимый колорит вечером в горожане собираются чтобы поделиться впечатлениями от прошедшего дня и насладиться теплой атмосферой
```
- eng_generated.txt: Сгенерированный текст на английском языке.
```
In the a quiet town time flows slowly each day begins with the soft light of the rising sun painting the sky in shades of pink and purple the locals are friendly knowing each other by name narrow streets are adorned with blooming flower beds creating a sense of comfort and a unique atmosphere in the evening residents gather at cafes to share impressions of the day and enjoy the ambiance
```

View File

@ -0,0 +1,4 @@
В тихом городе, где время течет медленно, каждый день начинается с мягкого света восходящего солнца, окрашивающего небо в оттенки розового и фиолетового.
Местные жители приветливы и знают друг друга по именам.
Узкие улочки украшены цветущими клумбами, создавая уют и неповторимый колорит.
Вечером в кафе горожане собираются, чтобы поделиться впечатлениями от прошедшего дня и насладиться теплой атмосферой.

View File

@ -0,0 +1 @@
В тихом городе городе время течет медленно медленно каждый день начинается с мягкого света восходящего солнца окрашивающего небо в оттенки розового и фиолетового местные жители приветливы и знают друг друга по именам узкие улочки украшены цветущими клумбами создавая уют и неповторимый колорит вечером в горожане собираются чтобы поделиться впечатлениями от прошедшего дня и насладиться теплой атмосферой