madyshev_egor_lab_7 is ready #124

Merged
Alexey merged 1 commits from madyshev_egor_lab_7 into main 2023-11-06 22:08:19 +04:00
3 changed files with 95 additions and 0 deletions
Showing only changes of commit 462c0ea3e0 - Show all commits

View File

@ -0,0 +1,65 @@
import numpy as np
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import LSTM, Dense, Embedding
# Чтение текста из файла
with open('mumu.txt', 'r', encoding='utf-8') as file:
text = file.read()
# Параметры модели
seq_length = 50 # Длина входных последовательностей
num_epochs = 50
gen_length = 200 # Длина генерируемого текста
seed_text = "Начнем с этого" # Начальная фраза для генерации
# Создание экземпляра Tokenizer и обучение на тексте
tokenizer = Tokenizer()
tokenizer.fit_on_texts([text])
vocab_size = len(tokenizer.word_index) + 1 # Размер словаря
# Преобразование текста в последовательности чисел
sequences = tokenizer.texts_to_sequences([text])[0]
# Создание входных и выходных последовательностей
X_data = []
y_data = []
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 = np.array(X_data)
y = np.array(y_data)
# Создание модели RNN
model = Sequential()
model.add(Embedding(input_dim=vocab_size, output_dim=128, input_length=seq_length))
model.add(LSTM(256, return_sequences=True))
model.add(LSTM(256))
model.add(Dense(vocab_size, activation='softmax'))
# Компиляция модели
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# Обучение модели
model.fit(X, y, epochs=num_epochs, batch_size=64, verbose=1)
# Функция для генерации текста
def generate_text(seed_text, gen_length):
generated_text = seed_text
for _ in range(gen_length):
sequence = tokenizer.texts_to_sequences([seed_text])[0]
sequence = pad_sequences([sequence], maxlen=seq_length)
prediction = model.predict(sequence, verbose=0)
predicted_index = np.argmax(prediction)
predicted_word = [word for word, index in tokenizer.word_index.items() if index == predicted_index][0]
generated_text += " " + predicted_word
seed_text += " " + predicted_word
return generated_text
# Генерация текста
generated_text = generate_text(seed_text, gen_length)
print(generated_text)

View File

@ -0,0 +1,13 @@
Артем поежился, представляя себе туннель за семисотым метром. Страшно было даже помыслить о том, чтобы показаться там. За семисотый метр на север не отваживался ходить никто. Патрули доезжали до пятисотого и, осветив пограничный столб прожектором с дрезины, убедившись, что никакая дрянь не переползла за него, торопливо возвращались. Разведчики, здоровые мужики, бывшие морские пехотинцы, и те останавливались на шестьсот восьмидесятом, прятали горящие сигареты в ладонях и замирали, прильнув к приборам ночного видения. А потом медленно, тихо отходили назад, не спуская глаз с туннеля и ни в коем случае не поворачиваясь к нему спиной.
Дозор, в котором они сейчас стояли, находился на четыреста пятидесятом, в пятидесяти метрах от пограничного столба. Но граница проверялась раз в день, и осмотр закончился уже несколько часов назад. Теперь их пост был крайним, а за часы, прошедшие со времени последней проверки, твари, которых патруль мог спугнуть, наверняка снова начали подползать. Тянуло их на огонек, поближе к людям…
Артем уселся на свое место и спросил:
А что там с Полежаевской случилось?
И хотя он уже знал эту леденящую кровь историю рассказывали челноки на станции, его тянуло послушать ее еще раз, как неудержимо тянет детей на страшные байки о безголовых мутантах и упырях, похищающих младенцев.
С Полежаевской? А ты не слышал? Странная история с ними вышла. Странная и страшная. Сначала у них разведчики стали пропадать. Уходили в туннели и не возвращались. У них, правда, салаги разведчики, не то что наши, но у них ведь и станция поменьше, и народу там не столько живет… Жило. Так вот, стали, значит, у них пропадать разведчики. Один отряд ушел и нет его. Сначала думали, задержало его что-то, у них там еще туннель петляет, совсем как у нас, Артему стало не по себе при этих словах, и ни дозорам, ни тем более со станции ничего не видно, сколько ни свети. Нет их и нет, полчаса нет, час нет, два нет. Казалось бы, где там пропасть всего ведь на километр уходили, им запретили дальше идти, да они и сами не дураки… В общем, так и не дождались, послали усиленный дозор, те искали, искали, кричали, кричали все зря. Нету. Пропали разведчики. И ладно еще, что никто не видел, что с ними случилось. Плохо, что слышно ничего не было… Ни звука. И следов никаких.
Артем уже начал жалеть, что попросил Петра Андреевича рассказать о Полежаевской. Тот был то ли лучше осведомлен, то ли сам что-то додумывал, только рассказывал он такие подробности, какие и не снились челнокам, уж на что те были мастера и любители рассказать байку. От подробностей этих мороз шел по коже и неуютно становилось даже у костра, а любые, пусть и совсем безобидные шорохи из туннеля будоражили воображение.
Ну, так вот. Стрельбы слышно не было, те и решили, что разведчики, наверное, ушли от них недовольны, может, чем-то были и сбежали. Ну, и шут с ними. Хотят легкой жизни, хотят со всяким отребьем мотаться, с анархистами всякими, пусть себе мотаются. Так проще было думать. Спокойнее. А через неделю еще одна разведгруппа пропала. Те вообще не должны были дальше полукилометра от станции отходить. И опять та же история. Ни звука, ни следа. Как в воду канули. Тут на станции забеспокоились. Это уже непорядок, когда за неделю два отряда исчезают. С этим уже надо что-то делать. Меры, значит, принимать. Ну, они выставили на трехсотом кордон. Мешков с песком натаскали, пулемет установили, прожектор по всем правилам фортификации. Послали на Беговую гонца у них с Беговой и с Улицей 1905 года конфедерация. Раньше Октябрьское Поле тоже было с ними, но потом там что-то случилось, никто не знает точно что, авария какая-то: жить там стало нельзя, и оттуда все разбежались, ну, да это неважно. Послали они на Беговую гонца предупредить, мол, творится что-то неладное, и о помощи попросить в случае чего. Не успел первый гонец до Беговой добраться, дня не прошло те еще ответ обдумывали, прибегает второй, весь в мыле, и рассказывает, что их усиленный кордон погиб поголовно, не сделав ни единого выстрела. Всех перерезали. И словно во сне зарезали вот что страшно-то! А ведь они и не смогли бы заснуть после пережитого страха, не говоря уж о приказах и инструкциях. Тут на Беговой поняли, что, если ничего не сделать, скоро та же петрушка и у них начнется. Снарядили ударный отряд из ветеранов около сотни человек, пулеметы, гранатометы… Времени, конечно, это заняло порядком, дня полтора, но все же отправили группу на помощь. А когда та вошла на Полежаевскую, там уже ни одной живой души не было. И тел не было только кровь повсюду. Вот так вот. И черт знает, кто это сделал. Я вот не верю, что люди вообще на такое способны.

View File

@ -0,0 +1,17 @@
# Задание
Выбрать художественный текст (четные варианты русскоязычный, нечетные англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату.
## Задание по варианту
Русский язык
## Решение
### Запуск программы
Для запуска программы необходимо запустить файл main.py, содержащий код программы
### Используемые технологии
Программа использует следующие библиотеки:
- NumPy: Используется для работы с массивами и матрицами, особенно для обработки данных и их подготовки для обучения моделей глубокого обучения.
- Keras: Используется для создания и обучения нейронных сетей. В коде представлены классы Tokenizer для обработки текста, Sequential для создания модели и различные слои, такие как LSTM, Dense и Embedding.
### Что делает программа
Программа читает текст из файла, обучается на нем, и генерирует новый текст.
### Тесты
Получившийся сгенерированный текст:
Начнем с этого прильнув к к приборам ночного видения а потом потом тихо отходили не спуская глаз и туннеля и ни в коем случае не поворачиваясь к нему спиной дозор в котором они сейчас стояли находился на четыреста пятидесятом
Тест на тексте на английском языке, показал что параметры модели не подходят. Сгенерированный текст представлял собой набор букв.