arzamaskina_milana_lab_7 is ready #282

Merged
Alexey merged 1 commits from arzamaskina_milana_lab_7 into main 2023-12-28 10:37:15 +04:00
6 changed files with 123 additions and 0 deletions

View File

@ -0,0 +1,46 @@
# Лабораторная работа №7
## Рекуррентная нейронная сеть и задача генерации текста
#### ПИбд-41 Арзамаскина Милана
#### Вариант №2
### Какие технологии использовались:
Используемые библиотеки:
* numpy
* keras
* tensorflow
### Как запустить:
* установить python, numpy, keras, tensorflow
* запустить проект (стартовая точка - main.py)
### Что делает программа:
На основе выбранных художественных текстов происходит обучение рекуррентной нейронной сети для решения задачи генерации.
Необходимо подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
* Читает текст из файлов (english.txt, russian.txt)
* Получает входные, выходные данные (X, y), размер словаря и токенайзер. Используем Tokenizer с настройкой char_level=True
* Создаёт объект Sequential (последовательная рекуррентная нейронная сеть) и добавление двух слоёв LSTM. Dropout — это метод регуляризации для нейронных сетей и моделей глубокого обучения, решение проблемы переобучения. Слой Dense с функцией активации softmax используется для предсказания следующего слова
* Компилирует модель
* Обучает модель
* Генерирует текст
#### Сгенерированные тексты:
Генерация на русском языке:
![Result](img1.png)
Генерация на английском языке:
![Result](img2.png)
### Вывод:
Программа способна сгенерировать осмысленный текст в каждом из случаев.

View File

@ -0,0 +1,8 @@
The cloud shuddered with blue flame. Thunder rumbled slowly.
It either intensified or almost died down. And the rain, obeying the thunder, began to fall harder at times and rustle widely through the leaves, then stopped.
Soon the sun broke through the clouds. The old Pushkin Park in Mikhailovskoye and the steep banks of Soroti were ablaze with red clay and wet grass.
A slender rainbow lit up across the cloudy distance. It sparkled and smoked, surrounded by wisps of ashen clouds.
The rainbow looked like an arch erected on the border of a protected land. Here, in Pushkins places, thoughts about the Russian language arose with particular force.
Here Pushkin wandered with his head uncovered, with his cold hair tangled by the autumn wind, listening to the wet hum of the pine tops, looking, squinting,
from where the autumn clouds rush, I rushed around the fairs. Here wonderful words overwhelmed him, oppressed his soul and, finally, were composed, one by one, with the stub of a goose feather, into ringing stanzas.

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -0,0 +1,62 @@
import numpy as np
from keras.layers import LSTM, Dense
from keras.models import Sequential
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import Tokenizer
# Чтение текста из файла
# with open('russian.txt', 'r', encoding='utf-8') as file:
# text = file.read()
with open('english.txt', 'r', encoding='utf-8') as file:
text = file.read()
# Обучение Tokenizer на тексте
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts([text])
sequences = tokenizer.texts_to_sequences([text])[0]
# Создание x, y последовательностей
X_data, y_data = [], []
seq_length = 10
for i in range(seq_length, len(sequences)):
sequence = sequences[i - seq_length:i]
target = sequences[i]
X_data.append(sequence)
y_data.append(target)
# Преобразование в массивы
X_mass = pad_sequences(X_data, maxlen=seq_length)
y_mass = np.array(y_data)
# Создание модели
vocab_size = len(tokenizer.word_index) + 1
model = Sequential()
model.add(LSTM(256, input_shape=(seq_length, 1), return_sequences=True))
model.add(LSTM(128, input_shape=(seq_length, 1)))
model.add(Dense(vocab_size, activation='softmax'))
# Компиляция
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Обучение
model.fit(X_mass, y_mass, epochs=100, verbose=1)
# Функция генерации
def generate_text(_text, gen_length):
generated_text = _text
for _ in range(gen_length):
seq = tokenizer.texts_to_sequences([_text])[0]
seq = pad_sequences([seq], maxlen=seq_length)
prediction = model.predict(seq)[0]
predicted_index = np.argmax(prediction)
predicted_char = tokenizer.index_word[predicted_index]
generated_text += predicted_char
_text += predicted_char
_text = _text[1:]
return generated_text
# Генерация текста
# _text = "Она сверкала"
_text = "It sparkled and smoked"
generate_text = generate_text(_text, 250)
print(generate_text)

View File

@ -0,0 +1,7 @@
Тучу передернуло синим пламенем. Медленно загремел гром.
Он то усиливался, то почти затихал. И дождь, подчиняясь грому, начал временами идти сильнее и широко шуметь по листве, потом останавливался.
Вскоре сквозь тучи пробилось солнце. Старый пушкинский парк в Михайловском и крутые берега Сороти запылали рыжей глиной и мокрой травой.
Стройная радуга зажглась нал пасмурной далью. Она сверкала и дымилась, окруженная космами пепельных туч.
Радуга была похожа на арку, воздвигнутую на границе заповедной земли. С особенной силой здесь, в пушкинских местах, возникали мысли о русском языке.
Здесь Пушкин бродил с непокрытой головой, со спутанными осенним ветром холодными волосами, слушал влажный гул сосновых вершин, смотрел, прищурившись,
откуда несутся осенние тучи, толкался по ярмаркам. Здесь чудесные слова переполняли его, стесняли его душу и, наконец, слагались по огрызком гусиного пера в звенящие строфы.