Merge pull request 'arzamaskina_milana_lab_7 is ready' (#282) from arzamaskina_milana_lab_7 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/282
This commit is contained in:
commit
4498fb5531
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