Обучение сетевых моделей текстам песен с помощью Genius API

Авторы Майкл Датц, Дункан Граббс и Джи Ман Ким

вступление

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

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

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

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

Эти слова явно взяты из песни «Norwegian Wood (This Bird Has Flown)» группы The Beatles, написанной совместно Ленноном и Маккартни.

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

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

Прежде чем мы начнем…

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

Что касается данных, мы использовали Genius API - интерфейс, который позволяет нам подключаться к веб-сайту и собирать столько данных, сколько необходимо. Мы смогли получить доступ к этому API с помощью библиотеки Python LyricsGenius - это значительно упростило выполнение запросов. Предположим, аудитория знакома с библиотеками, которые используются для создания нейронных сетей, такими как Keras и TensorFlow.





Сбор данных

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

Мы решили использовать данные Genius, веб-сайта текстов песен, на котором люди могут добавлять аннотации и комментировать песни. Genius написан пользователями, как и Википедия, но на него также ссылаются официальные тексты песен и другие источники, прежде чем он будет признан правильным. Как упоминалось ранее, Genius был запрошен с использованием библиотеки Python LyricsGenius.



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

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

Имея это в виду, мы для начала выбрали 10 известных исполнителей и собрали тексты из 100 их песен. Мы выбрали артистов с глубокой дискографией, которые легко могли бы дать нам по 100 песен каждый. Эти тексты на основе API Genius были взяты из 100 самых популярных песен на веб-сайте Genius.

Подход

После сбора данных нам пришлось их очистить. Genius API предоставил не только текст песни, но и данные аннотации, которые не были важны для нашего проекта. Используя скрипт, мы очистили файлы так, чтобы у нас был необработанный текст текстов песен и ничего больше. Это было скомпилировано в файлы JSON.

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

Токенизация

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

Сеть

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

Как вы можете видеть здесь, наша точность обучения была выше, чем точность проверки, чего и следовало ожидать, но в целом оба значения были очень низкими, с точностью всего 20%. С такими плохими результатами мы подумали, что лучше искать новый подход.



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

Как вы можете видеть в наших результатах ниже, точность обучения была очень близка к 100%, в то время как точность проверки ограничивалась примерно 40%. Однако следует отметить, что эти результаты были достигнуты через 30 эпох, в отличие от сотен эпох для нашей предыдущей модели.

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

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

Выводы и дальнейшие проекты

После этого проекта мы можем сделать вывод, что наша классификация текстов еще далека от возможности анализировать такую ​​стилизованную прозу, как тексты песен, особенно с небольшим объемом данных, которые мы смогли использовать. Хотя полученные нами результаты являются новыми, мы обнаруживаем, что для повторного рассмотрения этой темы требуется еще больше данных. Тем не менее, в этой теме есть потенциал.

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

Хотя сеть и раньше видела The Beatles и Тейлор Свифт, она не видела Дрейка или ACDC. Введя данные, которых сеть никогда раньше не видела, мы могли по-новому взглянуть на то, как наша модель классифицирует тексты песен. При загрузке текста от Дрейка модель выводит, что песня была написана Лил Уэйн, что, учитывая их стиль, является вполне понятным предположением.

Хотя при загрузке «Back in Black» от AC / DC модель выводила, что песня была написана Дж. Коулом. Можно кое-что сказать об обучении модели - когда мы загружали песни, которые уже были просмотрены сетью, выводился правильный исполнитель.

Дрейк, «План Бога» - ›Лил Уэйн

AC / DC, Back In Black - ›Дж. Коул

The Beatles, «Hey Jude» - ›The Beatles

Тейлор Свифт, «Любовник» - ›Тейлор Свифт

Как уже упоминалось ранее, потенциал есть. Не только в лирической классификации, но и в более широкой проблеме классификации авторов текстов НЛП. Это может быть использовано спецслужбами для определения того, кто написал электронное письмо или текстовое сообщение, или такими компаниями, как Google и Apple, для автоматического определения автора новых писем и текстов.

Ознакомьтесь со всем исходным кодом и данными на Github здесь.