Merge pull request 'sergeev_evgenii_lab_7' (#166) from sergeev_evgenii_lab_7 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/166
This commit is contained in:
Alexey 2023-12-07 16:25:12 +04:00
commit cd9d5ea87a
3 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,60 @@
import numpy as np
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense
from keras.preprocessing.text import Tokenizer
from keras.utils import pad_sequences
# Путь к файлу
file_path = 'vlastelin-kolec.txt'
# Замените 'your_text_file.txt' на путь к вашему файлу с художественным текстом
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
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')
X, y = input_sequences[:, :-1], input_sequences[:, -1]
y = tf.keras.utils.to_categorical(y, num_classes=total_words)
model = Sequential()
model.add(Embedding(total_words, 100, input_length=max_sequence_length-1))
model.add(LSTM(100))
model.add(Dense(total_words, activation='softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X, y, epochs=100, verbose=1)
next_words = 100
while True:
seed_text = input('Введите текст: ')
if seed_text == "0":
break
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
print(seed_text)

View File

@ -0,0 +1,35 @@
# Лабораторная работа 7. Рекуррентная нейронная сетьи задача генерациитекста
## Задание
Обучить на русскоязычном (24 % 2 == 0) художественном тексте
рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы
приблизиться к максимально осмысленному результату.
Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как
архитектура товарища справляется с вашим текстом.
В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов.
### Запуск программы
Файл lab7.py содержит и запускает программу.
### Технологии
TensorFlow-это бесплатная библиотека программного обеспечения
с открытым исходным кодом для машинного обучения. Она может быть
использована в широком спектре задач, но имеет особое значение для обучения и вывода глубоких нейронных сетей.
Библиотека Keras. Используются для создания и тренировки рекуррентных нейронных сетей (RNN) с использованием LSTM-ячеек.
### Описание программы
Программа состоит из нескольких частей:
1. Загружается текст - часть из книги "Властелин Колец"
2. Далее нейронная сеть тренируется
3. Происходит проверка работы сети
### Результаты тестирования
По результатам тестирования, можно сказать следующее:
Вывод:
"Мелкора они томили томили нестерпимым как тьме он как выражаются средиземья средиземья на заметит «властелина «властелина к нему к нему к 20 20 годов нашего нашего века в а текстов среди среди среди и среди ее ее ее ее ее ее а божества божества божества божества божества божества божества божества отступают за горизонт к горизонт и горизонт и их 20 годов мелкора мелкора от история пока и но похитить это это но было похитить было похитить это в цикл в в однократна в в 20 20 годов нашего века и среди как текстов для для своего своего своего своего брата намеки и намеки"
Довольно плохой результат. Надо увеличить количество эпох либо объем тренировочного текста
Увеличил количество эпох до 100
"Мелкора они томили нестерпимым вожделеньем он с того и начал что возжаждал света но для одного себя и до времени затаился во тьме ведь похитить деревья было нельзя но вот открылся путь к прежде недостижимому погасить свет и оставить его себе и путь этот открыл феанор ибо сильмариллы созданы были не во славу света мастер возлюбил дело рук своих рукотворное сокровище паче нерукотворного да и волшебство всегда связано с заклятием а заклятие с проклятием такие и тому подобные азбучно мифологические прописи так сказать заповедные мифологемы образуют подоплеку сюжетной игры «сильмариллиона» задуманного как нечто вроде «суммы мифологии» пока и поскольку это так"
Текст стал намного осмысленней, довольно неплохой результат

View File

@ -0,0 +1,20 @@
Зато не мешает знать, откуда взялись в Средиземье гномы, а также орки, драконы, тролли и прочая нечисть, не говоря уже о самом Властелине Колец. Гномы плод самодеятельности одного из демиургов, мастеровитого и нетерпеливого: он никак не мог дождаться, когда же наконец вседержителю благоугодно будет кого-нибудь сотворить. Будучи как бы телепатически в общих чертах знаком с вышним замыслом, демиург сотворил существа кряжистые и упорные, хорошо приспособленные к борьбе со злом (изначально опоганившим Средиземье), но несколько аляповатые. Он не сообразил, что даровать им свободу воли не в его власти, и так бы и остались гномы големами, если бы вседержитель не смилостивился и не разрешил гномов с тем только, что они покамест будут почивать в горных недрах, а выйдут на свет божий в свой черед. Поэтому в Средиземье и бытует легенда, будто гномы сами собой произошли из камня.
Зло в Средиземье, как сказано, присутствует изначально: прародитель его, сперва самый могущественный из демиургов, звался Мелкор. Он тоже был соучастником замысла творения, но, движимый гордыней, своеволием и своекорыстием, сделался его извратителем, самозваным князем мира сего. Он-то и развел на земле нежить и нечисть, и одним из самых мерзостных его деяний было выведение орков, ибо это порченные мукой и чародейством эльфы. Самовластие не терпит сопротивления, достоинства и независимости, оно ненасытно, оно стремится быть вездесущим и Мелкор от начала веков и дней Средиземья всеми силами возвеличивался путем разрушения, подавления, осквернения. Он злой дух истории. Его главный подручный, Саурон, из числа младших демиургов особенно искусен по части лжи и коварства. Пока не пришел его срок, он был тенью Мелкора, потом стал его местоблюстителем.
Когда Средиземье еще пребывало во тьме, Валинор озаряло сияние двух деревьев; туда переселились благороднейшие из эльфов, и главный их искусник, Феанор, изготовил и огранил три несравненных бриллианта Сильмарилла; оживленные его мастерством, они впитали свет деревьев и лучились ярче звезд.
Мелкора они томили нестерпимым вожделеньем: он с того и начал, что возжаждал Света, но для одного себя, и до времени затаился во тьме, ведь похитить деревья было нельзя. Но вот открылся путь к прежде недостижимому погасить Свет и оставить его себе. И путь этот открыл Феанор, ибо Сильмариллы созданы были не во славу Света: мастер возлюбил дело рук своих, рукотворное сокровище, паче нерукотворного. Да и волшебство всегда связано с заклятием, а заклятие с проклятием. Такие и тому подобные азбучно-мифологические прописи, так сказать заповедные мифологемы, образуют подоплеку сюжетной игры «Сильмариллиона», задуманного как нечто вроде «Суммы мифологии». Пока и поскольку это так, «Сильмариллион» немногим более чем лакомое блюдо для своего брата специалиста, способного углядеть намеки и отсылки, оценить сопряжения и соответствия, то есть прочесть его при свете «Калевалы» и «Старшей Эдды». И все же… и все же есть здесь и свой нравственный заряд, и самостоятельное сюжетное напряжение, да и игровое начало не сводится к академическим забавам. Не нужно, правда, забывать, что мы говорим о «Книге утраченных сказаний» в ее окончательном виде, то есть о некоем синтезе попыток написать ее. А теперь вернемся к лиходейскому умыслу Мелкора.
Первым делом он нашел себе сообщницу исчадие мрака и пустоты, именуемое Унголиант и принявшее облик громадной паучьей самки. Во время праздника прокрались они к светоносным деревьям, и Мелкор пронзил их черным копьем, а Унголиант высосала животворное сиянье. Сильмариллы были ревниво укрыты от чужих глаз во дворце Феанора; тем легче было Мелкору их похитить.
В наступившей вселенской тьме он перенесся на север Средиземья, воздвиг там неприступную и неоглядную крепость Тонгородрим и в глубине ее воссел на черный трон; чело его венчала железная корона с тремя Сильмариллами.
С тех пор он уже не Мелкор, а Моргот («черный супостат» по-эльфийски так назвал его разъяренный Феанор); эта перемена имени знаменует его превращение из подобия Локи, злокозненного божества древнескандинавского пантеона, в сущего Люцифера, Владыку Мрака. Феанор же с сыновьями и родичами дали страшную, кощунственную клятву вернуть Сильмариллы любой ценой «и лучше бы им этой клятвы не давать, но нарушить ее было нельзя».
Отсюда начинается уже не мифологическая, а легендарная предыстория Средиземья, на которую, как заметит читатель, нередко оглядываются герои «Властелина Колец»; и среди ее героев все больше людей. Архангелы-божества отступают за горизонт, а бессмертные (их, правда, можно убить, и они могут зачахнуть) и благороднейшие эльфы, поглощенные нескончаемыми войнами с Морготом, сплошь и рядом оказываются деспотами, убийцами и вероломными злодеями. Худую службу служит им их бессмертье, невозможность оглянуться на прожитую жизнь. Их жизнь может только оборваться. Они в плену своей судьбы, а их союзники люди, не покорившиеся злу и не связанные с ним порукой волшебства, судьбе неподвластны. Нет нужды пересказывать эти легенды: по мере надобности это делает сам Толкин, но уже совсем в другом качестве, не в качестве автора «Сильмариллиона».
Мрачные, зловещие и несколько однообразные саги повествуют о том, как тяготеющее над Сильмариллами двойное проклятье сгубило всех причастных к нему, да и не только их. Одно за другим сокрушают Моргот и Саурон царства эльфийского края Белерианда. И лишь сыну смертного витязя и эльфийской царевны Эарендилу удается при путеводном свете отнятого у Моргота человеческой рукой Сильмарилла доплыть до Валинора и вымолить спасение Средиземья от всевластия мрака. Тонгородрим пал, и Моргот был навеки ввергнут во тьму кромешную, но Саурон избежал его участи.
Так закончилась Первая эпоха Средиземья, или, как выражаются эльфы, Древняя Пора. «Сильмариллиону» тоже конец, эпилог приписан к нему гораздо позже, в 20-е годы, между ним и Древней Порой зияла первозданная пустота. История пока что была историей эльфов (вмещавшей миф о сотворении мира) и, как таковая, бесперспективна, вроде эльфийского бессмертия. Разве что начинать новый ее цикл чему мифология определенно противится, мифологическая эпоха в принципе однократна или шлифовать мифы, умножать и переписывать легенды. Этим Толкин и занимается скорее по инерции, довольно вяло. Куда больше занимает его работа над всеобъемлющим толковым словарем английского языка (это детище было зачато в Оксфорде в 1878 году и к началу 20-х годов нашего века еще не родилось), издание англосаксонских текстов, пропаганда среди коллег древнеанглийской и древнеисландской литератур; наконец, и едва ли не в первую очередь, преподавание: в 1925 году, тридцати семи лет от роду, он стал профессором Оксфордского университета, такое редко случалось.