소개
음악은 매일 우리를 둘러싸고 있습니다. 그것은 우리를 설정하고, 우리를 동기 부여하고, 심지어인지 성능을 향상시킵니다. 빠른 리듬적 인 비트는 우리의 에너지를 향상시킬 수 있지만, 더 느린, 더 멜로디적 인 톤은 우리를 편안하게 도와줍니다.그러나 완벽한 재생 목록을 만드는 것은 종종 개인적이고 시간 집중적인 작업입니다.대규모 스트리밍 플랫폼은 음악 전문가에 의존하여 재생 목록을 구축하지만, 대부분의 영역과 마찬가지로 데이터를 사용하여 약간의 자동화 및 기계 지원이 필요합니다.
다양한 장르에 걸쳐 매일 2시간 이상 음악을 듣고, 음악을 제작하고, 개인적인 사용을 위해 재생 목록을 만드는 사람으로서,이 주제는 나와 깊이 호소합니다.이 프로젝트는 나의 음악에 대한 열정을 데이터 분석 전문 지식과 결합시켜 기계 학습 알고리즘의 실용적인 응용을 탐구 할 수있게 해주었습니다.또한, 나는 Spotify의 엔지니어링 기사 - 음악 스트리밍 분야의 선두 주자로서이 공간에서 혁신에 대한 벤치마크를 설정하고 우리에게 고품질의 데이터를 제공했습니다.
Spotify의 엔지니어링 기사문제 설명
이 프로젝트의 목표는 노래를 의미있는 플레이리스트로 자동으로 그룹화하는 클러스터링 기술을 탐구하는 것이 었습니다.기계 학습은 인간 전문가들처럼 큐레이션 된 플레이리스트를 만드는 데 도움이 될 수 있습니까?또는 최소한 죽음 금속과 고전적인 스위트가 같은 목록에 있지 않도록 할 수 있습니까?
이 문제를 해결하기 위해, 나는 댄스 가능성, 속도 및 에너지와 같은 Spotify 오디오 기능을 가진 ~5,000 곡의 데이터 세트를 사용했다.
또한, 나는 장르 정보를 검색하여 클러스터링 품질의 외부 검증을 허용하기 위해 Last.fm API 데이터를 통합했다.
우리의 임무 :
- 오디오 기능을 바탕으로 일관된 플레이리스트로 클러스터 노래를 구성합니다.
- 이 클러스터를 Last.fm 장르에 대해 검증하여 품질을 보장합니다.
초기 데이터 보기
기계 학습에 다이빙하기 전에 기본 기능을 사용하여 데이터 세트를 시각화했습니다. 아래는 tempo와 danceability를 기반으로 한 노래의 분산 플롯입니다.속도 댄스 능력 예를 들어, 브람스의 Lullaby는 낮은 속도, 낮은 춤 능력 영역에서 쉽게 식별 할 수 있지만, 에미네임의 The Real Slim Shady는 중간 속도, 높은 춤 능력 영역에서 나타납니다.
그러나 사용할 수있는 모든 기능을 활용하면 더 풍부한 패턴을 발견하고 재생 목록 만들기를 자동화 할 수 있습니다.
보존되지 않은 클러스터링
지금, 우리의 목표는 일부 초기 클러스터링을 수행하는 것입니다.이 아이디어는 순수한 감독되지 않은 기계 학습을 적용하는 것입니다.우리는 진정한 클러스터 라벨을 알지 못하고 실용적인 방법을 사용하여 클러스터의 최적 수를 결정하는 것을 목표로합니다.이를 달성하기 위해 우리는 몇 가지 기본 단계를 거쳐야합니다.
스케일링
스케일링다음에 적용할 수 있는 대부분의 알고리즘과 방법의 경우, 스케일링 데이터는 필수적입니다.이 알고리즘은 기능의 스케일링에 민감한 계산(거리 또는 변수와 같은)에 의존합니다. 스케일링은 모든 기능이 공정하게 처리되도록 모든 것을 일반 단위로 변환합니다.이로써 각 기능이 클러스터링 프로세스에 동등하게 기여할 수 있습니다.
우리는 여러 가지 스케일러를 사용합니다.
아래는 duration_ms
와 tempo
의 두 개의 기능에 데이터를 투영하는 예입니다.The left plot shows the original data; the right shows the result after applying two scalers — PowerTransformer and MinMaxScaler:
duration_ms
<코드>시간 <코드>
PCA를 사용하여 차원 감소
PCA를 사용하여 차원화 감소다음 단계는 Principal Component Analysis (PCA)로, 가장 중요한 정보를 유지하면서 기능의 수를 줄이는 것입니다.This makes visualization easier and speeds up clustering.
이상적으로 말하자면, PCA는 3D 개체에 플래시를 켜서 2D 그림자를 만듭니다.The flashlight is positioned so the shadow (projection) retains as much detail as possible about the original object.
우리는 다른 수의 구성 요소를 시도하고 결과를 비교할 것입니다.우리의 경우에는 10 가지 옵션을 테스트 할 것입니다.여기에 두 가지 주요 구성 요소에 노래를 투영하는 예가 있습니다.
K-Means 클러스터링
K-Means는 데이터를 미리 정의된 클러스터 수(k)로 그룹화하는 대중적인 클러스터링 알고리즘입니다.But how do we decide on the optimal k?
때때로 우리는 비즈니스 제한이 있습니다. 우리의 데이터 세트는 약 5,000 곡을 포함합니다. 일반적으로 스트리밍 서비스의 재생 목록에는 20 ~ 250 곡이 있습니다.
The Silhouette Score는 각 데이터 포인트가 다른 그룹에 비해 할당된 그룹에 얼마나 잘 맞는지 측정하여 그룹화의 품질을 평가하는 데 도움이됩니다.A higher silhouette score (nearer to 1) means that clusters are well defined and clearly separated.
실루엣 점수최고의 매개 변수 조합
이 많은 정도의 자유와 함께, 우리는 어떻게 매개 변수의 최선의 조합을 찾을 수 있습니까? 대답은 시뮬레이션입니다. 나는 다른 조합을 시도 할 수 있습니다 - 스케일러, PCA 구성 요소의 수, 클러스터 수 - 그리고 가장 잘 작동하는 것을 선택합니다.
이 플롯은 PCA 구성 요소의 다른 조합 (주름 크기), 스케일러 (색) 및 클러스터 수 (y-아시스)에 대한 실루엣 점수 (x-아시스)를 보여줍니다.이 선택을 단순화하기 위해 우리는이와 같은 오른쪽 상단 영역의 옵션에 초점을 맞추어야합니다.
최고의 시각 점수를 가진 첫 번째 의미있는 조합은 MinMax 스케일러, 2 개의 주요 구성 요소 및 6 개의 클러스터를 사용합니다.
6 개의 클러스터는 20 개 이상의 클러스터를 갖는 우리의 비즈니스 요구 사항을 충족시키지 못하지만 여전히 더 자세히 살펴볼 가치가 있습니다.
초기 클러스터링 결과
이전에 언급했듯이, 나는 Last.fm 데이터를 우리의 아티스트를위한 장르 정보와 함께 통합했습니다.이것은 유용한 검증 기준으로 데이터 세트에 적용 할 수있는 완벽한 순간입니다.이 데이터 세트의 5 가지 가장 인기있는 장르를 선택했으며 나머지는 "다른 것" 아래 그룹화되었습니다.
우리의 최고 성능 조합으로 돌아가서, 우리는 이제 장르 라벨을 사용하여 결과 클러스터를 비교할 준비가되어 있습니다.아래는 클러스터별 장르의 비율을 보여주는 시각화와 각 클러스터의 노래 수입니다.
당신이 기억한다면, 나는 문제 진술에서 내 목표 중 하나가 죽음의 메탈과 클래식 음악을 구별하는 것이었다고 언급했다 – 솔직히, 그것은 무작위 예였다.하지만 놀랍게도,이 기준은이 특정 클러스터링 설정에 아주 잘 작동합니다.더 자세히 살펴보십시오 : 클러스터 0과 4는 거의 죽음의 메탈이없는 거의 절반의 클래식 음악으로 구성되며, 클러스터 2와 3는 반대입니다.
그리고, 우리는 여전히 많은 클러스터에서 장르의 혼합을 관찰하고 있으며, 그 중 일부는 음악적으로 호환되지 않습니다.이것은 다른 기술과 평가 매개 변수를 탐구할 가치가 있음을 암시합니다.
궁극적으로 목표는 귀하의 특정 사용 사례에 대해 통계적으로 강력하고 실질적으로 의미있는 클러스터링 솔루션을 찾는 것입니다.
외부 검증으로 클러스터링
이 섹션에서 우리는 장르 정보를 더 광범위하게 사용합니다.이 데이터는 클러스터링 품질을 검증하기위한 우리의 "정상적인 라벨"으로 작동합니다.물론, 그것은 완벽한 기준이나 플레이리스트 만들기에 가장 정교한 접근 방식은 아닙니다 - 그러나 개인적으로 음악 애호가로서, 그것은 잘 작동합니다.예를 들어, 나는 종종 장르 특정 음악을 듣는 것을 선호합니다 : 동기 부여를위한 힙합, 파티에서 록, 또는 작업 중에 고전적인.
이와 같은 질문에 대답하자: 우리는 댄스 능력, 에너지, 타임 등과 같은 기능만을 사용하여 장르별로 음악을 분리 할 수 있습니까?
우리는 댄스 능력, 에너지, 타임 등과 같은 기능만을 사용하여 장르별로 음악을 분리할 수 있습니까?정상화된 상호 정보 (NMI)
정상화된 상호 정보 (NMI)Normalized Mutual Information (NMI)는 두 클러스터 사이의 유사성을 측정합니다.It scores between 0 and 1, where:
- 0는 클러스터 할당과 진정한 라벨 사이의 부합을 의미하지 않습니다.
- 1는 기본적인 진리와 완벽하게 일치하는 것을 의미합니다.
NMI를 사용하여 최고의 클러스터링 설정을 찾기 전에, 우리가 이전에 식별 한 구성 - MinMaxScaler, 2 개의 PCA 구성 요소 및 6 개의 클러스터를 사용하여 그것을 평가합시다.
지금, 우리는 단순성을 위해 스케일러를 수정하고 PCA 구성 요소의 수가 NMI 점수를 어떻게 영향을 미치는지에 초점을 맞출 것입니다.
우리는 n=6의 NMI 점수가 n=2의 점수보다 상당히 높다는 것을 알 수 있습니다 (0.29 vs. 0.18).n=6에 해당되는 글 1건n = 2 이것은 이미 큰 개선입니다.우리는 이제 죽음의 금속이 두 개의 클러스터로 아름답게 분리되어 모든 클래식 음악이 하나로 그룹화 된 것을 볼 수 있습니다. 참조를 위해, 아래는 다양한 클러스터링 구성에 대한 NMI 점수 비교입니다: 최고의 NMI 점수는 최고의 장르 중심 클러스터링을 나타냅니다.이 결과는 매우 기대됩니다 – 검증 데이터를 사용하면 음악 클러스터링을 크게 향상시킬 수 있습니다.그러나 여기서 중요한 점은 K-Means 클러스터링을 검증하고 동일한 매개 변수를 사용하여 라벨 품질에 대한 더 나은 이해를 얻는 것입니다. 이 프로젝트에서 나는 기계 학습이 오디오 기능만을 사용하여 의미있는 클러스터로 음악 트랙을 그룹화하는 데 도움이되는 방법을 탐구했습니다.Scaling, PCA, K-Means와 같은 기본적인 감독되지 않은 학습 기술에서 시작하여 Last.fm의 실제 장르 데이터를 사용하여 결과를 검증했습니다. 실루엣 점수는 내부 일관성을 최적화하는 데 도움이되었지만 장르 조정을 통한 외부 검증은 클러스터의 실용적인 품질에 대한 더 깊은 통찰력을 제공했습니다. 이것은 단지 출발점입니다.미래의 개선은 UMAP 및 HDBSCAN과 같은 고급 기술을 탐구하여 클러스터링을 향상시키고 SHAP를 사용하여 더 나은 해석을 할 수 있습니다.이 도구를 사용하면 지능적이고 음악적으로 의미있는 재생 목록 시스템을 구축할 수 있습니다. 마지막으로, 기계 학습은 분명히 인간의 치유를 보완할 수 있습니다. 지금까지, 그것은 대규모 음악 도서관을 조직하고 탐구 할 수있는 확장 가능한 방법을 제공합니다.
결론