Merge pull request 'simonov_nikita_lab7' (#219) from simonov_nikita_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/219
This commit is contained in:
commit
47d0e765a9
4
simonov_nikita_lab_7/eng.txt
Normal file
4
simonov_nikita_lab_7/eng.txt
Normal 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.
|
1
simonov_nikita_lab_7/eng_generated.txt
Normal file
1
simonov_nikita_lab_7/eng_generated.txt
Normal 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
|
72
simonov_nikita_lab_7/lab7.py
Normal file
72
simonov_nikita_lab_7/lab7.py
Normal 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)
|
81
simonov_nikita_lab_7/readme.md
Normal file
81
simonov_nikita_lab_7/readme.md
Normal 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
|
||||
```
|
4
simonov_nikita_lab_7/rus.txt
Normal file
4
simonov_nikita_lab_7/rus.txt
Normal file
@ -0,0 +1,4 @@
|
||||
В тихом городе, где время течет медленно, каждый день начинается с мягкого света восходящего солнца, окрашивающего небо в оттенки розового и фиолетового.
|
||||
Местные жители приветливы и знают друг друга по именам.
|
||||
Узкие улочки украшены цветущими клумбами, создавая уют и неповторимый колорит.
|
||||
Вечером в кафе горожане собираются, чтобы поделиться впечатлениями от прошедшего дня и насладиться теплой атмосферой.
|
1
simonov_nikita_lab_7/rus_generated.txt
Normal file
1
simonov_nikita_lab_7/rus_generated.txt
Normal file
@ -0,0 +1 @@
|
||||
В тихом городе городе время течет медленно медленно каждый день начинается с мягкого света восходящего солнца окрашивающего небо в оттенки розового и фиолетового местные жители приветливы и знают друг друга по именам узкие улочки украшены цветущими клумбами создавая уют и неповторимый колорит вечером в горожане собираются чтобы поделиться впечатлениями от прошедшего дня и насладиться теплой атмосферой
|
Loading…
Reference in New Issue
Block a user