Spotify如何估算你喜歡的歌曲

Posted by

「Spotify可讓你隨時尋找想聽的音樂-包括你的手機、電腦、平板電腦及更多。」這是Spotify提供免費及付費音樂串流服務,用戶可利用各種不同的設備隨時收聽自己所喜歡的音樂。很多用戶都可能沒有注意到,Spotify一直在估算著用戶可能喜歡的音樂,從而作出歌曲推薦。最近亦提供「每週新發現」(Discover Weekly)播放清單,究竟Spotify如何作出歌曲建議呢?

Spotify最近公佈付費用戶突破一億大關,而在美國地區,收費用戶2,600萬人,僅次於Apple Music的2,800萬付費用戶。免費用戶平均每月活躍用戶亦超過2億人。歌曲3,000萬首,向超過60個地區提供服務。這麼龐大的數據庫,不好好利用豈不是浪費了?所以Spotify的歌曲建議改一改形象,變成「每週新發現」(Discover Weekly),透過了解用家的音樂品味,每星期提供不同的播放清單讓用家選擇。

讓我用一個簡單例子去解釋歌曲建議之演算法。不論免費用戶或付費用戶都需要註冊一個帳號才可以使用服務,所以每位用戶所曾播放的歌曲都被紀錄在案。在後台的龐大數據庫中,每首歌曲會被分類及設定為多項不同屬性,例如:

  • 語言
  • 歌曲長度
  • 音調
  • 音速
  • 聲量
  • 音樂類型
  • 語言歌曲或純音樂
  • 錄製歌曲或現場演繹
  • 等等

而另一方面,就是用戶的歌曲播放歷史資料。除了用戶註冊時所收集到的用戶個人數據外,歌曲播放歷史及其在平台上的行為也是重要的一環。數據包括:

  • 曾播放的歌曲
  • 播放長度
  • 曾加入播放清單的歌曲
  • 喜歡的歌曲
  • 等等

收集各種數據後,便可以把所有數據放進系統,進行演算法分析。Spotify所使用的演算法為Matrix Factorization(矩陣分解)。首先了解一下如何建立Matrix。每一個用戶在系統內都有一項紀錄,這項紀錄非常詳細,因為它包括此用戶在平台中所有的行為及相關屬性。例如,我們很容易在系統中找到有曾聽過爵士樂曲及其歌曲長度為三分鐘以上的用戶;或者,同時喜歡歌手Jason Mraz及Lady Gaga之音樂愛好者等等。當每位用家在系統內存有這項紀錄,我們便可以把所有紀錄合成為一個龐大的Matrix。

合成Matrix後,內容不再是用戶自己的數據,而是用戶與用戶之間的相似度。例如,我們希望找尋用戶A跟用戶B的相似度。假設系統中只有十個歌手的歌曲,用戶A曾收聽其中八位歌手之歌曲,而用戶B則只有收聽四位歌手之歌曲,在這四位歌手之中,有兩位是用戶A沒有收聽過的。在這個簡單資料中,便可以尋找他們的相似度。在這個例子中,兩位用戶看來相似度很低。假若用戶C的紀錄顯示曾收聽其中八位歌手之歌曲,而當中只有一位歌手(例如是Justin Bieber)是用戶A沒有收聽過的,相似度應該很高,對吧?系統很可能會對用戶A作出歌曲建議,而所建議的歌曲屬於Justin Bieber的。原因很簡單,因為他們看來在平台上的使用習慣很相似,所以系統便會基於他們的微小分別向另一位用戶作出建議。

Spotify所建立的Matrix非常龐大,每位用戶在系統內的屬性超過一億個。所以他們所收集的數據量不可勝數,而且系統所需的運算能力亦非常高。Netflix其實也是利用類似的方法作出影片建議,由今天開始,細心留意系統所建議的是否真的你可能喜歡的歌曲吧!

Facebook: https://www.facebook.com/drjackeiwong/
Instagram: https://www.instagram.com/drjackeiwong/
YouTube: https://www.youtube.com/drjackeiwong/