diff --git a/verina_daria_lab_7/english.txt b/verina_daria_lab_7/english.txt new file mode 100644 index 0000000..e513cde --- /dev/null +++ b/verina_daria_lab_7/english.txt @@ -0,0 +1 @@ +Amidst the bustling cityscape, where the rhythm of life beats in harmony with the urban pulse, each dawn brings forth a cascade of city lights painting the skyline in hues of gold and amber. Strangers pass with nods and smiles, creating a tapestry of diverse connections. Skyscrapers line the streets, reflecting the vibrant energy of a metropolis in constant motion. As night falls, the city's heartbeat resonates in lively gatherings at eclectic eateries, where stories are exchanged, and the city's vibrant spirit comes alive. \ No newline at end of file diff --git a/verina_daria_lab_7/english_generated.txt b/verina_daria_lab_7/english_generated.txt new file mode 100644 index 0000000..dfc200f --- /dev/null +++ b/verina_daria_lab_7/english_generated.txt @@ -0,0 +1 @@ +In the bustling cityscape where the rhythm of life beats in harmony with the urban pulse each dawn brings forth a cascade of city lights painting the skyline in hues of gold and amber strangers pass with nods and smiles creating a tapestry of diverse connections skyscrapers line the streets reflecting the vibrant energy of a metropolis in constant motion as night falls the city's heartbeat resonates in lively gatherings at \ No newline at end of file diff --git a/verina_daria_lab_7/img.png b/verina_daria_lab_7/img.png new file mode 100644 index 0000000..4dc9f32 Binary files /dev/null and b/verina_daria_lab_7/img.png differ diff --git a/verina_daria_lab_7/img_1.png b/verina_daria_lab_7/img_1.png new file mode 100644 index 0000000..bf6a1e3 Binary files /dev/null and b/verina_daria_lab_7/img_1.png differ diff --git a/verina_daria_lab_7/img_2.png b/verina_daria_lab_7/img_2.png new file mode 100644 index 0000000..ba97fe5 Binary files /dev/null and b/verina_daria_lab_7/img_2.png differ diff --git a/verina_daria_lab_7/main.py b/verina_daria_lab_7/main.py new file mode 100644 index 0000000..bbea5f1 --- /dev/null +++ b/verina_daria_lab_7/main.py @@ -0,0 +1,68 @@ +import numpy as np +from tensorflow import keras +from tensorflow.keras.preprocessing.text import Tokenizer +from tensorflow.keras.preprocessing.sequence import pad_sequences + +def prepare_and_train_model(file_path, epochs): + # Считывание данных из файла + 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, y = input_sequences[:, :-1], input_sequences[:, -1] + + # Создание модели рекуррентной нейронной сети + model = keras.Sequential([ + keras.layers.Embedding(len(tokenizer.word_index) + 1, 100, input_length=max_sequence_len-1), + keras.layers.Dropout(0.2), + keras.layers.LSTM(150), + 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_from_model(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 = prepare_and_train_model('russian.txt', 150) +rus_text_generated = generate_text_from_model(model_rus, tokenizer_rus, max_sequence_len_rus, "В", 55) + +model_eng, tokenizer_eng, max_sequence_len_eng = prepare_and_train_model('english.txt', 150) +eng_text_generated = generate_text_from_model(model_eng, tokenizer_eng, max_sequence_len_eng, "In the", 69) + +with open('russian_generated.txt', 'w', encoding='utf-8') as f_rus: + f_rus.write(rus_text_generated) + +with open('english_generated.txt', 'w', encoding='utf-8') as f_eng: + f_eng.write(eng_text_generated) diff --git a/verina_daria_lab_7/readme.md b/verina_daria_lab_7/readme.md new file mode 100644 index 0000000..1861d18 --- /dev/null +++ b/verina_daria_lab_7/readme.md @@ -0,0 +1,35 @@ + +# Генератор Текста на Рекуррентных Нейронных Сетях +## Общее задание + +Выбран художественный англоязычный текст для обучения рекуррентной нейронной сети (RNN) с целью генерации текста. Задача включает подбор архитектуры и параметров для приближения к максимально осмысленным результатам. Далее предусмотрено обмен разработанными сетями с партнером, проверка, как архитектура товарища справляется с вашим текстом, и в конечном итоге подбор компромиссной архитектуры, справляющейся хорошо с обоими видами текстов. + +## Задание по вариантам + +Вариант: Нечетный вариант (художественный англоязычный текст). +Запуск программы +Программу можно запустить через файл app.py. + +Технологии +Язык программирования: Python +Библиотеки: TensorFlow, Keras, Flask + +## Описание работы программы +Программа реализует генерацию текста с использованием рекуррентных нейронных сетей (RNN) с помощью библиотек TensorFlow и Keras. Flask используется для создания веб-приложения, которое взаимодействует с моделью RNN. Пользователь вводит начальный текст (seed text) через веб-интерфейс, после чего программа отправляет запрос на сервер, который в свою очередь использует модель для генерации следующего участка текста, основываясь на введенном начальном тексте. + +Входные данные +Текстовый файл (например, 'your_text_file.txt'), содержащий обучающие данные. +Веб-интерфейс для ввода начального текста. +Выходные данные +Сгенерированный текст, отображаемый в веб-интерфейсе. + +## Вывод консоли: +![img_2.png](img_2.png) +![img_1.png](img_1.png) +![img.png](img.png) + +## Получившийся текст: +In the bustling cityscape where the rhythm of life beats in harmony with the urban pulse each dawn brings forth a cascade of city lights painting the skyline in hues of gold and amber strangers pass with nods and smiles creating a tapestry of diverse connections skyscrapers line the streets reflecting the vibrant energy of a metropolis in constant motion as night falls the city's heartbeat resonates in lively gatherings at + +## Вывод: +В результате выполнения лабораторной работы были успешно созданы и обучены рекуррентные нейронные сети (RNN) для генерации текста на русском и английском языках. diff --git a/verina_daria_lab_7/russian.txt b/verina_daria_lab_7/russian.txt new file mode 100644 index 0000000..fecad3c --- /dev/null +++ b/verina_daria_lab_7/russian.txt @@ -0,0 +1 @@ +В захватывающем мире исследований глубокого космоса, где звезды танцуют свой бескрайний вальс, каждое утро начинается с таинственного свечения далеких галактик, окрашивая космическую панораму в оттенках изумрудных и сапфировых лучей. Космические путешественники встречают друг друга с уважением, обмениваясь впечатлениями о чудесах вселенной. Межзвездные аллеи украшены мерцающими астероидами, создавая ощущение бескрайнего волнения и удивления. По наступлении ночи исследователи созвездий собираются в космических кафе, где звездные истории обретают новые оттенки в мистической атмосфере. \ No newline at end of file diff --git a/verina_daria_lab_7/russian_generated.txt b/verina_daria_lab_7/russian_generated.txt new file mode 100644 index 0000000..8b530a8 --- /dev/null +++ b/verina_daria_lab_7/russian_generated.txt @@ -0,0 +1 @@ +В захватывающем мире исследований глубокого где где звезды танцуют свой бескрайний вальс каждое каждое начинается с таинственного свечения далеких галактик окрашивая космическую панораму в оттенках изумрудных и сапфировых лучей космические путешественники встречают друг друга с уважением обмениваясь впечатлениями о чудесах вселенной межзвездные аллеи украшены мерцающими астероидами создавая ощущение бескрайнего волнения и удивления по наступлении ночи исследователи \ No newline at end of file