Работая над улучшением Notebook.ai, я всегда ищу новые способы обработки данных и предоставления писателям более умной аналитики и услуг по написанию.

На днях, просматривая Kaggle в поисках каких-либо интересных данных, я наткнулся на кое-что интересное: полный корпус из 364 стихов Канье Уэста и более 243 песен. Поработав с ней некоторое время, я решил пойти на шаг дальше, чем традиционная игра по генерации цепей Маркова: я хотел генерировать динамические стихи в стиле Канье, связанные произвольной схемой рифм.

Так я и сделал. Вот как.

Процесс

  1. Генерация марковской модели из данных обучения Канье
  2. Выбор схемы рифмы
  3. Поэзия генерация с принудительными рифмами

Шаг 1. Генерация марковской модели из данных обучения Канье.

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

Как вы увидите в сценарии, я указал несколько идентификационных параметров (среда, канал и идентификатор), чтобы правильно приписать этот текст Канье и только Канье. Если вы строите марковскую модель локально с нуля, вы можете опустить это; он указан в Retort, чтобы мы могли генерировать текст в его стиле из общей базы данных модели, исключая текст, который пришел от кого-либо, кроме Канье, путем указания области идентификации в конечной точке создания.

Некоторые примеры сгенерированных строк:

  • Знай команду, мы игра, эти отношения
  • Ссать на джем, такой ультра звук (да)
  • Мама, папа, что он открещивается маме от зарплаты?
  • впустую, я FedEx, мой первый сольный кубок

(Как видите, мы имеем дело с preeeettty хардкорными вещами.)

Шаг 2: выбор схемы рифмы

Для более точного ощущения Канье вы можете извлекать схемы рифм из стихов с данными обучения, интегрировав их со словарем рифм или обнаруживая рифмы с помощью чего-то вроде алгоритма метафона или некоторой обработки с помощью драгоценного камня Ruby Rhymes.

Вместо этого я решил смешать голос нашего поколения с голосом нескольких поколений назад: Уильямом Шекспиром. Шекспировский сонет традиционно имеет схему рифмы ABAB CDCD EFEF GG. Учитывая излишне драматические (извините!) Строки Канье, заключительный рифмующий куплет казался идеальным способом решить любую проблему, о которой мы в конечном итоге рифмуемся.

Однако указание схемы рифм заранее и использование ее во всем сценарии означает, что вы можете произвольно изменить ее на любую другую схему рифм, например, баллады, куплеты, лимерики или вашу любимую рифму.

Шаг 3: Создание стихов с помощью рифм.

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

Полный код приведен ниже, но вот общий алгоритм:

  1. Создавайте полностью случайную строку всякий раз, когда мы находимся на индикаторе схемы рифмы («A», «B», «C» и т. Д.…), С которым у нас еще нет конкретного слова, с которым можно рифмовать.
  2. Каждый раз, когда мы находимся в строке, которая должна рифмоваться с предыдущим словом, мы генерируем все возможные рифмы и пытаемся использовать каждую - по одной - для работы в обратном направлении для полной рифмующей строки.
  3. Если мы не можем найти подходящую рифму, мы возвращаемся к строке, с которой рифмуемся, и перезапускаем процесс оттуда с другой (новой) строки, чтобы закончить рифму.

Легко, правда?

Вот так:

И, запустив это, вы получите прекрасную работу в стиле величайшего рэпера нашего поколения, со всеми причудами и странностями, которые возникают из-за использования биграммных цепей Маркова вместо цепочек триграмм (скоро в Retort!) .

Вы можете прочитать первую балладу Канье Уэста ниже или просмотреть остальную часть этой публикации (которая была настроена для этого сообщения), чтобы увидеть другие сообщения из других стилей авторов (потому что теперь это так же просто, как заменить этот идентификатор Канье Уэста I упоминалось ранее с любым другим писателем, проиндексированным Retort!).



Баллада Канье Уэста №1
Не могу позволить им другие, такие как« Аминь
,
Девочки подождите, пока они когда-нибудь упадут, ебать всю весну
Перед сладким пространством…
medium.com »





Удачи и приятного времяпровождения! :)

Что такое Indent Labs?

Indent Labs - это, по сути, собрание амбициозных проектов обработки естественного языка с открытым исходным кодом, нацеленных на прорыв в области письма. Разве не было бы замечательно, если бы вы могли создавать качественные истории из набросков или автоматически обрисовывать историю? Как насчет создания истории, когда вы принимаете решения от имени персонажа?

Первый текстовый процессор появился в 60-х годах и произвел революцию в письменной форме с помощью технологий. Не пора ли сделать еще один сдвиг вперед?