diff --git a/sergeev_evgenii_lab_7/lab7.py b/sergeev_evgenii_lab_7/lab7.py new file mode 100644 index 0000000..d397c43 --- /dev/null +++ b/sergeev_evgenii_lab_7/lab7.py @@ -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) + + + diff --git a/sergeev_evgenii_lab_7/readme.md b/sergeev_evgenii_lab_7/readme.md new file mode 100644 index 0000000..945d30f --- /dev/null +++ b/sergeev_evgenii_lab_7/readme.md @@ -0,0 +1,35 @@ +# Лабораторная работа 7. Рекуррентная нейронная сетьи задача генерациитекста +## Задание +Обучить на русскоязычном (24 % 2 == 0) художественном тексте +рекуррентную нейронную сеть для решения задачи генерации. Подобрать архитектуру и параметры так, чтобы +приблизиться к максимально осмысленному результату. +Далее разбиться на пары четный-нечетный вариант, обменяться разработанными сетями и проверить, как +архитектура товарища справляется с вашим текстом. +В завершении подобрать компромиссную архитектуру, справляющуюся достаточно хорошо с обоими видами текстов. + +### Запуск программы +Файл lab7.py содержит и запускает программу. + +### Технологии +TensorFlow-это бесплатная библиотека программного обеспечения +с открытым исходным кодом для машинного обучения. Она может быть +использована в широком спектре задач, но имеет особое значение для обучения и вывода глубоких нейронных сетей. +Библиотека Keras. Используются для создания и тренировки рекуррентных нейронных сетей (RNN) с использованием LSTM-ячеек. + +### Описание программы +Программа состоит из нескольких частей: +1. Загружается текст - часть из книги "Властелин Колец" +2. Далее нейронная сеть тренируется +3. Происходит проверка работы сети +### Результаты тестирования +По результатам тестирования, можно сказать следующее: + +Вывод: +"Мелкора они томили томили нестерпимым как тьме он как выражаются средиземья средиземья на заметит «властелина «властелина к нему к нему к 20 20 годов нашего нашего века в а текстов среди среди среди и среди ее ее ее ее ее ее а божества божества божества божества божества божества божества божества отступают за горизонт к горизонт и горизонт и их 20 годов мелкора мелкора от история пока и но похитить это это но было похитить было похитить это в цикл в в однократна в в 20 20 годов нашего века и среди как текстов для для своего своего своего своего брата намеки и намеки" + +Довольно плохой результат. Надо увеличить количество эпох либо объем тренировочного текста + +Увеличил количество эпох до 100 +"Мелкора они томили нестерпимым вожделеньем он с того и начал что возжаждал света но для одного себя и до времени затаился во тьме ведь похитить деревья было нельзя но вот открылся путь к прежде недостижимому – погасить свет и оставить его себе и путь этот открыл феанор ибо сильмариллы созданы были не во славу света мастер возлюбил дело рук своих рукотворное сокровище паче нерукотворного да и волшебство всегда связано с заклятием а заклятие – с проклятием такие и тому подобные азбучно мифологические прописи так сказать заповедные мифологемы образуют подоплеку сюжетной игры «сильмариллиона» задуманного как нечто вроде «суммы мифологии» пока и поскольку это так" + +Текст стал намного осмысленней, довольно неплохой результат \ No newline at end of file diff --git a/sergeev_evgenii_lab_7/vlastelin-kolec.txt b/sergeev_evgenii_lab_7/vlastelin-kolec.txt new file mode 100644 index 0000000..d4059ed --- /dev/null +++ b/sergeev_evgenii_lab_7/vlastelin-kolec.txt @@ -0,0 +1,20 @@ +Зато не мешает знать, откуда взялись в Средиземье гномы, а также орки, драконы, тролли и прочая нечисть, не говоря уже о самом Властелине Колец. Гномы – плод самодеятельности одного из демиургов, мастеровитого и нетерпеливого: он никак не мог дождаться, когда же наконец вседержителю благоугодно будет кого-нибудь сотворить. Будучи как бы телепатически в общих чертах знаком с вышним замыслом, демиург сотворил существа кряжистые и упорные, хорошо приспособленные к борьбе со злом (изначально опоганившим Средиземье), но несколько аляповатые. Он не сообразил, что даровать им свободу воли не в его власти, и так бы и остались гномы големами, если бы вседержитель не смилостивился и не разрешил гномов – с тем только, что они покамест будут почивать в горных недрах, а выйдут на свет божий в свой черед. Поэтому в Средиземье и бытует легенда, будто гномы сами собой произошли из камня. + +Зло в Средиземье, как сказано, присутствует изначально: прародитель его, сперва самый могущественный из демиургов, звался Мелкор. Он тоже был соучастником замысла творения, но, движимый гордыней, своеволием и своекорыстием, сделался его извратителем, самозваным князем мира сего. Он-то и развел на земле нежить и нечисть, и одним из самых мерзостных его деяний было выведение орков, ибо это – порченные мукой и чародейством эльфы. Самовластие не терпит сопротивления, достоинства и независимости, оно ненасытно, оно стремится быть вездесущим – и Мелкор от начала веков и дней Средиземья всеми силами возвеличивался путем разрушения, подавления, осквернения. Он – злой дух истории. Его главный подручный, Саурон, – из числа младших демиургов – особенно искусен по части лжи и коварства. Пока не пришел его срок, он был тенью Мелкора, потом стал его местоблюстителем. + +Когда Средиземье еще пребывало во тьме, Валинор озаряло сияние двух деревьев; туда переселились благороднейшие из эльфов, и главный их искусник, Феанор, изготовил и огранил три несравненных бриллианта – Сильмарилла; оживленные его мастерством, они впитали свет деревьев и лучились ярче звезд. + +Мелкора они томили нестерпимым вожделеньем: он с того и начал, что возжаждал Света, но для одного себя, и до времени затаился во тьме, ведь похитить деревья было нельзя. Но вот открылся путь к прежде недостижимому – погасить Свет и оставить его себе. И путь этот открыл Феанор, ибо Сильмариллы созданы были не во славу Света: мастер возлюбил дело рук своих, рукотворное сокровище, паче нерукотворного. Да и волшебство всегда связано с заклятием, а заклятие – с проклятием. Такие и тому подобные азбучно-мифологические прописи, так сказать заповедные мифологемы, образуют подоплеку сюжетной игры «Сильмариллиона», задуманного как нечто вроде «Суммы мифологии». Пока и поскольку это так, «Сильмариллион» немногим более чем лакомое блюдо для своего брата специалиста, способного углядеть намеки и отсылки, оценить сопряжения и соответствия, то есть прочесть его при свете «Калевалы» и «Старшей Эдды». И все же… и все же есть здесь и свой нравственный заряд, и самостоятельное сюжетное напряжение, да и игровое начало не сводится к академическим забавам. Не нужно, правда, забывать, что мы говорим о «Книге утраченных сказаний» в ее окончательном виде, то есть о некоем синтезе попыток написать ее. А теперь вернемся к лиходейскому умыслу Мелкора. + +Первым делом он нашел себе сообщницу – исчадие мрака и пустоты, именуемое Унголиант и принявшее облик громадной паучьей самки. Во время праздника прокрались они к светоносным деревьям, и Мелкор пронзил их черным копьем, а Унголиант высосала животворное сиянье. Сильмариллы были ревниво укрыты от чужих глаз во дворце Феанора; тем легче было Мелкору их похитить. + +В наступившей вселенской тьме он перенесся на север Средиземья, воздвиг там неприступную и неоглядную крепость Тонгородрим и в глубине ее воссел на черный трон; чело его венчала железная корона с тремя Сильмариллами. + +С тех пор он уже не Мелкор, а Моргот («черный супостат» по-эльфийски – так назвал его разъяренный Феанор); эта перемена имени знаменует его превращение из подобия Локи, злокозненного божества древнескандинавского пантеона, в сущего Люцифера, Владыку Мрака. Феанор же с сыновьями и родичами дали страшную, кощунственную клятву вернуть Сильмариллы любой ценой – «и лучше бы им этой клятвы не давать, но нарушить ее было нельзя». + +Отсюда начинается уже не мифологическая, а легендарная предыстория Средиземья, на которую, как заметит читатель, нередко оглядываются герои «Властелина Колец»; и среди ее героев все больше людей. Архангелы-божества отступают за горизонт, а бессмертные (их, правда, можно убить, и они могут зачахнуть) и благороднейшие эльфы, поглощенные нескончаемыми войнами с Морготом, сплошь и рядом оказываются деспотами, убийцами и вероломными злодеями. Худую службу служит им их бессмертье, невозможность оглянуться на прожитую жизнь. Их жизнь может только оборваться. Они в плену своей судьбы, а их союзники люди, не покорившиеся злу и не связанные с ним порукой волшебства, судьбе неподвластны. Нет нужды пересказывать эти легенды: по мере надобности это делает сам Толкин, но уже совсем в другом качестве, не в качестве автора «Сильмариллиона». + +Мрачные, зловещие и несколько однообразные саги повествуют о том, как тяготеющее над Сильмариллами двойное проклятье сгубило всех причастных к нему, да и не только их. Одно за другим сокрушают Моргот и Саурон царства эльфийского края Белерианда. И лишь сыну смертного витязя и эльфийской царевны Эарендилу удается при путеводном свете отнятого у Моргота человеческой рукой Сильмарилла доплыть до Валинора и вымолить спасение Средиземья от всевластия мрака. Тонгородрим пал, и Моргот был навеки ввергнут во тьму кромешную, но Саурон избежал его участи. + +Так закончилась Первая эпоха Средиземья, или, как выражаются эльфы, Древняя Пора. «Сильмариллиону» тоже конец, эпилог приписан к нему гораздо позже, в 20-е годы, между ним и Древней Порой зияла первозданная пустота. История пока что была историей эльфов (вмещавшей миф о сотворении мира) и, как таковая, бесперспективна, вроде эльфийского бессмертия. Разве что начинать новый ее цикл – чему мифология определенно противится, мифологическая эпоха в принципе однократна – или шлифовать мифы, умножать и переписывать легенды. Этим Толкин и занимается – скорее по инерции, довольно вяло. Куда больше занимает его работа над всеобъемлющим толковым словарем английского языка (это детище было зачато в Оксфорде в 1878 году и к началу 20-х годов нашего века еще не родилось), издание англосаксонских текстов, пропаганда среди коллег древнеанглийской и древнеисландской литератур; наконец, и едва ли не в первую очередь, – преподавание: в 1925 году, тридцати семи лет от роду, он стал профессором Оксфордского университета, такое редко случалось. +