arzamaskina_milana_lab_7 is ready #282
46
arzamaskina_milana_lab_7/README.md
Normal file
46
arzamaskina_milana_lab_7/README.md
Normal 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)
|
||||||
|
|
||||||
|
|
||||||
|
### Вывод:
|
||||||
|
|
||||||
|
Программа способна сгенерировать осмысленный текст в каждом из случаев.
|
8
arzamaskina_milana_lab_7/english.txt
Normal file
8
arzamaskina_milana_lab_7/english.txt
Normal 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 Pushkin’s 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.
|
||||||
|
|
BIN
arzamaskina_milana_lab_7/img1.png
Normal file
BIN
arzamaskina_milana_lab_7/img1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 KiB |
BIN
arzamaskina_milana_lab_7/img2.png
Normal file
BIN
arzamaskina_milana_lab_7/img2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
62
arzamaskina_milana_lab_7/main.py
Normal file
62
arzamaskina_milana_lab_7/main.py
Normal 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)
|
7
arzamaskina_milana_lab_7/russian.txt
Normal file
7
arzamaskina_milana_lab_7/russian.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Тучу передернуло синим пламенем. Медленно загремел гром.
|
||||||
|
Он то усиливался, то почти затихал. И дождь, подчиняясь грому, начал временами идти сильнее и широко шуметь по листве, потом останавливался.
|
||||||
|
Вскоре сквозь тучи пробилось солнце. Старый пушкинский парк в Михайловском и крутые берега Сороти запылали рыжей глиной и мокрой травой.
|
||||||
|
Стройная радуга зажглась нал пасмурной далью. Она сверкала и дымилась, окруженная космами пепельных туч.
|
||||||
|
Радуга была похожа на арку, воздвигнутую на границе заповедной земли. С особенной силой здесь, в пушкинских местах, возникали мысли о русском языке.
|
||||||
|
Здесь Пушкин бродил с непокрытой головой, со спутанными осенним ветром холодными волосами, слушал влажный гул сосновых вершин, смотрел, прищурившись,
|
||||||
|
откуда несутся осенние тучи, толкался по ярмаркам. Здесь чудесные слова переполняли его, стесняли его душу и, наконец, слагались по огрызком гусиного пера в звенящие строфы.
|
Loading…
Reference in New Issue
Block a user