Şarkı Önerileri Oluşturma

Apr 26 2023
Jaykumar Patel, Janvi Patel, Aniketh Devarasetty, Malvika Vaidya, Seann Robbins, Tanner Hudnall Giriş Bu makalede, bir şarkı öneri modeli oluşturmaya yönelik ilk girişimlerimizi göstereceğiz. Veri setimizin açıklamasını ve nasıl kullanıldığını anlatacağız.

Jaykumar Patel, Janvi Patel, Aniketh Devarasetty, Malvika Vaidya, Seann Robbins, Tanner Hudnall

giriiş

Bu makalede, bir şarkı öneri modeli oluşturmaya yönelik ilk girişimlerimizi göstereceğiz. Veri setimizin açıklamasını ve nasıl kullanıldığını anlatacağız. Ardından, bir giriş şarkısı verilen şarkı önerilerinin kısa bir listesini oluşturan modelimizin eğitimini açıklayacağız. Son olarak, mevcut modelimizin sınırlamalarını ve gelecekte onu nasıl geliştirmeyi umduğumuzu tartışacağız.

Amaç

Araştırma yaptıktan sonra, bu görev daha önce denenmiştir. Ancak, araştırdığımız çoğu öneri sistemi şarkı sözlerinin ardındaki anlamı hesaba katmadı. Örneğin, bu makale Spotipy kitaplığı tarafından sağlanan şarkı özelliklerine bakmaktadır. Sözler değil, yalnızca “dans edilebilirlik”, “ses yüksekliği”, “tuş” vb. gibi müzikal özellikler sağlar. Bu özellikler üzerinde analiz gerçekleştirmeye devam eder. kümeleme, t-SNE ve PCA gibi. GeeksforGeeks tarafından hazırlanan bu öğretici de benzer bir yaklaşım kullanıyor.

Ayrıca bu makale , "içerik" temelli yaklaşım (kullanıcının geçmişte dinlediklerine göre şarkı öneren) ve "işbirlikçi" temelli yaklaşım (diğer benzer kullanıcıların beğendiklerine göre şarkı öneren) karışımına bakar. Bununla birlikte, makalenin yaklaşımı, özelliklere bakıldığında bir şarkının sözlerini veya anlamını da hesaba katmamaktadır.

Ayrıca Spotify'ın öneri modelinin, şarkı önerirken kullanıcının dinleme geçmişini gereğinden fazla vurguladığı bir sorunu fark ettik. Şarkı önerirken özellikle şarkıya ve özelliklerine (kullanıcı geçmişinden ziyade) odaklanarak bu sorunu çözmek istedik.

Şarkıların anlamını ve diğer müzikal özellikleri yakalamak istedik, bu önceki modellerin yapamadığı bir şeydi. Bu, şarkı sözlerini ve Spotify API'nin sağladığı "dans edilebilirlik", "enerji", "anahtar" vb. bilgileri içerir. Spotify API'nin sağladığı bu bilgileri bundan sonra "müzikal özellikler" olarak anacağız.

İdeal olarak, modelimiz şarkı sözlerini analiz edebilir ve giriş şarkısının kısa bir açıklamasını veya özetini oluşturabilir ve giriş şarkısının açıklaması ve müzikal özellikleri açısından benzer olan en iyi 5 şarkıyı önerebilir.

Model tasarımı:

  • Amacımız multimodal olduğu için modelimizi iki alt modele ayırmaya karar verdik.
  • İlk modelimiz, bir açıklama oluşturmak için giriş şarkısının sözlerini kullanan bir NLP özet modelidir.
  • İkinci modelimiz ise müzikal özellikler açısından giriş şarkısına benzer şarkılar bulan bir KNN Clustering modelidir.
  • Bu modelleri geliştirmek için ihtiyaç duydukları tüm özellikleri toplayacak bir veri hattına ihtiyacımız var.

Kaggle ve Hugging Face gibi veriler için çeşitli yerlere baktık. Ancak, yalnızca şarkı sözlerini VEYA müzikal özellikleri içeren verileri bulduk. Bir giriş şarkısının açıklamasını oluşturabilecek bir NLP özetleme modeli oluşturmak için, NLP modelini eğitmek için şarkı açıklamalarıyla birlikte şarkı sözlerini de bulamadığımız bir veri kümesine ihtiyacımız olacaktı. Ayrıca, KNN modelinin müzikal özelliklere ihtiyacı olacaktır. Bu nedenle, bu projenin en büyük zorluğu, modellerimizi eğitmek için gerekli verileri toplamaktı.

Veri hattımıza son yaklaşım şu şekildedir:

  1. Şarkıların müzikal özelliklerini içeren ilk veri setimizi Kaggle'dan aldık.https://www.kaggle.com/datasets/maharshipandya/-spotify-tracks-dataset
  2. Ardından, 100.000'den fazla şarkının ilk veri kümesini yalnızca popülerliği 50'den fazla olan şarkıları içerecek şekilde filtreledik. Bu, veri kümesini ~26.000 şarkıya düşürdü. Bunu yaptık çünkü ideal olarak önerdiğimiz şarkılar beğenilebilir olmalı ve genellikle bir şarkının popülaritesi beğenilebilirlikle ilişkilendirilir.
  3. Sonra rastgele 10.000 şarkı seçtik. Bunu yaptık çünkü bu şarkıların sözlerini ve açıklamalarını toplamak zorunda kalacağız ve veri setindeki her şarkıya bakarsak bu (zaman ve para açısından) imkansız hale gelecekti.
  4. Ardından, lid.176.ftz modelini kullanarak İngilizce olmayan şarkıları filtrelemek için fastText kitaplığını kullandık .
  5. Daha sonra Genius.com API'si için bir python istemcisi olan LyricsGenius'u şarkılarımız için şarkı sözleri toplayabilmek için kullandık .
  6. Ardından, her şarkının açıklamalarını oluşturmak için aşağıdaki sorguyla ChatGPT'nin API'sini kullandık .

Bu sorguyu, çeşitliliği ve daha geniş öneriler yelpazesini teşvik etmek için tanımlayıcı özellikler (sanatçı adı veya şarkı adı gibi) olmadan şarkıların içsel özelliklerinden öneri oluşturmak üzere formüle ettik.

Kaggle veri setimizi bu ardışık düzen aracılığıyla besledikten sonra, şarkının tanımlayıcı bilgilerini, müzikal özelliklerini, sözlerini ve açıklamalarını içeren yaklaşık 5000 şarkımız kaldı. Bu önceden işlenmiş veri seti, iki hedef modelimizi geliştirmek için temel oluşturur. Bundan sonra bu veri kümesini basitçe “veri kümesi” olarak anacağız.

Özetleme Modeli

Ana görevlerden biri, giriş şarkısı için bir şarkı açıklaması oluşturmak üzere kullanılacak bir özetleme modeli eğitmekti. Bunun için transfer modelleri fikrini kullandık.

Kullanıcının giriş şarkısının sözlerinin özetini oluşturmak için t5-small modelini kullandık . T5, çeviri ve özetleme gibi çeşitli görevleri gerçekleştirmek için önceden eğitilmiş bir kodlayıcı-kod çözücü modelidir. Modelin tüm ihtiyacı, "özetle: <metin gir>" gibi, görevinin önekiyle birlikte bir giriş metnindedir. Bununla birlikte, belirli bir uygulama için en iyi çıktıyı üretmek üzere modelin bazı ince ayarlara ihtiyacı vardır. Bu nedenle, ~5.000 İngilizce şarkıdan oluşan bir veri kümesini ve ChatGPT tarafından oluşturulan hedef özetlerini kullanarak t5-small modelini bir şarkının sözlerini özetlemesi için eğittik. Model 40 dönem için eğitildi ve yaklaşık 2 çapraz entropi kaybına sahipti. Bu kayıp nispeten yüksek olmasına rağmen, yalnızca 5.000 örnek üzerinde eğitim için makul bir sayıdır.

Modelin parametreleri daha sonra bir meşale dosyasına kaydedildi. Parametreler varsayılan önceden eğitilmiş özetleyiciye yüklendikten sonra, model bazı şarkı sözlerinin girdi olarak verildiği bir özet oluşturabilir.

Açıklama Karşılaştırma

İlk 500 benzer şarkıyı belirlemek için giriş şarkısının açıklamasını veri kümemizdeki ~5000 şarkının açıklamalarıyla karşılaştırmanın bir yoluna ihtiyacımız vardı.

İki metni karşılaştırmanın bir yolu, onları vektörleştirilmiş bir biçime dönüştürmek ve ardından içerik olarak ne kadar benzer olduklarını gösteren aralarındaki kosinüs benzerliğini hesaplamaktır. Bu teknik, daha benzer metinlerin vektörlerinin uzayda daha yakın olacağı iki vektör arasındaki kosinüs açısını ölçer.

Bu nedenle, şarkı özetlerini karşılaştırmak için tüm özetlerin bir vektör temsiline dönüştürülmesi gerekir. İki olası yaklaşım alınabilir — CountVectorizer veya TfidVectorizer. CountVectorizer, her satırın bir belgeyi ve her sütunun bir sözcüğü temsil ettiği seyrek bir matris oluşturarak, bir belgedeki her kelimenin geçtiği yeri sayar. TfidVectorizer (Terim Frekansı Ters Belge Frekans Vektörleştiricisi anlamına gelir) ise, terimin belgedeki sıklığının yanı sıra belgedeki terimin ters sıklığını da dikkate alır. Bu ters frekans, terimin 'nadirliğini' temsil eder, bu nedenle bu teknik, kelimenin hem sıklığını hem de nadirliğini hesaba katar, bu nedenle daha önemli, benzersiz kelimelere daha fazla ağırlık ve yaygın kelimelere daha düşük ağırlık verir.

Veri kümesindeki özetler ve modelden tahmin edilen özet, python'un TfidVectorizer'ı kullanılarak vektörleştirildi. Kosinüs benzerliği, veri kümesindeki her giriş ile öngörülen özet arasında hesaplandı. Veri kümesindeki en yüksek kosinüs benzerlik puanlarıyla sonuçlanan ilk 500 giriş, esasen veri kümesindeki anlam ve içerik açısından giriş şarkısının tahmin edilen özetine en yakın olan 500 şarkıyı temsil eder.

Bu vektörleştirme ve kosinüs benzerliği yaklaşımı iyi performans gösterdi. Belirli bir tahmini özet için, “Bir erkek ve kadın, aileleri tarafından hor görülen romantik bir ilişkiye girerler. Aşkları için savaşmalılar,” en önemli tavsiyelerden biri Wande Coal'ın “Again” adlı şarkısıydı. ChatGPT tarafından oluşturulan bu şarkının özeti şu şekildedir: “Şarkı, bir kadına aşık olan ve hayatının geri kalanını onunla geçirmek isteyen bir adam hakkındadır. Ona başkalarının onun hakkında söylediklerini dinlememesini söyler ve onu mutlu edeceğine söz verir.” Bu iki metin, ilişkinin romantik ve biraz yasaklanmış yönünü yakalamaları bakımından içerik olarak nispeten benzerdir.

Alternatif yaklaşım:

Şarkı sözlerini vektörleştirmeye yönelik başka bir yaklaşım da kelime yerleştirmeleri kullanmaktır. Bir BERT trafo modeli, alakasız bir görevi başarmak için şarkının özetleri üzerinde eğitilebilir. Model eğitildikten sonra, her özet belge olarak modele aktarılabilir. Her belge için, CLS belge katıştırması, modelin çıktı katmanlarından birinden çıkarılacaktır. Bir CLS belgesi gömme, tüm belgeyi yakalayan bir belirteç olan CLS belirtecinin vektör temsilidir. Bu bize her bir özetin vektör gösterimini verecek ve ardından kosinüs benzerlikleri hesaplanabilecektir.

Bu tekniğin proje kapsamında gerekli olmadığını gördük. Görünüşe göre TfidVectorizer, özetlerin anlamını oldukça iyi bir şekilde yakalıyor ve güçlü bir çıktı sağlıyor.

Müzikal Özellik Karşılaştırması

Ardından, müzikal özelliklere göre 500 şarkı arasından en çok benzer olan 5'i belirlemenin bir yoluna ihtiyacımız vardı. Müzikal özellikler sayısal olduğu için sklearn'ün K-En Yakın Komşularını kullanabildik .

Sözleri en az benzer olan şarkıları filtreledikten sonra sıra şarkı özelliklerine en çok benzeyen şarkıları seçmektir. Özelliklerdeki bu benzerlikleri ölçmenin uygun bir yolu, Spotify'ın bir şarkının "akustik" veya "enerji" gibi belirli özelliklerini ölçen parça özelliği sınıflandırmalarını analiz etmektir. Spotify API'yi kullanarak, herhangi bir giriş şarkısı için bu ölçümleri toplayabilir ve ardından benzer şarkıları elde etmek için aşağıdaki algoritmayı çalıştırabiliriz.

K En Yakın Komşular, girdi veri noktasının özelliklerinin benzerliğine ve veri kümesindeki noktalara dayalı olarak belirli bir noktaya en yakın k veri noktasını bulmak için kullanılabilen denetimsiz bir makine öğrenimi algoritmasıdır. En yakın müzikal özelliklere sahip en iyi k şarkıyı bulmak için, kullanıcının giriş şarkısının özelliklerini tüm filtrelenmiş şarkılarla karşılaştırmak için bu tekniği kullanabiliriz. Projemiz için, en iyi 5 komşu şarkıyı bulmanın makul bir çıktı sağlayacağına karar verdik ve bunların tümü kullanıcının şarkısına benzer müzikal özelliklere sahip olmalıdır.

Kullanıcı Akışı

Öneriler isteyen bir kullanıcı için süreç şöyle görünür. Beğendikleri bir şarkıyı girerlerdi. Giriş şarkısının sözlerini almak için LyricGenius API'sini kullanırdık. Daha sonra, NLP özetleme modelimizi kullanarak bir açıklama oluşturmak için bu şarkı sözlerini kullanırdık ve bu açıklamayı, benzer ilk 500 şarkıyı belirlemek için veri kümemizdeki şarkıların açıklamalarıyla karşılaştırırdık. Ardından giriş şarkısının müzikal özelliklerini Spotify'ın API'sini kullanarak alır ve en iyi 5 tavsiyeyi almak için bunları 500 şarkıyla karşılaştırırdık.

Sonuçlar

Özetleyici model, doğrulama setinde yaklaşık 2 çapraz entropi kaybına sahipti. Ek olarak Rouge1, Rouge2 ve RougeL gibi değerlendirme metriklerini kullandık. Rouge1 ve rouge2, sırasıyla orijinal şarkı sözleri ve tahmin arasında eşleşen unigram ve bigram sayısını temsil eder. RougeL skoru en uzun ortak alt diziyi temsil eder. Bu metrikler için puanlar sırasıyla 0,25, 0,07 ve 0,17 idi, burada daha yüksek değerler daha uygun.

Kayıp nispeten yüksek ve ruj puanları düşük olsa da, oluşturulan özetlerin ChatGPT tarafından oluşturulan özetlerle nispeten karşılaştırılabilir olduğunu belirlemek için insan değerlendirmesini kullandık.

"Riptide - The Chainsmokers" şarkısı için ChatGPT ve özetleme modelimiz (t5-small) tarafından oluşturulan açıklamanın karşılaştırması:

ChatGPT tarafından oluşturulan açıklama:

Şarkı, birinin hayatını önemsediği biriyle geçirmeyi istemek ve birlikte geçirdikleri zamanı en iyi şekilde değerlendirmekle ilgili. Sözler aynı zamanda o kişiyi kaybetme korkusuna ve bittiğinde nereye gideceklerini merak etmeye de değiniyor.

Açıklama Özetleme modelimiz tarafından oluşturulmuştur — t5-small:

Şarkı, hayatlarını değiştirmeye ve sadece bir geceleri olsa onlarla birlikte yaşamaya çalışan bir insan hakkındadır. Sözler, kendi başlarına kaybolma hissini ve sevdiklerini kaybetmiş gibi hissettiklerini anlatıyor. Buna rağmen şarkıcı hayatını bir kişiyle yaşamak ve geceyi sadece diğer kişiyle geçirmek istemektedir.

Metinlerin açıklamalarını karşılaştırmak ve nihai önerileri belirlemek için KNN'yi hesaplamak için herhangi bir değerlendirme ölçütümüz yoktu. Bunlar denetimsiz öğrenme teknikleri olduğu için insan değerlendirmesini de kullandık.

İşte “Riptide - The Chainsmokers” şarkısı için oluşturulan öneriler:

Sonuç ve Gelecek Çalışmalar

Üretilen şarkıların oldukça ortak bir motifi olduğunu, ancak şarkıların tarzının bazen farklı olduğunu fark ettik. Bunun nedeni, şarkı benzerliğini tahmin ederken türü hesaba katmamamızdır. Dolayısıyla, bu gelecekte eklemek istediğimiz bir şey.

Ayrıca, bir şarkının zaman imzası, şarkı enstrümantasyonu ve sanatçı bilgisi gibi özelliklerin sayısını artırmak istiyoruz. Bu, modelin daha benzer şarkılar önermesini sağlar.

Ayrıca, veri setimizin boyutunu da artırmak isteriz. Bu, özetleme modelinin şarkı açıklamalarının daha doğru olmasını sağlayarak genel performansı iyileştirir.