From 462c0ea3e096dffa79f7d95f524226a560faeee5 Mon Sep 17 00:00:00 2001 From: ktrepfk Date: Thu, 2 Nov 2023 19:12:30 +0400 Subject: [PATCH] madyshev_egor_lab_7 is ready --- madyshev_egor_lab_7/main.py | 65 +++++++++++++++++++++++++++++++++++ madyshev_egor_lab_7/mumu.txt | 13 +++++++ madyshev_egor_lab_7/readme.md | 17 +++++++++ 3 files changed, 95 insertions(+) create mode 100644 madyshev_egor_lab_7/main.py create mode 100644 madyshev_egor_lab_7/mumu.txt create mode 100644 madyshev_egor_lab_7/readme.md diff --git a/madyshev_egor_lab_7/main.py b/madyshev_egor_lab_7/main.py new file mode 100644 index 0000000..aa24306 --- /dev/null +++ b/madyshev_egor_lab_7/main.py @@ -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) diff --git a/madyshev_egor_lab_7/mumu.txt b/madyshev_egor_lab_7/mumu.txt new file mode 100644 index 0000000..c5c5e1e --- /dev/null +++ b/madyshev_egor_lab_7/mumu.txt @@ -0,0 +1,13 @@ +Артем поежился, представляя себе туннель за семисотым метром. Страшно было даже помыслить о том, чтобы показаться там. За семисотый метр на север не отваживался ходить никто. Патрули доезжали до пятисотого и, осветив пограничный столб прожектором с дрезины, убедившись, что никакая дрянь не переползла за него, торопливо возвращались. Разведчики, здоровые мужики, бывшие морские пехотинцы, и те останавливались на шестьсот восьмидесятом, прятали горящие сигареты в ладонях и замирали, прильнув к приборам ночного видения. А потом медленно, тихо отходили назад, не спуская глаз с туннеля и ни в коем случае не поворачиваясь к нему спиной. + +Дозор, в котором они сейчас стояли, находился на четыреста пятидесятом, в пятидесяти метрах от пограничного столба. Но граница проверялась раз в день, и осмотр закончился уже несколько часов назад. Теперь их пост был крайним, а за часы, прошедшие со времени последней проверки, твари, которых патруль мог спугнуть, наверняка снова начали подползать. Тянуло их на огонек, поближе к людям… + +Артем уселся на свое место и спросил: + +– А что там с Полежаевской случилось? + +И хотя он уже знал эту леденящую кровь историю – рассказывали челноки на станции, его тянуло послушать ее еще раз, как неудержимо тянет детей на страшные байки о безголовых мутантах и упырях, похищающих младенцев. +– С Полежаевской? А ты не слышал? Странная история с ними вышла. Странная и страшная. Сначала у них разведчики стали пропадать. Уходили в туннели и не возвращались. У них, правда, салаги разведчики, не то что наши, но у них ведь и станция поменьше, и народу там не столько живет… Жило. Так вот, стали, значит, у них пропадать разведчики. Один отряд ушел – и нет его. Сначала думали, задержало его что-то, у них там еще туннель петляет, совсем как у нас, – Артему стало не по себе при этих словах, – и ни дозорам, ни тем более со станции ничего не видно, сколько ни свети. Нет их и нет, полчаса нет, час нет, два нет. Казалось бы, где там пропасть – всего ведь на километр уходили, им запретили дальше идти, да они и сами не дураки… В общем, так и не дождались, послали усиленный дозор, те искали, искали, кричали, кричали – все зря. Нету. Пропали разведчики. И ладно еще, что никто не видел, что с ними случилось. Плохо, что слышно ничего не было… Ни звука. И следов никаких. + +Артем уже начал жалеть, что попросил Петра Андреевича рассказать о Полежаевской. Тот был то ли лучше осведомлен, то ли сам что-то додумывал, только рассказывал он такие подробности, какие и не снились челнокам, уж на что те были мастера и любители рассказать байку. От подробностей этих мороз шел по коже и неуютно становилось даже у костра, а любые, пусть и совсем безобидные шорохи из туннеля будоражили воображение. +– Ну, так вот. Стрельбы слышно не было, те и решили, что разведчики, наверное, ушли от них – недовольны, может, чем-то были и сбежали. Ну, и шут с ними. Хотят легкой жизни, хотят со всяким отребьем мотаться, с анархистами всякими, пусть себе мотаются. Так проще было думать. Спокойнее. А через неделю еще одна разведгруппа пропала. Те вообще не должны были дальше полукилометра от станции отходить. И опять та же история. Ни звука, ни следа. Как в воду канули. Тут на станции забеспокоились. Это уже непорядок, когда за неделю два отряда исчезают. С этим уже надо что-то делать. Меры, значит, принимать. Ну, они выставили на трехсотом кордон. Мешков с песком натаскали, пулемет установили, прожектор – по всем правилам фортификации. Послали на Беговую гонца – у них с Беговой и с Улицей 1905 года конфедерация. Раньше Октябрьское Поле тоже было с ними, но потом там что-то случилось, никто не знает точно что, авария какая-то: жить там стало нельзя, и оттуда все разбежались, ну, да это неважно. Послали они на Беговую гонца – предупредить, мол, творится что-то неладное, и о помощи попросить в случае чего. Не успел первый гонец до Беговой добраться, дня не прошло – те еще ответ обдумывали, – прибегает второй, весь в мыле, и рассказывает, что их усиленный кордон погиб поголовно, не сделав ни единого выстрела. Всех перерезали. И словно во сне зарезали – вот что страшно-то! А ведь они и не смогли бы заснуть после пережитого страха, не говоря уж о приказах и инструкциях. Тут на Беговой поняли, что, если ничего не сделать, скоро та же петрушка и у них начнется. Снарядили ударный отряд из ветеранов – около сотни человек, пулеметы, гранатометы… Времени, конечно, это заняло порядком, дня полтора, но все же отправили группу на помощь. А когда та вошла на Полежаевскую, там уже ни одной живой души не было. И тел не было – только кровь повсюду. Вот так вот. И черт знает, кто это сделал. Я вот не верю, что люди вообще на такое способны. \ No newline at end of file diff --git a/madyshev_egor_lab_7/readme.md b/madyshev_egor_lab_7/readme.md new file mode 100644 index 0000000..2f7cdb6 --- /dev/null +++ b/madyshev_egor_lab_7/readme.md @@ -0,0 +1,17 @@ +# Задание +Выбрать художественный текст (четные варианты – русскоязычный, нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. +## Задание по варианту +Русский язык +## Решение +### Запуск программы +Для запуска программы необходимо запустить файл main.py, содержащий код программы +### Используемые технологии +Программа использует следующие библиотеки: +- NumPy: Используется для работы с массивами и матрицами, особенно для обработки данных и их подготовки для обучения моделей глубокого обучения. +- Keras: Используется для создания и обучения нейронных сетей. В коде представлены классы Tokenizer для обработки текста, Sequential для создания модели и различные слои, такие как LSTM, Dense и Embedding. +### Что делает программа +Программа читает текст из файла, обучается на нем, и генерирует новый текст. +### Тесты +Получившийся сгенерированный текст: + Начнем с этого прильнув к к приборам ночного видения а потом потом тихо отходили не спуская глаз и туннеля и ни в коем случае не поворачиваясь к нему спиной дозор в котором они сейчас стояли находился на четыреста пятидесятом +Тест на тексте на английском языке, показал что параметры модели не подходят. Сгенерированный текст представлял собой набор букв. \ No newline at end of file -- 2.25.1