Как модель научили писать рэп в такт бита
Разработчик собрал веб‑страницу, где можно загрузить бит, задать тему трека и получить куплеты и припев, уже разложенные по тактам. Первая версия звучала как школьные стихи, но после доработок система стала гораздо лучше попадать в ритм и ударения.
Почему обычный счёт слогов не работает
Идея сервиса была простой: пользователь загружает бит и описывает, о чём должен быть трек — тема, настроение, тип рифмовки и другие параметры. На выходе страница должна выдавать текст, который сразу ложится на музыку строка за строкой. Но первая попытка провалилась: если просто просить модель писать по 12 слогов в строке, она действительно соблюдает длину, но получается ровное, скучное чтение — больше похоже на стихи под музыку, чем на рэп.
Автор понял, что для рэпа важен не только общий размер строки, а то, где именно стоят слоги внутри такта. То есть важны паузы, акценты, синкопы и то, как слова попадают на сильные доли. Поэтому система сначала подбирает флоу — например, ровный ритм, триоли, дабл-тайм или более рубленый рисунок, — а уже потом под это строится текст. Сначала слышен ритм, и только потом в него подставляются слова.
Что сервер считает сам, а что доверяют модели
Модель не получает аудио целиком. На сервере обычной обработкой сигнала за меньше чем секунду извлекаются числа: темп, границы тактов, части трека и характер ударов барабанов в шестнадцатых долях. Темп дополнительно ищется в диапазоне примерно 70–140 BPM, чтобы не путаться в случаях, когда один и тот же рисунок может читаться как вдвое медленнее или вдвое быстрее. Если расчёты дают разные варианты, страница показывает оба.
Самая важная находка была в том, что языковая модель хорошо ставит ударения, но плохо считает. В одном тесте ей дали 24 строки на бит в 90 BPM: если просить её самим задать ритм строки, она почти не угадывала нужный рисунок, а когда ей заранее сообщали число слогов и место ударений, результат резко улучшался. После этого сервер сам «дотягивает» строки до сетки с помощью небольшого алгоритма, а модели остаётся написать живой текст в нужном ритме.
Зачем это может пригодиться на практике
Для русского языка у проекта есть несколько полезных выводов. Слоги здесь можно считать довольно точно — по числу гласных, а вот с ударениями всё сложнее, поэтому модель лучше использовать как генератор текста и рифм, а расчёты ритма держать на стороне сервера. Если строка не садится в такт, система может подвинуть её автоматически, чтобы куплет не разваливался по ритму.
Есть и чисто прикладные ограничения: чтобы не сжигать бюджет на бесполезных запросах, доступ к генерации открывается только после входа через Telegram или Google. А для записи собственного голоса в браузере система умеет читать ритм из напетого «йогурта» — без отправки самой записи на сервер. Это полезно тем, кто хочет быстро набросать трек, проверить флоу или сделать черновик куплета без студии и музыканта под рукой.