本文轉自微信公眾號:愛範兒(id:ifanr)。未經授權,不得轉載。
下班了,又一次走進熟悉的地鐵站,聽著已經聽過無數遍哐當哐當的地鐵軌道聲,你突然覺得每天的日子有點乏味和單調,就像太陽每天從東邊升起,又從西邊落下。
戴上耳機,打開你最喜歡的歌單,就像往常那樣。你點下隨機播放的按鈕,希望把掌控權交給播放器和算法,讓它們帶給你一點未知的新鮮。
你有沒有想過,隨機播放算法究竟是如何給我們呈現一個隨機歌單的?
歷史上最經典的隨機音樂播放器,應該還要數 iPod Shuffle。
2005 年的時候,蘋果公司推出了經典的 iPod Shuffle,iPod Shuffle 在當時來說可以算是一個異類,那時候的音樂播放器(還在直接叫 MP3 的時代)基本上都已經有了一塊用來顯示音樂信息的屏幕,用戶可以自由的選擇自己喜歡的音樂,甚至有些 MP3 還能播放視頻,比如 2006 年魅族推出的 miniplayer M6 已經搭載了 2.4 英寸顯示屏。
而 iPod Shuffle 沒有屏幕,整體比起蘋果自家的 iPad Nano 來說也來的簡陋。但最大的問題是,用戶如何選擇自己喜歡的歌曲?
答案是隨機列表,你可以通過 iTunes 同步你喜歡的音樂,也可以直接同步一個你喜歡的播放列表,但是在 iPod Shuffle 上,你所能獲取的最大感受是「隨機播放的魅力」。
實際上,我們所說的「隨機播放」常見的方式有兩種,一種叫「Shuffle」,一種叫「Random」。
洗牌算法. 圖片來自:9to5Mac
Shuffle 一般叫做「洗牌算法」,它的原理是像撲克洗牌一樣,將不同數量的撲克牌進行隨機排列就能得到一個亂序的順序。隨機播放歌單也是如此,每次播放的時候會將這個列表中的歌曲進行洗牌,從而獲得一個亂序的播放,也就是「偽隨機」算法。
而 Random 則是真正的隨機播放,也就是說每次切換音樂都是獨立的未知數,會隨機到不同的音樂,就像「抓鬮」一樣,它沒有列表的概念,所以沒有上一首和下一首的概念,是「真隨機」算法。
怎麼判斷是「真隨機」還是「偽隨機」,其實只要按下「上一首」就知道了,如果切換到是你剛才聽過的那一首,那就是「偽隨機」的洗牌算法,如果是每次都在切換不同的歌,那麼就是「真隨機」算法。
洗牌算法本質來自洗撲克牌. 圖片來自:Phys.org
這兩種哪種方法更好一些?對於目前的用戶來說,洗牌算法要更能接受一些,理論上它更加具備可控性,又能滿足用戶亂序播放的要求,還能防止重複聽到一首歌的可能性。
目前在各大音樂 App 中用得比較多的是「洗牌算法」,比如用戶數量很大的網易雲音樂和 QQ 音樂等播放器都在使用。
但即便「洗牌算法」本身有足夠多的優點,但原始的「洗牌算法」已經無法滿足日益增長的聽歌需求,或者說也有播放器越改越糟糕的情況。比如知乎提問中,很多人都感覺網易雲音樂的隨機算法有著很大問題,比如只放一小部分固定的歌曲,而有些歌曲似乎永遠隨機不到。甚至有的用戶還表示自己刪除的一首歌曲還能被隨機到。
其實 App 對於這個「隨機列表」是有幹預的,而並非簡單的進行洗牌,而但從結果上說,到底用戶感知是好還是差,就看各家對於「洗牌算法」的理解和設計了。儘管吐槽網易雲算法的用戶不少,但也並不影響推薦歌單和評論等受到歡迎的功能。
根據知乎簡介為 QQ 音樂產品經理的用戶劉彥彬的回答,在洗牌算法之中也會摻雜更多的大數據算法幹預:
根據產品團隊調研,用戶想要的其實不是真正的「隨機播放」,而是用戶更多是不知道聽哪首,更多是選擇困難,希望能幫我做決定。而且,儘量的符合我當前的心境。
隨機算法可以解決選擇困難,但是並不能真正解決用戶需要的心境,因為「洗牌算法」並不會知道用戶究竟想要什麼。但是音樂應用其實是可以做到這一點的,在足夠大的個人聽歌數據樣本和大數據調研情況下,算法可以做出一些判斷,用戶此刻更想要聽哪些歌。
QQ 音樂. 圖片來自:YouTube
舉個簡單的例子,比如說在夜深人靜的深夜點開隨機播放,那麼用戶很大可能性是不想聽比如金屬、搖滾等過於吵雜的音樂,結合用戶以往的聽歌歷史,這個時候隨機算法就會根據用戶當前的環境時間,更多的隨機到輕音樂。
不然你以為那些聽歌報告為什麼那麼詳細,你夜裡不睡覺循環了多少遍哪首歌,它都一清二楚。
QQ 音樂產品經理劉彥彬還總結了好的隨機算法應該具備的幾條特徵:
-記錄我本地或最近一段時間的聽歌記錄,儘量在隨機時不會推薦出來,保證隨機的新鮮感
-洗牌算法做好,儘可能的隔開某個歌手,某張專輯,讓用戶從感官上感覺是一個隨機列表
-可以在本地做用戶操作記錄,比如跳過歌曲的次數,對用戶不感興趣的歌曲進行降權或者過濾,精選隨機的池子
在對歌曲標籤豐富後,可以做的事情就更多了,比如根據當前的場景,推薦本地適合收聽的歌曲優先隨機播放,這些都有助於讓用戶感知智能。
Spotify 的隨機播放. 圖片來自:REGENDUS
對隨機播放算法調研的當然不只是 QQ 音樂,一直以推薦算法聞名的流媒體音樂服務 Spotify 也有對「洗牌算法」更深度的思考,甚至他們還在官網裡面寫出了如何改進隨機播放算法。
即便是對於 Spotify 這樣的流媒體音樂,依然有許多用戶會覺得隨機播放不「隨機」,Spotify 的洗牌算法當然是隨機的,但他們開始思考為什麼用戶會這樣覺得。
從基礎上說,Spotify 從提供服務開始就用的是 Fisher-Yates 洗牌算法,他們覺得這個洗牌算法做的最出色。
如果用不同顏色代表不同歌手,這意味完全真隨機時,上下兩種列表都可能出現
不過,Spotify 一開始並不理解用戶說的「不隨機」是什麼意思,但在研究之後發現,用戶的核心理念是不希望一位歌手在短時間內重複出現,但這裡其實用戶陷入了了一個經典的「賭徒謬論」,當人們連續幾次沒有中彩票時,就會認為自己下次中獎的機率會增大,而其實每次概率都是獨立而相同的。
但如果用戶連續聽到某一位歌手的作品時,他們就會粗暴的覺得這個算法「有問題」。
結論表示,用戶並不喜歡「完美的隨機」。
那什麼是「不完美的隨機」?
在馬丁·菲德勒(Martin Fiedler)的博客文章 「混洗音樂的藝術」中,他展示了為什麼完全的隨機列表是糟糕的。
假設在你的播放器中存在三種不同曲風的流派分別是 A、B、C,其中 A 有 10 首,B 和 C 都是 11 首,一共 32 首歌。如果使用真正的隨機算法來洗牌會出現怎樣的情況?可能是:
AACBBCBACABBCCACCCCABBACBACABABB
其中出現了連續的 C 曲風流派,以及在四分之一的時間裡是沒有 B 曲風流派的,對於用戶來說,重複單一的曲風無疑是糟糕的。而絕對的隨機算法,很可能在大部分情況下都會生成這種糟糕的播放列表,因為絕對的隨機也意味著「不平衡」。
圖片來自:Marie Claire
更好的隨機列表是為了滿足用戶無法下決定但又想要獲得新鮮感的心理,這時就應該儘可能的避免重複和單調,所以下面這種播放列表才是更合適的:
ABCBCABACBACBCABCACBABCACBACBCAB
很四平八穩的一個播放列表,沒有任何「異常」存在,馬丁·菲德勒稱之為「平衡洗牌」。為了實現將歌單洗牌更加平衡,馬丁·菲德勒發明了一套較為複雜的洗牌算法,如果你對具體實現感興趣,也可以直接移步到這篇博客。
Spotify 借鑑了這個算法,但將之修改為更適合自己的方式,並且同時借鑑了抖動算法(例如 Floyd–Steinberg抖動),最終將歌曲更加均勻平衡的分散到播放列表之中。
就是這樣,今天,各家的隨機播放算法雖然大都基於「洗牌算法」的模式,但也都有著自己的「調味秘方」,有的用戶會喜歡,也有做的糟糕的,不停被用戶吐槽的。
但本質上,隨機播放算法的重點不在於「隨機」,而是一場產品和用戶之間的心理博弈對決,甚至它們會隨著你的聽歌習慣的逐漸養成,自身也在改變著隨機歌單的加權傾向。
越聽,它們就會越了解你。