Про что написать стих генератор

Как работает генератор стихов

Введите две строки на русском языке. Длина строки не должна превышать 150 знаков. Сохраняйте разбиение на строки.

Если вы не хотите/не можете сочинить даже 2 строки, доверьте это стихороботу! Нажмите вкладку «сочини за меня» и следуйте подсказкам (черный прямоугольник слева). Или посмотрите видеоролик.

Если результат вам понравился и получился интересный робостих, поделитесь с нами. Отправьте его нам через форму обратной связи на странице контактов. Или разместите стих, написанный в соавторстве с роботом на форуме в специальном разделе.

Про что написать стих генераторПро что написать стих генераторПро что написать стих генератор

Новости форума

рисунки рыб золотой
Изображение: https://b.radikal.ru/b31/2112/94/3770b13cb4b6.jpg (с) martimiann.

философские стихи Лишний человек
Мужик надёжный, работящий Коптит уныло белый свет. С утра до ночи лямку тащит, А счастья не было и нет. Не скандалист, не выпивоха, Не гений.

стихотворения, не вошедшие в рубрики Блажь ©
Ну что за блажь, вальсировать в полете, Отсчитывая такт рядами кресел И ритм вращений вальса на три счета На удивленье милой стюардессе..

стихотворения, не вошедшие в рубрики (с) Комнин
Мои слова, глоток приятной боли, Мои стихи, они холодный лёд. И главное, не дать мне сердцу воли, Не пропустить прошедшее вперёд. А время мчит.

Источник

AI на минималках 2: Генератор стихов на Prolog

Про что написать стих генератор

На картинке — четверостишье, сгенерированное моей программой.

Оказывается «стихи» писать легко, нужно только знать несколько необходимых ингредиентов: размер, ритм, рифма. «Стихи» в кавычках, потому что в настоящем стихосложении, как и в любом другом искусстве, незыблемых законов нет. Однако в классике (русской силлабо-тонике) очень много правил, при соблюдении которых получается писать неплохие стихи, даже если вы никогда раньше этого не делали. Причём эти правила довольно просто программируются: «в строке должно быть равно N слогов», «нечётные строки должны рифмоваться», «ударные и безударные слоги в строке должны идти в определённом порядке» и т.д. Перечислив все правила, я свёл задачу генерации стихов к простому комбинаторному поиску. Язык Prolog как раз и предназначен для таких задач — описании правил и генерации объектов, выполняющих эти правила.

Кто хочет научится писать стихи и познакомиться с Prolog, прошу под кат.

Как научиться писать стихи за 10 минут

Проще всего учиться на примерах великих поэтов. Возьмём классическое стихотворение Тютчева с расставленными ударениями:

Люблю грозу в начале мая, 9
Когда весенний, первый гром, 8
Как бы резвяся и играя, 9
Грохочет в небе голубом. 8

Гремят раскаты молодые, 9
Вот дождик брызнул, пыль летит, 8
Повисли перлы дождевые, 9
И солнце нити золотит. 8

С горы бежит поток проворный, 9
В лесу не молкнет птичий гам, 8
И гам лесной, и шум нагорный — 9
Всё вторит весело громам. 8

Ты скажешь: ветреная Геба, 9
Кормя Зевесова орла, 8
Громокипящий кубок с неба, 9
Смеясь, на землю пролила 8

Сразу видно, что стихотворение состоит из нескольких четверостиший (стихов), в каждом из которых рифмуются строки одинаковой четности. Заметим, что ударные и безударные слоги первой строчки чередуются в определённом порядке: _’_’_’_’_ (нижнее подчёркивание означает безударный, а кавычка — ударный слог). Такой ритмический рисунок называется размером стиха. Размер состоит из стоп, в каждой стопе ровно один ударный слог. У Тютчева размер двухсложный, с первым безударным, вторым ударным слогом. Такой размер называется ямбом. Есть и другие размеры, например хорей с ударением на первом слоге. Повторение одного размера в четверостишье задаёт стиху ритм, без которого даже с рифмой четверостишье будет звучать как проза.

Системы рифмовки тоже могут быть разные. У Тютчева рифмовка перекрёстная, ещё бывают кольцевая (рифмуются первая с последней и вторая с третьей строки) и смежная (первая со второй, третья с четвёртой).

Рифмовать слова тоже можно по-разному. Различают мужские и женские рифмы. В мужской ударение падает на последний слог, в женской на предпоследний. Есть ещё дактилическая рифма, где ударение падает на второй с конца слог, но к таким словам довольно сложно подобрать пару:

Дело было вечером,
Делать было нечего.

Получается примерно следующий алгоритм написания стихов:

С практикой вам станет проще рифмовать слова и соблюдать ритм:

Шёл поэт по улице, 7
Кутался в пальто. 5
Всё пройдёт, забудется, 7
Время — решето. 5

Обратите внимание, ритмический рисунок совпадает у рифмующихся строчек. У второй и четвёртой хорей получается как бы «рваным», но ритм от этого не страдает.

Введение в Prolog

Теперь сформулируем правила, которым должны удовлетворять четыре строки в четверостишье:

Мы специально не стали брать «осмысленность» стиха, т.к. это требование в стихосложении довольно субъективное, его сложно объяснить машине, да и вообще, в любой грамматически верной строке можно найти смысл (глокая куздра глокочет бокра и кудрячет бокрёнка).

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

Prolog это логический язык программирования. Он очень сильно отличается от императивных языков тем, что все конструкции — декларативные, т.е. программы на Prolog описывают что надо сделать, а не как это сделать. Этим он похож на функциональные языки типа LISP. Prolog моделирует логику предикатов первого порядка.

Prolog можно рассматривать как некую СУБД или экспертную систему, в которой есть знания, и из этих знаний можно делать логические выводы с помощью правил. Знания выражают в виде фактов (предикатов) о внешнем мире. Например, вот так можно записать факт того, что Сократ смертен:

Слова в Prolog бывают либо атомами (сократ), либо предикатами (человек), либо переменными (Х). Атомы это некоторые объекты, предикаты это свойства объектов или отношения между ними. Переменные должны начинаться с заглавной буквы, атомы и предикаты с прописной. Предложения должны оканчиваться точкой. В Prolog нет ограничений на латиницу, поэтому слова можно писать и на русском. Первая строчка выражает факт того, что Сократ — человек. Вторая моделирует условие «каждый человек смертен». Части импликации разделяются знаком :- и меняются местами.

Система логически вывела нам факт смертности Сократа. Но это ещё далеко не всё, попробуйте вместо Сократа подставить переменную:

Prolog сам подобрал единственно возможное значение переменной «Неизвестно». Пролог следует т.н. гипотезе закрытого мира (closed-world assumption) — всё, чего нет в базе считается неверным:

Хотя Аристотель был таким же человеком, но в нашей программе это не отражено, поэтому Prolog выводит false.

Восклицательный знак здесь играет важную роль. Это т.н. «cut operator», который обрезает дерево поиска интерпретатору. Он говорит «если интерпретатор дошел до меня, то не нужно пробовать удовлетворить другой вариант freq». Из-за этого у Х будет только одно возможное значение.

Комбинаторный поиск в Prolog

Prolog идеально подходит для комбинаторного перебора. Нужно только закодировать правила, которым подчиняются перебираемые объекты, и запустить интерпретатор. Рассмотрим классическую задачу генерации всех магических квадратов 3 на 3. Магическим называется квадрат, в котором все числа положительны и различны, а суммы в каждом столбце, строке и диагонали совпадают. Пример:

Каким правилам подчиняются числа в квадрате?

С помощью библиотеки CLPFD можно очень легко закодировать эти правила в Прологе:

Вернёмся к нашей оригинальной задаче: генерации стихотворений. Стихотворение состоит из четверостиший. Четверостишие определяется следующими правилами:

Всё, что нужно сделать — это корректно закодировать это правила на Прологе. Самое сложное здесь это первое правило. Грамматическая корректность это довольно непростое требование, грамматика русского языка очень богата, у нас есть спряжения, морфология, и проч. Поэтому я решил взять конкретные шаблоны, которые наверняка будут грамматически корректны. Все слова в настоящем времени и мужского рода:

Нужно только добавить достаточно слов каждой части речи, чтобы стихи получались богатыми.

Как это кодировать? Очень просто — вначале составляется словарь наподобие такого:

Второй аргумент указывает на порядковый номер ударного слога. В слове «кроткий», ударение падает на первый слог, а в слове «укротитель» на третий. Эта информация пригодится когда мы будет строить ритмический рисунок строчки.

Затем определяется предикат предложение :

Теперь ко второму правилу рифмовки. Как определить что два слова рифмуются? Рифмуются слова, у которых ударение падает на тот же слог и у которых окончания похожи (зрелый — спелый, бедный — каретный, новый — здоровый). Есть такое понятие — парные буквы, наверняка вы ещё их в школе проходили. Вот несколько таких пар:

Назовём все такие пары омофонными. Окончания рифмующихся слов могут отличаться, но только если разные буквы будут принадлежать одной паре. Например, пара «бедный — каретный», окончания «едный — етный» отличаются, но пара (д, т) — омофонная, поэтому рифма не нарушается. То есть, рифму можно описать следующим правилом:

Чтобы закодировать такое правило надо сначала определить все омофонные пары:

Затем определить предикат «похожие_по_звучанию(Слово1, Слово2)», который выполняется когда слова 1 и 2 отличаются не более чем на омофонные пары:

Здесь слово разбивается на список своих букв и рассматриваются два случая: когда буквы равны и когда они принадлежат одной омофонной паре.

Зная всё это, написать предикат «рифмуется(Слово1, Слово2)» не составляет труда:

Остаётся последнее правило: совпадение ритмического рисунка у строчек. Давайте договоримся, что ритмический рисунок строки будем записывать с помощью букв «б» и «у», где «б» означает безударный слог, а «у» ударный. Сам такой рисунок будем называть «шаблоном».

Например, у строки «Люблю грозу в начале мая» шаблон будет «бубубубуб», т.е. чистый ямб. Хорей будет выглядеть наоборот «убубубуб».

По каждой строчке в стихе можно строить такие шаблоны. Совпадением ритмического рисунка будет совпадение шаблонов. Как строить такие шаблоны? Нужно каждое слово в строке разбить на слоги, ударный слог записать как «у», остальные как «б» и повторить для всех слов.

Я не буду здесь приводить полный код этой процедуры, при желании вы можете ознакомиться с кодом всего проекта в открытом репозитории

Приведу только конечный вид предиката «стих», по которому можно генерировать четверостишия:

Здесь включены все три правила стихосложения (грамматическая корректность, рифма, ритм) и ещё добавлены условия на различность X \= Y чтобы слова не повторялись.

Что дальше?

Понятно, что всё описанное это только proof of concept, можно и дальше развивать эту тему. Например, добавить ещё слов в словарь, расширить грамматику, чтобы она включала разные времена и роды слов. Можно также определить новые шаблоны стихотворений, отличных от классики, да и вообще поле для экспериментов тут очень богатое.

Надеюсь вам понравилась статья и вы узнали что-то новое. Ссылка на репозиторий проекта: prolog-poetry. Там же есть полная инструкция по запуску.

Источник

Анна Туренкова (2006г)

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

Если вы пишите для себя, возможно это и не важно. Но если для читателя, то тут надо будет немного потренироваться изо дня в день. Предложите себе забавную игру в стихосочинялки. Кушая булочку во время обеда или отдыхая вечером на любимом диване. Это развлечёт вас и принесёт существенную пользу развитию вашего таланта.

-=-=-Стихотворение-Упражнение 1. «Лёгкий стих»-=-=-

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

«В саду цветёт пушистый пень»
Цветёт сегодня целый день
Ему цвести никак не лень
Его постигла дребедень
И все лягушки набекрень. »
и т.д.

-=-=-Стихотворение-Упражнение 2. «Рифмуем всеххх»-=-=-

А теперь можно отдельно потренировать рифму. Тоже пишем первое пришедшее в голову слово. А к нему все рифмы (слова и словосочетания), которые сможете придумать. Старайтесь быть как можно изобретательнее.

«Сосредоточится
Двоеточие
Раскурочили
Непорочные
Снова кочки
Очная
Сочные
Точно. »
и т.д.

-=-=-Стихотворение-Упражнение 3. «Польза классики»-=-=-

Теперь, если привлечь к труду корку мозга, можно неплохо развлечься, тренируясь выдерживать размер. Берете любое «правильное» стихотворение другого поэта и каждую строчку переписываете под его строчкой новыми словами.

___Онегин добрый мой приятель
Егоркин вечный умножатель
___Родился на брегах Невы
Не поднимая головы
___Где может быть родились вы,
Среди зелёненькой листвы
___Или гуляли, мой читатель.
Очистил от бедлама шпатель.
и т.д.

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

-=-=-Стихотворение-Упражнение 4. «Хочу написать то, что думаю»-=-=-

Например, стих про осень:
В уме (или лучше в блокноте): «осень, листья, кружиться, золото, увядание. » и т.д.
Из этого стихоплётим:

«Осень кружит листьями, кружелистным золотом,
И увял на клумбе маленький цветок. «

Возьмите какую-нибудь собственную, уникальную тему, набросайте побольше исходного материалла. А может наоборот заезженная всеми тема развернёт для вас нечто особенное. Чем больше тем вы обкатываете тренеруясь, тем лаконичнее и ярче будет ваша стихотворная речь.

Анна Туренкова 2006/01/27 02:12 •

-=—=-
И ещё НА ЗАМЕТКУ (из личного опыта и моих наблюдений за творчеством авторов стихи.ры). Если вы хотите, чтобы ваши стихи _нравились_читателям_, то

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

5. Помните, что у вас качестве «изюминки» стихотворения. Сохраняйте и не искажайте её. Старайтесь чтобы остальной текст был на службе у вашей идеи.

6. Главное вовремя остановится. Избегайте «словестного поноса». Вовремя говорите себе «стоп!» Вы должны помнить об этом, даже когда тема широка или вовсе абстрактна. Чем длиннее стихотворение, тем меньше читателей соизволят его прочесть.

8. Когда вы пишете длинное стихотворение, старайтесь правильно обрабатывать КАЖДУЮ ИДЕЮ, которую вы высказываете.

а) Если вы употребите больше слов, чем требуется для её раскрытия рискуете оказаться в глазах читателей пустомелей-графоманом, даже если в вашем произведении содержиться серьёзная смысловая начинка. Они её просто не заметят в таком размытом состоянии. Это допустимо для прозы, но стихи губит на корню.

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

-=—=-
А это ПОЛЕЗНЫЕ ССЫЛКИ, которые несомненно пригодятся на пути к творческой вершине:

http://www.stihi.ru/2003/10/26-1103
«От дилетанта-дилетантам (методы ведения войны со стихами)»
Никому Не Говори

http://www.stihi.ru/2003/08/28-61
«Как выжить на сайте стихи.ру. Не-FAQ, практические навыки»
Docking The Mad Dog

Источник

Генератор стихов

Про что написать стих генератор

Похожее:

Про что написать стих генератор

Стихо Робот поможет…

Многие из нас хоть раз в жизни захотели написать какое-нибудь стихотворение. Причина у каждого может быть своя. Кто-то лично для себя, для души, для поздравления с днём рождения, свадьбой или другими событиям в жизни. Но не у всех есть писательский дар и не всем дано ощущение рифмы. На помощь таким людям приходит как всегда добрый интернет, точнее сайт Генератор стихов. Здесь стихотворение вместо автора может сочинить Стихо Робот. Существует два варианта: первый – вы сочиняете первые две строки, а две последующие сочиняет за вас Стихо Робот, а другой вариант, если вы не сможете самостоятельно сочинить и первые две строки, тогда Стихо Робот сочинит за вас сам целое четверостишье. Строки можно вводить исключительно на русском языке и длина строки должна быть не более 150 знаков. Генератор стихов может стать настоящим приятелем, пользуясь им понимаешь, что быть автором стихов не так уж и сложно. Главное прочувствовать тему и сделать нужные акценты и ударения на слова. На примере стихов, которые сочинил Стихо Робот можно сочинить собственные, при том совершенно уникальные четверостишья, и в последствии объединив их одной темой, превратить в полноценное стихотворение.

Рассмотрим разные точки зрения.

Да уж! Время пришло. Оказывается, есть электронный стихоплет. По-другому и не назвать. В сравнении со стихогенератором, даже буриме стоит похвалить, потому что это свое стихосложение, без помощи робота. А на этом сайте есть и генератор поздравлений? Есть. Форум на этом ресурсе пестрит насмешками. Вот для кого этот генератор? Для поэтов и поэтесс? Нет, для дегене….. Не будем вслух. Можем обидеть самих себя) Бедный Пушкин, попавший на рекламный пост этого ресурса. Мне жаль, что так использовали имя гениального поэта всех времен.

Существует очень большая и сложная классификация рифм. Они бывают мужские, женские, дактилические и гипердактилические. О,как! Вот на этом стихогенераторе есть теоретические посылы. Но к чему? Дальше то нужно ввести только первые строчки и генератор выдаст то, что срифмует из запаса рифмуемых слов. Будьте готовы, что не всем понравится. В общем, генератор стихов пишет не стихи, а наборы рифмуемых слов.

Да, уж! Я и не думал, что стихи писать по-современному очень просто. Интересно, а у настоящих поэтов тоже есть списки рифмуемых слов, как тревожный чемоданчик? Как же известные поэты прошлого могли обходится без подсказок рифмы.

Про что написать стих генератор

Интересная забава для любопытного поэта…

Совсем недавно “познакомили” меня с этим забавным сайтом мои друзья-коллеги. Первоначально, я даже и не понял, что мне предлагают. И название сайта “Генератор стихов” прозвучало для меня непонятно и скучно. По сути, нормальному человеку и в голову не придёт, что сочинить поздравительный стишок для своего близкого человека, ему может помочь – “робот”.
Но факт, получился и остался фактом.
Так и получилось, что прочитав самые конкретные пункты инструкции-наставления, типа – “Введите текст стихотворения на русском языке не более 12 строк за один раз. Сохраняйте разбиение на строки”, удалось опробовать поэта-робота в деле, с ожиданием положительного результата…
Но, как говорят, “и на старуху бывает проруха”, наверно поэтому несколько совместных попыток создать стихотворный труд, не увенчались сногсшибательным успехом. Как-то все рифмы получались пустыми, мало увлекательными, типа – шаблонные фразы и “пустые словосочетания”.
Но, на страничке сайта есть немаловажная надпись, которая успокаивающе гласит: “Если робот неправильно определил ударение в слове(словах), не огорчайтесь. Он – еще только начинающий поэт. Выберите возможность ставить ударения вручную, проставьте ударения сами, и попросите робота снова определить размер стиха”…
Ну а выбрать “возможность поставить ударение по своему”, не во всех строках возможно, и уместно.
Немного позже, пришлось разобраться с ещё несколькими наиважнейшими пунктами инструкции, это: “Введите две строки на русском языке. Длина строки не должна превышать 150 знаков. Сохраняйте разбиение на строки”.И именно после этого выполнения инструкции “по пользованию”, дела “пошли в гору”. По крайней мере появился определённый смысл и спортивный интерес.
А уж когда прочли ещё один пункт, “Очень важно не употреблять букву Е вместо Ё – иначе робот может ошибиться в подборе рифмы”, то стихи стали “выходить” от робота по настоящему, с человеческим лицом и улыбкой.
Безусловно, не стоит относиться к данному ресурсу со всей нашей серьёзностью, и не стоит обнадёживаться на то, что поэт-робот (или точнее – “генератор идеи и стихов) сможет заменить разум человека, и его эмоции, которые он закладывает в строчки, пытаясь сотворить поэзию с большой буквы. Для подростка, или даже для взрослого человека, данный сайт удобно считать развлечением, игрой на отвлечённую тему, или отдыхом от повседневной рутины, когда головной мозг “просит пощады”, и хоть какого-нибудь лёгкого расслабления.
Так что всем, кто решиться зайти на вышеописанный ресурс, желаю по-внимательнее ознакомиться с простыми советами и пунктами подробных инструкций, и как написано на сайте в заключительном абзаце: “Нажмите кнопку “начать”. Ждите результата”…
И результат непременно не заставит себя долго ждать. Поэт, который “будто бы обладает искусственным интеллектом”, обязательно выдаст строки (или строфы), которым либо рассмешат, либо заставят задуматься. Особенно, если первые две строки были введены с каим-то смыслом, или смысловой подоплёкой.
При этом, стоит подумать, а не является ли продолжение от “робота” каким-нибудь предсказанием или констатацией факта, который уже произошёл, или время ещё не наступило…

Источник

КлассикAI жанра: ML ищет себя в поэзии

Про что написать стих генераторСейчас в прессе часто встречаются новости вида “AI научился писать в стиле автора Х”, или “ML создает искусство”. Посмотрев на это, мы решили – было бы здорово, если эти громкие заявления можно было бы проверить на деле.

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

1. КлассикAI

Задача участников

По условиям конкурса, участникам необходимо построить модель, генерирующую стихи на заданную тему в стиле одного из русских классиков. Тема и автор подаются модели на вход, а на выходе ожидается стихотворение. Полное описание есть в репозитории конкурса.

С темой условия мягкие: это может быть короткое предложение, фраза или несколько слов. Единственное ограничение — на размер: не более 1000 знаков. Темы, на которых будут тестироваться алгоритмы, будут составлены экспертами. Часть тем будет открыта и общедоступна, но для определения лучшего алгоритма будет использован скрытый набор тем.

Глобальная идея соревнования такая: к любому стихотворению можно составить краткую аннотацию из нескольких слов. Давайте покажем на примере.

«…В тот год осенняя погода
Стояла долго на дворе,
Зимы ждала, ждала природа.
Снег выпал только в январе
На третье в ночь. Проснувшись рано,
В окно увидела Татьяна
Поутру побелевший двор,
Куртины, кровли и забор,
На стеклах легкие узоры,
Деревья в зимнем серебре,
Сорок веселых на дворе
И мягко устланные горы
Зимы блистательным ковром.
Все ярко, все бело кругом. » 1823—1830

То кратко содержание его можно уместить в «Татьяна видит в окно первый снег». И тогда идеальная стихотворная модель по этому входу выдаст что-то очень близкое к оригиналу.

Для обучения в этом соревновании предлагается датасет из более чем 3000 произведений пяти известных русских поэтов:

1. Пушкин
2. Есенин
3. Маяковский
4. Блок
5. Тютчев

Алгоритм нужно написать так, чтобы он производил генерацию достаточно быстро и имел необходимый интерфейс. По скорости можно равняться на мощности средних современных ПК. Интерфейс и ограничения подробно описаны в разделе «Формат решений».

Чтобы иметь возможность отслеживать прогресс своих решений, а также сравнивать их с другими решениями участников, на протяжении соревнования будет проходить разметка решений через чат-бот. Результаты работы алгоритмов будут оцениваться по двум критериям:

Полученное в результате работы алгоритма стихотворение может быть отклонено по следующим причинам:

Программа соревнования

В отличие от многих, в этом соревновании только один онлайн этап: с 30.07 по 26.08.

На протяжении этого периода можно ежедневно отправлять решения со следующими ограничениями:

2. Подходы к созданию генераторов стихов

Как уже стало понятно, задача нетривиальная, но и не новая. Попробуем разобраться, как же исследователи подходили к решению это задачи раньше? Давайте посмотрим на наиболее интересные подходы к созданию генераторов стихов последних 30 лет.

В журнале Scientific American N08, 1989 выходит статья А.К. Дьюдни “Компьютер пробует свои силы в прозе и поэзии”. Не будем пересказывать статью, здесь есть ссылка на полный текст, хотим лишь обратить ваше внимание на описание POETRY GENERATOR от Розмари Уэст.

Этот генератор был полностью автоматизированным. В основе этого подхода большой словарь, фразы из которого выбираются случайным образом, и из них формируются словосочетания по набору грамматических правил. Каждая строка делится на части предложения, а далее случайно заменяется другими словами.

«Лингвистическое моделирование и искусственный интеллект» — так звучит
название моей темы. «Программа, которая сочиняет стихи» — так отвечаю я на
вопросы друзей. «Но ведь подобные программы уже есть?» — говорят мне. «Да — отвечаю я, — но моя отличается тем, что не использует изначальных шаблонов.»
(с) Каганов Л.А.

К 1996 году уже были написаны такие генераторы как:

«Например, в POET.EXE имеется словарь слов с проставленными ударениями и некоторой другой информацией о них, а также задается ритм и указывается какие строки рифмовать (например, 1 и 4). А все эти программы обладают одним общим свойством — они используют шаблоны и заранее подготовленные словари.»

В качестве основных преимуществ можно выделить то, что программа:

«Chinese Poetry Generation with Planning based Neural Network»

Ученые из Китая генерируют стихотворения на своем языке. У них есть живой репозиторий проекта, который может быть полезен в текущем соревновании.

Если очень коротко, то это работает так (ссылка на источник картинки):

Про что написать стих генератор

Generating Topical Poetry

Также в 2016 еще одна группа представила свою разработку Hafez (репозиторий тут).

Этот генератор “сочиняет” стихи на заданную тему, используя:

Про что написать стих генератор

Напоследок хочется упомянуть об очень подробной статье на Хабре «Как научить свою нейросеть генерировать стихи». Если вы никогда не занимались подобными моделями, то вам сюда. Там про генератор стихов на нейроночках: про языковые модели, N-граммные языковые модели, про оценку языковых моделей, про то как запилить архитектуру и доработать входной и выходной слой.

Например, вот так слову добавляется морфологическая разметка (ссылка на источник картинки):

Про что написать стих генератор

3. Программирование искусственного поэта

Пример простого поэтического генератора

Соревнование с одной стороны может показаться достаточно сложным, однако для него вполне можно сделать простой, но рабочий бейзлайн.

По условию, на вход этой программы поступает идентификатор автора (author_id) и текст темы (seed), в ответ на это модель должна вернуть стихотворение.

Давайте попробуем формализовать тему так, чтобы с ней можно было спокойно оперировать в рамках некоторого векторного семантического пространства. Самый простой выход из этого — получить семантический вектор каждого слова (например, Word2Vec) после чего усреднить их.
Таким образом, мы получаем своеобразный “seed2vec”, который позволяет нам переводить тему в вектор.

На самом деле здесь открывается широкая тема для исследований, т.к. задача выделения темы стоит перед учеными достаточно давно, вот только несколько примеров:

Теперь, нужно понять, как использовать author_id для генерации стихотворения именно в стилистике этого автора.

Здесь идея не менее простая: давайте возьмем случайное стихотворение автора из корпуса стихов, после чего будем заменять каждое слово на другое, которое максимально созвучно с оригиналом (имеет одинаковое количество слогов, одинаковое ударение и последние три буквы максимально схожи с оригиналом по расстоянию Левенштейна) и при этом имеет максимально схожий вектор с вектором темы. Например, для темы «Футбол» и строки «И светился как янтарь», выходной строкой может быть «А игрался как вратарь». Таким образом, мы получаем своеобразную стилизацию текста.

В качестве базы слов для замены был использован датасет, который содержит небольшие параграфы текстов из Википедии (описание его использования можно найти в коде бейзлайна на GitHub).

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

Результат работы бейзлайна:

приведут и висмут единицы
буйвол древних нелинейных сред
я в доске кельвину на частице
свой явлений свой научный вслед
фарадей севилье тараканья
свой тверской теперь изобретшим
среда фонон грань тяготения
позитронный призрак школьный дым

как кружке лейбницу среди идей
кривым и школьным обучаться
но стадо стадо в творчество учиться
кривая для примеры мозг детей
кривые взят пловец знает из гоба
и в планк пройдет и в суд пройдет в сенат
чем дочь колее тем древнее гоба
и сурья исчезающе терпят
пловец весь тень учится над евклидом
заглавие издается и квот
осваивает он скрепляя трудом
профессору учебный анекдот

Очевидно, что бейзлайн не идеален, на то он и бейзлайн.

Можно легко добавить несколько фичей, которые помогут неплохо улучшить генерацию и поднять вас в топе:

Подготовка решения к отправке

После того, как модель обучена, в проверяющую систему необходимо отправить код алгоритма, запакованный в ZIP-архив.

Решения запускаются в изолированном окружении при помощи Docker, время и ресурсы для тестирования ограничены. Решение должно отвечать следующим техническим требованиям:

Оно должно быть выполнено в виде HTTP-сервера, доступного по порту 8000, который отвечает на два вида запросов:

На запрос необходимо ответить кодом 200 OK в случае, если решение готово к работе. Любой другой код означает, что решение еще не готово. У алгоритма есть ограниченное время на подготовку к работе, за которое можно прочитать данные с диска, создать в оперативной памяти необходимые структуры данных.

Запрос на генерацию стихотворения. Идентификатор поэта, в стиле которого необходимо сочинить, указан в URL. Содержимое запроса — JSON с единственным полем seed, содержащим тему сочинения:

В качестве ответа необходимо в отведенное время дать JSON со сгенерированным сочинением в поле poem:

Запрос и ответ должны иметь Content-Type: application/json. Рекомендуется использовать кодировку UTF-8.

— решению доступны ресурсы:
— 16 Гб оперативной памяти
— 4 vCPU
— GPU Nvidia K80
— решение не имеет доступа к ресурсам интернета
— решению в каталоге /data/ доступны общие наборы данных
— время на подготовку к работе: 120 секунд (после чего на запрос /ready необходимо отвечать кодом 200)
— время на один запрос /generate/: 5 секунд
— решение должно принимать HTTP запросы с внешних машин (не только localhost/127.0.0.1)
— при тестировании запросы производятся последовательно (не более 1 запроса одновременно)
— максимальный размер упакованного и распакованного архива с решением: 10 Гб

Сгенерированное стихотворение (poem) должно удовлетворять формату:

— размер стиха — от 3 до 8 строк
— каждая строка содержит не более 120 символов
— строки разделяются символом \n
— пустые строки игнорируются

Тема сочинения (seed) по длине не превышает 1000 символов.

При тестировании используются стили только 5 перечисленных выше избранных поэтов.

Подробная информация по отправке решения в систему с разбором наиболее частых ошибок доступна здесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *