shadaev_anton_lab_7 #137
@ -1,13 +1,81 @@
|
||||
# IIS_2023_1
|
||||
### Задание
|
||||
Выбрать художественный текст (четные варианты – русскоязычный, нечетные – англоязычный) и обучить на нем рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы приблизиться к максимально осмысленному результату. Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как архитектура товарища справляется с вашим текстом.
|
||||
|
||||
В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.
|
||||
|
||||
Вариант 29. Англоязычный текст.
|
||||
|
||||
### Способ запуска лабораторной работы
|
||||
Перед запуском скрипта нужно установить библиотеку tensorflow с помощью следующей команды:
|
||||
|
||||
pip3 install tensorflow
|
||||
|
||||
Чтобы убедиться, что библиотека установлена успешнo, нужно ввести команду:
|
||||
|
||||
pip3 show tensorflow
|
||||
|
||||
Если библиотека успешно установлена, то получим сообщение вроде этого:
|
||||
|
||||
![img.png](public/img/img0.png)
|
||||
|
||||
Чтобы запустить лабораторную работу, нужно выполнить скрипт `shadaev_anton_lab_7/main.py`.
|
||||
|
||||
### Стек технологий
|
||||
* `Python`: v. 3.11
|
||||
* `Tensorflow`: v. 2.14.0
|
||||
* `Pandas` - библиотека, которая позволяет работать с двумерными и многомерными таблицами, строить сводные таблицы, выделять колонки, использовать фильтры по параметрам, выполнять группировку по параметрам, запускать функции (сложение, нахождение медианы, среднего, минимального, максимального значений), объединять таблицы и многое другое
|
||||
* `Sklearn` - библиотека, которая предоставляет ряд инструментов для моделирования данных, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
|
||||
* `Keras` - высокоуровневая нейронная сеть, написанная на Python и способная работать поверх TensorFlow, CNTK или Theano. Она была разработана с акцентом на удобство экспериментов и быстрое прототипирование. Предлагает следующие возможности:
|
||||
* Создание нейронных сетей;
|
||||
* Обучение моделей;
|
||||
* Интеграция с Tensorflow
|
||||
* И т.д.
|
||||
|
||||
### Описание кода
|
||||
|
||||
### Вывод
|
||||
* `load_text(file_path)`: Эта функция открывает текстовый файл по указанному пути и возвращает его содержимое.
|
||||
|
||||
* `create_tokenizer_and_sequences(text)`: Эта функция создает токенизатор на основе входного текста, преобразует текст в последовательности токенов и возвращает токенизатор, общее количество слов, входные последовательности и метки.
|
||||
|
||||
* `create_and_train_model(total_words, max_sequence_length, predictors, labels)`: Эта функция создает и обучает модель последовательностей (sequence model) с использованием входных последовательностей и меток. Модель состоит из слоя Embedding, слоя LSTM и слоя Dense, и она компилируется с функцией потерь sparse_categorical_crossentropy и оптимизатором adam.
|
||||
|
||||
* `generate_text(seed_text, next_words, model, max_sequence_length, tokenizer)`: Эта функция генерирует текст, начиная с заданного начального текста (seed_text) и используя модель и токенизатор.
|
||||
|
||||
* Далее идет использование определенных функций для выполнения задания.
|
||||
|
||||
### Вывод
|
||||
_Английский текст, сгенерированный на 20 эпохах:_
|
||||
|
||||
_"Event Horizon" horizon horizon a a of of fiction fiction horror horror the the the the the the nature the nature reality reality reality reality reality the the reality the the the the the reality the the reality the reality reality reality reality reality reality reality reality the reality the the nature_
|
||||
|
||||
![img.png](public/img/img1.png)
|
||||
|
||||
_Русский текст, сгенерированный на 20 эпохах:_
|
||||
|
||||
_"Горизонт событий" был был был был был фильме фильме фильме показано спецэффекты создающие создающие создающие наполняют наполняют наполняют наполняют наполняют наполняют сцену страхами страхами страхами собственными собственными собственными собственными страхами собственными страхами страхами страхами страхами страхами как как как зайти зайти зайти зайти в в в в в в фильме показано показано_
|
||||
|
||||
![img.png](public/img/img2.png)
|
||||
|
||||
|
||||
**Вывод (20 эпох)**:
|
||||
* Английский текст - не осмысленный
|
||||
* Русский текст - не осмысленный
|
||||
|
||||
|
||||
_Русский текст, сгенерированный на 100 эпохах:_
|
||||
|
||||
"Горизонт событий" был секретным правительственным способным способным совершать дальние перелёты сверхсветовой сверхсветовой скоростью для этого он он искусственную чёрную дыру и использовал её колоссальную энергию для искривления пространства времени времени образом чтобы начальная и конечная точки путешествия наложились друг на друга друга друга друга друга друга друга друга друга явно явно создавая
|
||||
|
||||
![img3.png](public%2Fimg%2Fimg3.png)
|
||||
|
||||
_Английский текст, сгенерированный на 100 эпохах:_
|
||||
|
||||
"Event Horizon" is a cumbersome mix of science fiction and horror which raises questions for the viewer about the nature of reality the possibilities of scientific progress and its potential dangers the film poses questions about the nature of reality and how far humanity can go in its desire to conquer space
|
||||
|
||||
![img4.png](public%2Fimg%2Fimg4.png)
|
||||
|
||||
**Вывод (100 эпох)**:
|
||||
* Английский текст - вполне осмысленный
|
||||
* Русский текст - основной смысл текста понять можно
|
||||
|
||||
Таким образом, прогон через большее количество эпох способствует увеличению осмысленности текста, но приходится тратить гораздо большее количество ресурсов GPU.
|
@ -1 +1,68 @@
|
||||
print('test')
|
||||
import numpy as np
|
||||
from keras.models import Sequential
|
||||
from keras.layers import Embedding, LSTM, Dense
|
||||
from keras.preprocessing.text import Tokenizer
|
||||
from keras.preprocessing.sequence import pad_sequences
|
||||
|
||||
|
||||
# Чтение из файла
|
||||
def load_text(file_path):
|
||||
with open(file_path, encoding='utf-8') as file:
|
||||
return file.read()
|
||||
|
||||
|
||||
# Создание токенайзера и последовательностей на основе входного текста
|
||||
def create_tokenizer_and_sequences(text):
|
||||
tokenizer = Tokenizer()
|
||||
tokenizer.fit_on_texts([text])
|
||||
total_words = len(tokenizer.word_index) + 1
|
||||
input_sequences = []
|
||||
for line in text.split('\n'):
|
||||
token_list = tokenizer.texts_to_sequences([line])[0]
|
||||
for i in range(1, len(token_list)):
|
||||
n_gram_sequence = token_list[:i + 1]
|
||||
input_sequences.append(n_gram_sequence)
|
||||
max_sequence_length = max([len(x) for x in input_sequences])
|
||||
input_sequences = pad_sequences(input_sequences, maxlen=max_sequence_length, padding='pre')
|
||||
predictors, labels = input_sequences[:, :-1], input_sequences[:, -1]
|
||||
return tokenizer, total_words, predictors, labels, max_sequence_length
|
||||
|
||||
|
||||
# Создание и обучение модели
|
||||
def create_and_train_model(total_words, max_sequence_length, predictors, labels):
|
||||
model = Sequential()
|
||||
model.add(Embedding(total_words, 256, input_length=max_sequence_length - 1))
|
||||
model.add(LSTM(units=1024))
|
||||
model.add(Dense(total_words, activation='softmax'))
|
||||
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
|
||||
model.fit(predictors, labels, epochs=100, verbose=1, batch_size=64)
|
||||
return model
|
||||
|
||||
|
||||
# Генерация текста
|
||||
def generate_text(seed_text, next_words, model, max_sequence_length, tokenizer):
|
||||
for _ in range(next_words):
|
||||
token_list = tokenizer.texts_to_sequences([seed_text])[0]
|
||||
token_list = pad_sequences([token_list], maxlen=max_sequence_length - 1, padding='pre')
|
||||
predicted = np.argmax(model.predict(token_list), axis=-1)
|
||||
output_word = ""
|
||||
for word, index in tokenizer.word_index.items():
|
||||
if index == predicted:
|
||||
output_word = word
|
||||
break
|
||||
seed_text += " " + output_word
|
||||
return seed_text
|
||||
|
||||
|
||||
# Использование ранее определенных функций
|
||||
eng_text = load_text('public/text/eng.txt')
|
||||
rus_text = load_text('public/text/rus.txt')
|
||||
|
||||
tokenizer_eng, total_words_eng, predictors_eng, labels_eng, max_seq_len_eng = create_tokenizer_and_sequences(eng_text)
|
||||
tokenizer_rus, total_words_rus, predictors_rus, labels_rus, max_seq_len_rus = create_tokenizer_and_sequences(rus_text)
|
||||
|
||||
model_eng = create_and_train_model(total_words_eng, max_seq_len_eng, predictors_eng, labels_eng)
|
||||
model_rus = create_and_train_model(total_words_rus, max_seq_len_rus, predictors_rus, labels_rus)
|
||||
|
||||
print(generate_text("\"Event Horizon\"", 50, model_eng, max_seq_len_eng, tokenizer_eng))
|
||||
print(generate_text("\"Горизонт событий\"", 50, model_rus, max_seq_len_rus, tokenizer_rus))
|
||||
|
BIN
shadaev_anton_lab_7/public/img/img0.png
Normal file
BIN
shadaev_anton_lab_7/public/img/img0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
shadaev_anton_lab_7/public/img/img1.png
Normal file
BIN
shadaev_anton_lab_7/public/img/img1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
BIN
shadaev_anton_lab_7/public/img/img2.png
Normal file
BIN
shadaev_anton_lab_7/public/img/img2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
shadaev_anton_lab_7/public/img/img3.png
Normal file
BIN
shadaev_anton_lab_7/public/img/img3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
shadaev_anton_lab_7/public/img/img4.png
Normal file
BIN
shadaev_anton_lab_7/public/img/img4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
7
shadaev_anton_lab_7/public/text/eng.txt
Normal file
7
shadaev_anton_lab_7/public/text/eng.txt
Normal file
@ -0,0 +1,7 @@
|
||||
"The Event Horizon" was a secret government project capable of conducting long-distance flights at superluminal speeds. To accomplish this, it created an artificial black hole and used its colossal energy to distort space-time in such a way that the initial and final points of travel overlapped.
|
||||
|
||||
However, when the rescuers arrive at "The Event Horizon", they discover that its entire crew is dead. Special effects that create an atmosphere of horror and tension fill every scene of the film.
|
||||
|
||||
What happened to the ship in another dimension is not explicitly shown in the film, creating a sense of mystery and uncertainty. The characters encounter strange sounds, screams, ghosts, and their own fears.
|
||||
|
||||
"Event Horizon" is a cumbersome mix of science fiction and horror, which raises questions for the viewer about the nature of reality, the possibilities of scientific progress, and its potential dangers. The film poses questions about the nature of reality and how far humanity can go in its desire to conquer space.
|
7
shadaev_anton_lab_7/public/text/rus.txt
Normal file
7
shadaev_anton_lab_7/public/text/rus.txt
Normal file
@ -0,0 +1,7 @@
|
||||
"Горизонт событий" был секретным правительственным проектом, способным совершать дальние перелёты со сверхсветовой скоростью. Для этого он создавал искусственную чёрную дыру и использовал её колоссальную энергию для искривления пространства-времени таким образом, чтобы начальная и конечная точки путешествия наложились друг на друга.
|
||||
|
||||
Однако, когда спасатели прибывают на "Горизонт событий", они обнаруживают, что вся его команда мертва. Спецэффекты, создающие атмосферу ужаса и напряжения, наполняют каждую сцену фильма.
|
||||
|
||||
Что произошло с кораблем в другом измерении, в фильме не показано явно, создавая таинственность и неопределенность. Персонажи сталкиваются со странными звуками, криками, призраками и их собственными страхами.
|
||||
|
||||
"Сквозь горизонт" представляет собой громоздкую смесь научной фантастики и ужасов, которая ставит перед зрителем вопросы о природе реальности, возможностях научного прогресса и его потенциальных опасностях. Фильм ставит перед зрителем вопросы о природе реальности и о том, как далеко может зайти человечество в своем стремлении покорить космос.
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user