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

Чувства тесно связаны с эмоциями, но не тождественны им. Принципиальное различие между чувствами и эмоциями состоит в том, что чувства переживаются сознательно, тогда как эмоции проявляются либо сознательно, либо подсознательно. Некоторые люди могут провести годы или даже всю жизнь, не понимая глубины своих эмоций. Очевидно, я тоже гуглил. Я сам не понимаю разницы. Когда кто-то плачет, как мы можем понять, «грустит» этот человек или «эмоционирует». Я уверен, что есть способы выяснить это, но мы не будем углубляться в это. Суть различия состояла в том, чтобы грубо сказать, что чувства как-то легче сформулировать, если мы сравним их с эмоциями. Изменчивость чувств дает нам данные с разнообразием. Эмоции известны тем, что смешиваются и прячутся у всех на виду, так что я пока от них откажусь.

НАБЛЮДЕНИЯ

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

  1. Счастье, в отличие от печали, легко поддается изменениям. Момент счастья может превратиться в эпизод скорби через воспоминания. Когда мы делаем это, мы живем в будущем, где мы упускаем текущий момент, находясь в нем. Эта трансформация часто запускается, когда мы пытаемся признать сам момент вместо того, чтобы жить в нем, или когда мы используем неправильный набор песен или саундтреков, пытаясь усилить чувство счастья. Что такое «неправильный» набор песен? Мы можем легко разделить музыку на «медленную» или «оптимистическую» по темпу. Темп песни обычно измеряется в ударах в минуту (BPM), что указывает на количество ударов или импульсов, возникающих за одну минуту песни. Есть несколько способов измерить темп песни, но наш мозг делает это, просто разделяя темп на медленный или быстрый. Веселые песни часто оказывают положительное влияние на наше настроение. Когда мы счастливы, это часто усиливает чувство. Мне нравится представлять это как конструктивное вмешательство. Мое счастье и песня, которую я слушаю, можно рассматривать как волну. Счастье имеет свою естественную частоту и амплитуду. Если волна песни конструктивно не мешает, то портит настроение или в худшем случае превращает в тот эпизод, о котором мы говорили. Медленные песни с арпеджио под гитару могут быть хороши для расслабления или воспоминаний, но если мы слушаем их, когда мы счастливы, это производит тот же эффект, мы начинаем жить в будущем, делая текущую сцену чем-то напоминающим. Ну, если вы не совсем сумасшедший, я предполагаю, что вы не слушаете песни с грустными текстами или что-то с медленной скрипкой, когда вы энергетически счастливы.
  2. Печаль не так легко превратить в радость. Когда мы слушаем оптимистичные песни, когда нам грустно, это не всегда смещается так, как нам хотелось бы. Однако трансформировать его в ярость как-то проще. Интуиция подсказывает нам, что прослушивание песен с более низким темпом или чего-то с грустным текстом может вызвать чувство грусти, но это часто толкает нас по спирали. Я могу попытаться объяснить это на примере волн и интерференции, но я попробую под другим углом. В шумной обстановке способность слышать определенный звук или голос среди фонового шума в первую очередь зависит от громкости звука. В нашем шумном классе мой учитель всегда ловил одного конкретного ученика, хотя все в классе кричали, потому что он был громче. Когда я шел по той же линии, я заметил, что когда нам грустно или грустно, мозг особенно шумит. Теперь все, что нам нужно, это громкий студент, чтобы стоять в стороне от фонового шума. Нам нужно что-то громкое и быстрое. Прослушивание рока/металла/хип-хопа часто нейтрализует фоновый шум в мозгу.
  3. Когда я работаю или отдыхаю, я предпочитаю музыку с меньшим количеством речи, что означает музыку с меньшим количеством вокала или произносимых слов. Я уверен, что я не одинок. Ум разговаривает сам с собой, когда речь идет о решении проблем, критическом мышлении, мозговом штурме или просто размышлениях. Когда слова из музыки заполняют мозговое пространство, становится трудно сосредоточиться на словах собственных внутренних мыслей.

ПОДГОТОВКА ДАННЫХ

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

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

Давайте познакомимся с терминологией, используемой для понимания музыки:

  • Энергия: мера интенсивности или уровня активности песни.
  • Громкость: Воспринимаемая громкость или интенсивность песни.
  • Валентность: эмоциональная позитивность или негативность песни.
  • Темп: скорость или темп песни, часто измеряемый в BPM, но мы уменьшим его до плавающего значения от 1,0 до 10,0.
  • Акустика: Относится к числовому показателю или атрибуту песни, который количественно определяет степень, в которой она демонстрирует акустические или неподключенные характеристики. Песни с более высоким значением акустики содержат больше акустических или органических звуковых элементов, таких как акустические инструменты, такие как гитары, фортепиано или вокал, без тяжелых электронных эффектов.
  • Liveness — восприятие живого исполнения в песне.
  • Речевость — наличие произносимых слов или речи в песне.
  • Инструментальность — наличие или отсутствие инструментов в песне.

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

РАЗРАБОТКА ФУНКЦИЙ

Я хочу, чтобы все значения функций были в одном масштабе, чтобы модель не была смещена в сторону одного атрибута. Например, если значения характеристики энергии находятся в диапазоне от 0,01 до 0,09, а значения характеристики громкости находятся в диапазоне от -10 до 10, модель будет смещена в сторону атрибута громкости из-за их разницы в величине. Итак, сначала нам нужно нормализовать переменные или значения с плавающей запятой. Сначала я был доволен функциями, которые мы выбрали для песен, но похоже, что нам нужна дополнительная помощь, чтобы прояснить ситуацию. Нам нужно добавить объединенный жанр песен в набор функций. Нам нужен более высокий уровень детализации, чтобы мы могли узнать больше о том, какие типы песен относятся к определенному вектору предпочтений. Поэтому нам нужно смотреть на наши функции на детальном уровне. Например, рок — это общий жанр, но если в нашем наборе данных есть поджанры рока, такие как «прогрессивный рок», «инди-рок», «панк-рок» и т. д., это добавляет столько деталей в наше входное пространство модели. Если мы откроем все, это даст нам примерно 2600 элементов в нашем наборе функций. Представьте себе уровень детализации, на который смотрит Spotify, чтобы создавать такие точные рекомендации.

Теперь мы можем примерно увидеть предпочтения пользователя, используя своего рода смещение частоты для жанров. Для этого мы будем использовать TF-IDF. TF-IDF расшифровывается как Term Frequency — обратная частота документа. Он измеряет важность ключевой фразы, сравнивая ее с частотой использования термина в большом наборе документов. В нашем консолидированном жанре, если появляется какой-то общий жанр, например «рок» или «поп», мы не хотим, чтобы он имел большой вес, который повлиял бы на модель. С другой стороны, если появляется что-то конкретное, что действительно дает нам подсказку о вкусах пользователя в музыке, такой как «Indian Classical», мы хотим, чтобы это повлияло на направление модели. Этот простой, но элегантный алгоритм позволяет нам легко добавлять веса песням.

def create_feature_set(df, float_cols):

    tfidf = TfidfVectorizer()
    tfidf_matrix =  tfidf.fit_transform(df['consolidates_genre_lists'].apply(lambda x: " ".join(x)))
    genre_df = pd.DataFrame(tfidf_matrix.toarray())
    genre_df.columns = ['genre' + "|" + i for i in tfidf.get_feature_names()]
    genre_df.reset_index(drop = True, inplace=True)  
    year_ohe = ohe_prep(df, 'year','year') * 0.5
    popularity_ohe = ohe_prep(df, 'popularity_red','pop') * 0.15
    floats = df[float_cols].reset_index(drop = True)
    scaler = MinMaxScaler()
    floats_scaled = pd.DataFrame(scaler.fit_transform(floats), columns = floats.columns) * 0.2
    final = pd.concat([genre_df, floats_scaled, popularity_ohe, year_ohe], axis = 1)
    final['id']=df['id'].values
    
    return final

complete_feature_set = create_feature_set(spotify_df, float_cols=float_cols)

СОЗДАНИЕ ВЕКТОРА ПРЕДПОЧТЕНИЙ

Мы нажимаем на песню или саундтрек, и наше музыкальное приложение воспроизводит его для нас. Для таких приложений, как Spotify, когда мы не воспроизводим плейлист, он создает очередь похожих песен для воспроизведения после песни, которую мы слушаем.

Чтобы векторизовать эту очередь, мы добавили несколько столбцов, таких как «Дата», «Месяцы позади» и «Вес».

Причина добавления этих трех столбцов:

Я хочу интуитивно применить смещение новизны или расставить приоритеты для песен, которые были добавлены совсем недавно. Взяв «Месяцы позади» в качестве входных данных, я могу создать «Вес», который определяет, какой вклад вносит определенная строка в качестве входных данных в нашу основную модель. Таким образом, вес каждой отдельной строки умножается на всю строку. Окончательный вектор предпочтений — это просто совокупность всех этих строк. Этот вектор суммирует все песни, которые я предпочитаю.

РАСЧЕТ ОЦЕНОК ЗА ПЕСНИ

Мы можем визуализировать идею сравнения, используя 2D-представление этих векторов, взяв за основу визуализацию подобных векторов Мадхава Такера. Это изображение показывает нам, как мы можем рассчитать «баллы» для песни относительно вектора предпочтений пользователя. Косинусное сходство — это показатель, используемый для измерения сходства между двумя векторами в многомерном пространстве. По сути, мы вычисляем косинус угла между двумя векторами, который представляет их сходство с точки зрения направления. Итак, здесь угол между вектором предпочтения и вектором песни представляет персонализированную оценку для новой песни, что означает, что чем меньше угол, тем выше оценка песни. Что касается общих рекомендаций, мы закончили. Ожидается, что наша модель предоставит нам рекомендации, которые каким-то образом согласуются с тем, как мы слушаем, но это не то, к чему мы стремимся. Мы хотим изменить рекомендации, чтобы наша модель давала нам песни, соответствующие нашим чувствам. Для меня модель терпит неудачу, если пользователь слушает серию грустных песен, а модель продолжает подливать масла в огонь, предлагая похожие песни. Нам нужно примерно оценить чувства пользователя, чтобы правильно настроить рекомендации.

def create_necessary_outputs(preference_vector,id_dic, df):

    preference = pd.DataFrame()
    preference_vector = name

    for ix, i in enumerate(sp.preference(id_dic[name])['tracks']['items']):
        preference.loc[ix, 'artist'] = i['track']['artists'][0]['name']
        preference.loc[ix, 'name'] = i['track']['name']
        preference.loc[ix, 'id'] = i['track']['id'] # ['uri'].split(':')[2]
        preference.loc[ix, 'url'] = i['track']['album']['images'][1]['url']
        preference.loc[ix, 'date_added'] = i['added_at']

    preference['date_added'] = pd.to_datetime(preference['date_added'])  
    
    preference = preference[preference['id'].isin(df['id'].values)].sort_values('date_added',ascending = False)
    
    return preference

ИЗМЕНЕНИЕ ОЦЕНКИ

Создание набора данных путем проведения опроса и задания людям вопросов о песнях, которые они слушают, когда чувствуют себя определенным образом, а затем обучения модели с использованием методов обучения с учителем и определения гиперпараметра для всех функций, которые мы обсуждали, чтобы проверить, имеет ли значение конкретная функция. превышает значение параметра, чтобы решить, что человек чувствует, является сложной задачей. Хотя, если мы получим такой набор данных, на котором мы будем обучать нашу модель и найдем совокупное значение для каждого значения функции, которое делает решение о том, пометить ли человека счастливым, грустным или злым, просто вопрос оператора if-else. Поскольку у нас нет такого набора данных, я могу просто полагаться на оценку когнитивных способностей пользователя на основе результатов разработанной нами модели. Мы разрабатываем отдельную систему подсчета очков. Итак, вот некоторые предположения, на которые мы будем опираться при построении нашей модифицированной оценки:

  1. Если вектор предпочтений выдает более высокие значения таких характеристик, как «Энергия», «Танцевальность», «Валентность», то мы придерживаемся системы оценок, которую мы разработали ранее, потому что, если мы получим более высокие значения этих характеристик, мы будем предполагать, что человек счастлив, и подобные песни были бы хорошей рекомендацией.
  2. Если мы получаем более низкие оценки по характеристикам, которые мы обсуждали выше, особенно по валентности, и, кроме того, мы получаем более высокие оценки по таким характеристикам, как акустика, то мы каким-то образом устанавливаем низкие оценки для похожих предложений песен. Таким образом, мы сохраняем нашу теорию и, возможно, предотвращаем падение пользователя по спирали. Просто шучу.

Эти теории основаны на личном опыте и философии. Когда на сердце тяжело, вместо того, чтобы тяжелеть, лучше встряхнуть его от апатии. Значимый шум всегда лучше, чем мозговой шум, который вызывает неуверенность в себе. Это была моя попытка создать что-то более личное, что-то, что связано с вашими чувствами и требует соответствующих действий. Если математика может помочь представить сложные космологические явления, я уверен, что мы можем также представить чувства. Спасибо за прочтение !