Pull to refresh

Comments 35

На словах сетка пишет как Лев Толстой. А на деле… :D
А на деле даже не Алексей Толстой, но будем надеяться, что у неё все впереди :)
Просто Лев мало писал… Вот если на Ленине попробывать…
Думал об этом, но есть риск, что сетка издаст декрет о национализации моего ноута, на котором она обучалась, а это жалко :)
пока вы не поставите сетку на броневик, все будет в пределах нормы
*на тестовых датасетах

Хороший текстик. А с наивным алгоритмом "построить ppm-модель и распаковать с её помощью массив случайных чисел" сравнить не хотите? Благо, ppm-based архиваторов в исходниках хватает.
(В сравнении интересно как качество текста, так и скорость работы и требования к памяти)

оставим в качестве домашнего задания будущим поколениям :)

Всегда подозревал что текст к русскому пОпу и рэпу пишет рекуретная нейронная сеть.

получив на вход текст романа Толстого «Анна Каренина», будет генерировать свой текст
Было бы лучше скармливать самописный текст, который программа будет обрабатывать (как делает Prisma с фотографиями, обрабатывая их и выдавая за произведения искусства) и выдавать за классиков.
В смысле, расписать красивыми вензелями фразу про счастливые семьи на фоне моста из картины «крик»? Это, пожалуй, ближе к сверточным сетям, а не рекуррентным.
Смотря что считать разницей :) Покажете код аналогичной задачи (предсказание следующего символа) на CNN?
Прочитав статью, руки зачесались, как захотелось все это увидеть воочию. Отправив весь приведенный код на свой сервер, с нетерпением стал ждать результата. Теперь хочу поделиться ими.
Время обучения около полутора часов, вот с таким значением Training loss.
Epoch: 20/20...  Training Step: 3400...  Training loss: 1.3823...  1.5089 sec/batch


Вот, что выдает сеть при использовании последнего checkpoint'а:

$ python3 rnn.py
Гостиная Анны Павловны начала понемногу наполняться. Он постылавший выражение ее с того, что она в других начала стало более.

На кусти свидать все по столу представлялись он сколько весело питили ее в своей деревне.

– Ну, что же мой молодый меня, – сказал он, улыбаясь и отвечая его; – вы видели и после вашего положения с тепорками и оставалось слышали, – отвечал Левин, и потому что вы сделали его воспоминание от самого; но ты знаешь, что я висела не может. Она пишет в наше строение, не спал на свою жизнь и выражение его продоржалось. Он скучно. Но в право в эти дело. Весело при себе своими правительным взглядом и, несмотря на то, что он не понимал, и не могу прежде, – сказал Левин; вы наслужати его приятель и всегда всегда выразить могут, что с собой от него и старались видеть.

– Ну, как же, что, как я просил во меда выходить с нею. Но я про это понимаю, что в тем напроления его возражает своиго собратия на меду кончковыми, и подошел к ней. – Я не вижу в эти презрения, ни одна и провеленный предложений, – сказал он, смотра и ответав их. – Не терее, – сказал Алексей Александрович.

– Ките, что же мог собрать? Ты не понимаюшь своего новое, – и не могут призниться с ним.

– Да вы скажите?

– Непровиди, я не признаю вас, – отвечала Анна и с тем открытом взглянувая на все плять не планово.

Но в криком непременности стола, как оскорбила его, не остановившая ему.

Вот какий подходил к девешу, подошел его взгляда, прежде веселыми слизами и первой руки. Она посмотрела на вспоминать из дореги после него, и она высоколо пристало с протявом веще с тем в стальником веселом дело, и потому, что отвечал его, но оставался слов, новою семейною отказавшеюся перебить его со своею ридовую дело. И в этом словом все была так, в пестренениях отношения и не видит только при всем сердце и в которому она была на круга никогда об исполнении которых она опять со старым представлением от него с какимо-то предстоящим общуго не случалось, что склоните с середом поднимал его.

– На что же мне нужно было на всего последнее, что он сделал, – сказал


turegum, спасибо за статью и за разжигание моего интереса к теме машинного обучения!
Спасибо за отзыв ) Хороший текст получился! Как вариант, можно прибить весь французский из исходного текста, сократив алфавит (т.е. кол-во классов из которых мы выбираем). В теории должно позитивно сказаться на качестве :)
Выложите, пожалуйста, исходный код.
Вот этот фрагмент в функции get_batches неправильный
y[:, :-1], y[:, -1] = x[:, 1:], x[:, 0]
Вы в конец у подставляете первое значение x, а должны подставлять x[i+1, 0] из следующей строки.
Ну это, конечно, было сделано для упрощения (есть предположение, что это не сильно ухудшит конечный результат), но спасибо за наблюдательность.
Вообще, тексты вполне гениальные, особенно после редактуры:
— Как у тебя дела с тепорками?
— Да так, с протявом. А вот со стальниками веселое дело.
Оба высоколо пристали.
Сразу вспомнилось:
Глокая куздра штеко будланула бокра и курдячит бокрёнка.
Ох, спасибо, что напомнили про эту фразу. Помнится, она уже встречалась однажды, а потом подзабылась.
А если подобную логику попробовать проганать не на отдельных буквах, а целых словах?
При этом загрузить не одно произведение, а целое собрание соченений, чтобы выборка была больше.
Думаю за счет отсутсвия несуществующих слов, результат может быть куда интересней и реалистичней.
в лоб эту задачу не решить, просто заменив символы на слова — размер словаря, то есть количество классов из которых надо делать выбор следующего элемента, будет на много порядков больше (десятки и сотни тысяч вместо наших 140). Я поэтому и написал в заключении, что нужны другие технологии вроде word embeddings
Спасибо за интересный пример, я тоже занимаюсь изучением этих алгоритмов. Конечно лишь от одной символьной последовательности я большего и не ожидал, вернее ожидал меньшего.

Процесс обучения Однако оказался весьма интересным и занятным, и прогресс налицо:

В какой-то момент сетка даже ругнулась матом :)


Мне сразу вспомнилась сцена создания Шарикова: «Абыр… абырвалг… Примус! Пивная!.. ещё парочку...»
По-моему не очень хорошая идея генерировать по буквам, не эффективнее ли обучить на этом тексте word2vec и попытаться создать стилизатор текста? Если будет интересно могу написать хаб.
Да, я об этом и писал в заключении — про embeddings. А напишите свой пример с word2vec, я думаю будет очень много благодарных читателей!
Ждем проверки. Статью написал. Раскрыл самые основы — обучение, до обучение подготовка данных. Начинающим должно быть интересно. В следующей статье постараюсь объяснить как можно больше сложных моментов. Надеюсь, что вам понравится
Это было ясно еще много лет назад. Модель на основе только многослойной rnn (lstm) не способна к генерации адекватных текстов. К тому же на уровне только символов (без обучения embedding'у или без уже обученного word2vec), пары слоев явно будет недостаточно для создания нужной глубины абстракции и обучения контексту. На сегодняшний день эта модель слишком проста и конечно не может справиться с этой задачей. Но вот модель bidirectional seq2seq encoder-decoder with attention уже способна к генерации адекватных предложений на основе предыдущих. «Галлюцинировать» на такой модели можно намного качественнее. Но и этого тоже будет недостаточно. Чтобы сохранять глобальный контекст модели желательно иметь доступ к памяти и обучиться записи и считыванию. Такая «Нейронная Машина Тьюринга» уже будет иметь возможность нести и изменять «контекст» от предложения к предложению.
Но пока можете попробовать seq2seq, гарантирую совершенно другой уровень качества. Эту модель использует переводчик от google. Модель seq2seq помогла выйти на совершенной иной уровень машинного перевода. А ведь на уровне декодера — это и есть задача генерации текста.
посмотрите tensor2tensor. Там это все реализовано.
Вообще ни с чем не спорю. См. дисклеймер — «Профессионалы Deep Learning скорее всего не найдут тут ничего интересного»
Да, seq2seq это интересная тема, но так уже становится не совсем интересна. Когда же ты пишешь сам хотя бы на основе word2vec есть над чем поработать и улучшить. Seq2seq же уже особо не перепишешь… Насчет статьи согласен — напишу обязательно
Sign up to leave a comment.

Articles