Козиев Илья (kelijah) wrote,
Козиев Илья
kelijah

Categories:

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

Цель

Овладеть искусством (или мастерством) генерации рэпа на заданную тему.

Я ожидал, что это будет попроще, чем онегинская строфа, но не тут-то было :) Приходится идти небольшими шагами, перебирая множество подходов.

Инструменты и сырье

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

2) POS Tagger нужен, чтобы снимать морфологическую неоднозначность. Без него некоторые слова типа "стали" или "были" в силу частотности своей основной функции так и норовят подмешать в результаты свои омонимичные варианты, засоряя выдачу. Также теггер нужен для правильной работы ударятора - см. далее

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

4) Грамматический словарь - сидит под капотом у теггера. и лемматизатор - ну куда же без них.

5) Тезаурус позволяет получать синонимы и однокоренные слова, чтобы передавать семантику заданной темы.

6) Ударятор определяет ударение в слове. Понятно, что рифма без правильного учета ударности невозможна. Я использую тот же ударятор, что в генераторе стихов, с множеством доработок. Главная сложность - перемещение ударения в словах при изменении грамматической формы:  водЫ (генитив) и вОды (номинатив). Поэтому ударятор работает поверх POS Tagger'а. Сейчас у него главное ограничение - не подключен учет второго или второстепенного ударения в сложных словах (типа АнтигравитАция). Базовая информация по ударности взята из Викисловаря.

7) Чанкер нужен для просодии. В частности, он позволяет не делать границы строк внутри именных групп. Вообще говоря, вместо чанкера лучше бы использовать полноценный парсер, чтобы и наречные модификаторы не отрывались от глаголов и т.д., но пока я ограничился чанкером и парой костылей в коде.

Результаты

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

из нового рая
показалось начало китая

template="из#NP,Gen#показалось#NP,Neut,Nom,Sing#."

краю вируса предстало
свежее жало

template="NP,Dat#предстало#NP,Neut,Nom,Sing#."

к началу вакцин
явился новый апельсин

template="к#NP,Dat#явился#NP,Masc,Nom,Sing#."

в салоне бунтовщиков
я сделал рабов

template="в#NP,Loc#сделал#NP,Acc#."

профессор тепляков
кивнул и открыл толстяков

template="NP,Masc,Nom,Sing#кивнул#открыл#NP,Acc#."

доктора бунтовщиков
говорят про профессоров

template="NP,Nom,Plur#говорят#про#NP,Acc#."

PS: и немного свежей выдачи стихогенератора на тему программистов-лингвистов:
когда лингвист ли звучит, программист пыхтит

Лингвист мой — баг мой .

современной Варваре на отладках баг оторвали

Где баги глагол не чуют, смело воруют.
Tags: #np, #говорят, , #кивнул, #открыл, #показалось, #предстало, #про, #сделал, , #явился, генеративная грамматика, генеративная модель, генерация текста
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 0 comments