網(wǎng)易云音樂(lè)的個(gè)性化推薦漫談
用過(guò)蝦米、酷狗、QQ音樂(lè)、網(wǎng)易云音樂(lè),個(gè)人感受網(wǎng)易云音樂(lè)在音樂(lè)推薦這塊做的真心不錯(cuò),特別是以“人”為角度的推薦,沒(méi)有像蝦米、酷狗推的那么亂。蝦米還可以,但更多的是以歌搜歌的形式。剛注冊(cè)了一個(gè)新的賬號(hào),避免有歷史數(shù)據(jù)的干擾,聽(tīng)了一首周杰倫的《一路向北》和陳奕迅的《淘汰》,然后去個(gè)性化推薦里看到了蔡健雅的《紅色高跟鞋》和曲婉婷的《承認(rèn)》,給我的感覺(jué)還是比較驚喜,像蔡健雅一般聽(tīng)的人比較少,還能推薦到體驗(yàn)不錯(cuò)。當(dāng)然也有很多不一定特別準(zhǔn),當(dāng)然聽(tīng)歌這東西就不需要完全準(zhǔn)確。
本文引用地址:http://2s4d.com/article/201605/290944.htm網(wǎng)易云音樂(lè)關(guān)于個(gè)性化推薦這塊在公司外部介紹的比較少,但應(yīng)該推薦的算法和機(jī)制和大部分的音樂(lè)素材的公司做的類似。以item為核心的協(xié)同過(guò)濾(CF),通過(guò)打分機(jī)制來(lái)推薦最適合的歌曲。
、
印象中早期網(wǎng)易云音樂(lè)還可以將自己聽(tīng)的歌曲分享到微信朋友圈等,通過(guò)跳轉(zhuǎn)關(guān)聯(lián)到的賬戶ID識(shí)別出朋友關(guān)系。這個(gè)想法的確很贊,包括我第一次聽(tīng)《一路向北》的時(shí)候也是一個(gè)朋友推薦給我的,這首歌不僅是個(gè)人喜歡的風(fēng)格,再加上有朋友推薦所以留下很好的印象。但是很可惜,現(xiàn)在朋友圈不能分享了。微博還可以分享,只是現(xiàn)在微博的數(shù)據(jù)很多水分。
現(xiàn)在主流的方式都是人工+智能推薦,人工的方式就不過(guò)多介紹,費(fèi)時(shí)費(fèi)力。出不了幾張有限的專輯?,F(xiàn)在主流都是通過(guò)機(jī)器學(xué)習(xí)的方式,通過(guò)同類人類的偏好給相似的人群推薦他們都喜歡的歌曲。也有根據(jù)以歌的item推薦相似的歌曲,但體驗(yàn)就是聽(tīng)來(lái)聽(tīng)去就是那個(gè)風(fēng)格,很快就乏味了。
算法部分:
1.相似人群的推薦
引用:著作權(quán)歸作者所有。
作者:邰原朗
鏈接:網(wǎng)易云音樂(lè)的歌單推薦算法是怎樣的? – 邰原朗的回答
來(lái)源:知乎
有3首歌放在那里,《最炫民族風(fēng)》,《晴天》,《Hero》。
A君,收藏了《最炫民族風(fēng)》,而遇到《晴天》,《Hero》則總是跳過(guò);
B君,經(jīng)常單曲循環(huán)《最炫民族風(fēng)》,《晴天》會(huì)播放完,《Hero》則拉黑了
C君,拉黑了《最炫民族風(fēng)》,而《晴天》《Hero》都收藏了。
我們都看出來(lái)了,A,B二位品味接近,C和他們很不一樣。
那么問(wèn)題來(lái)了,說(shuō)A,B相似,到底有多相似,如何量化?
我們把三首歌想象成三維空間的三個(gè)維度,《最炫民族風(fēng)》是x軸,《晴天》是y軸,《Hero》是z軸,對(duì)每首歌的喜歡程度即該維度上的坐標(biāo),
并且對(duì)喜歡程度做量化(比如: 單曲循環(huán)=5, 分享=4, 收藏=3, 主動(dòng)播放=2 , 聽(tīng)完=1, 跳過(guò)=-1 , 拉黑=-5 )。
那么每個(gè)人的總體口味就是一個(gè)向量,A君是 (3,-1,-1),B君是(5,1,-5),C君是(-5,3,3)。 (抱歉我不會(huì)畫立體圖)
我們可以用向量夾角的余弦值來(lái)表示兩個(gè)向量的相似程度, 0度角(表示兩人完全一致)的余弦是1, 180%角(表示兩人截然相反)的余弦是-1。
根據(jù)余弦公式, 夾角余弦 = 向量點(diǎn)積/ (向量長(zhǎng)度的叉積) = ( x1x2 + y1y2 + z1z2) / ( 跟號(hào)(x1平方+y1平方+z1平方 ) x 跟號(hào)(x2平方+y2平方+z2平方 ) )
可見(jiàn) A君B君夾角的余弦是0.81 , A君C君夾角的余弦是 -0.97 ,公式誠(chéng)不欺我也。
以上是三維(三首歌)的情況,如法炮制N維N首歌的情況都是一樣的。
假設(shè)我們選取一百首種子歌曲,算出了各君之間的相似值,那么當(dāng)我們發(fā)現(xiàn)A君還喜歡聽(tīng)的《小蘋果》B君居然沒(méi)聽(tīng)過(guò),相信大家都知道該怎么和B君推薦了吧。
第一類以人為本推薦算法的好處我想已經(jīng)很清楚了,那就是精準(zhǔn)!
代價(jià)是運(yùn)算量很大,而且對(duì)于新來(lái)的人(聽(tīng)得少,動(dòng)作少),也不太好使,
所以人們又發(fā)明了第二類算法。
假設(shè)我們對(duì)新來(lái)的D君,只知道她喜歡最炫民族風(fēng),那么問(wèn)題來(lái)了,給她推薦啥好咯?
如圖,推薦《晴天》!
以及nick lee分享的一種矩陣計(jì)算得分的方式:
作者:nick lee
鏈接:網(wǎng)易云音樂(lè)的歌單推薦算法是怎樣的? – nick lee 的回答
來(lái)源:知乎
這里我想給大家介紹另外一種推薦系統(tǒng),這種算法叫做潛在因子(Latent Factor)算法。這種算法是在NetFlix(沒(méi)錯(cuò),就是用大數(shù)據(jù)捧火《紙牌屋》的那家公司)的推薦算法競(jìng)賽中獲獎(jiǎng)的算法,最早被應(yīng)用于電影推薦中。這種算法在實(shí)際應(yīng)用中比現(xiàn)在排名第一的 @邰原朗 所介紹的算法誤差(RMSE)會(huì)小不少,效率更高。我下面僅利用基礎(chǔ)的矩陣知識(shí)來(lái)介紹下這種算法。
這種算法的思想是這樣:每個(gè)用戶(user)都有自己的偏好,比如A喜歡帶有小清新的、吉他伴奏的、王菲等元素(latent factor),如果一首歌(item)帶有這些元素,那么就將這首歌推薦給該用戶,也就是用元素去連接用戶和音樂(lè)。每個(gè)人對(duì)不同的元素偏好不同,而每首歌包含的元素也不一樣。我們希望能找到這樣兩個(gè)矩陣:
一,用戶-潛在因子矩陣Q,表示不同的用戶對(duì)于不用元素的偏好程度,1代表很喜歡,0代表不喜歡。比如下面這樣:
二,潛在因子-音樂(lè)矩陣P,表示每種音樂(lè)含有各種元素的成分,比如下表中,音樂(lè)A是一個(gè)偏小清新的音樂(lè),含有小清新這個(gè)Latent Factor的成分是0.9,重口味的成分是0.1,優(yōu)雅的成分是0.2……
利用這兩個(gè)矩陣,我們能得出張三對(duì)音樂(lè)A的喜歡程度是:張三對(duì)小清新的偏好*音樂(lè)A含有小清新的成分+對(duì)重口味的偏好*音樂(lè)A含有重口味的成分+對(duì)優(yōu)雅的偏好*音樂(lè)A含有優(yōu)雅的成分+……
即:0.6*0.9+0.8*0.1+0.1*0.2+0.1*0.4+0.7*0=0.69
每個(gè)用戶對(duì)每首歌都這樣計(jì)算可以得到不同用戶對(duì)不同歌曲的評(píng)分矩陣
。(注,這里的破浪線表示的是估計(jì)的評(píng)分,接下來(lái)我們還會(huì)用到不帶波浪線的R表示實(shí)際的評(píng)分):
因此我們隊(duì)張三推薦四首歌中得分最高的B,對(duì)李四推薦得分最高的C,王五推薦B。
如果用矩陣表示即為:
下面問(wèn)題來(lái)了,這個(gè)潛在因子(latent factor)是怎么得到的呢?
由于面對(duì)海量的讓用戶自己給音樂(lè)分類并告訴我們自己的偏好系數(shù)顯然是不現(xiàn)實(shí)的,事實(shí)上我們能獲得的數(shù)據(jù)只有用戶行為數(shù)據(jù)。我們沿用 @邰原朗的量化標(biāo)準(zhǔn):?jiǎn)吻h(huán)=5, 分享=4, 收藏=3, 主動(dòng)播放=2 , 聽(tīng)完=1, 跳過(guò)=-2 , 拉黑=-5,在分析時(shí)能獲得的實(shí)際評(píng)分矩陣R,也就是輸入矩陣大概是這個(gè)樣子:
事實(shí)上這是個(gè)非常非常稀疏的矩陣,因?yàn)榇蟛糠钟脩糁宦?tīng)過(guò)全部音樂(lè)中很少一部分。如何利用這個(gè)矩陣去找潛在因子呢?這里主要應(yīng)用到的是矩陣的UV分解。也就是將上面的評(píng)分矩陣分解為兩個(gè)低維度的矩陣,用Q和P兩個(gè)矩陣的乘積去估計(jì)實(shí)際的評(píng)分矩陣,而且我們希望估計(jì)的評(píng)分矩陣
事實(shí)上這是個(gè)非常非常稀疏的矩陣,因?yàn)榇蟛糠钟脩糁宦?tīng)過(guò)全部音樂(lè)中很少一部分。如何利用這個(gè)矩陣去找潛在因子呢?這里主要應(yīng)用到的是矩陣的UV分解。也就是將上面的評(píng)分矩陣分解為兩個(gè)低維度的矩陣,用Q和P兩個(gè)矩陣的乘積去估計(jì)實(shí)際的評(píng)分矩陣,而且我們希望估計(jì)的評(píng)分矩陣
和實(shí)際的評(píng)分矩陣不要相差太多,也就是求解下面的目標(biāo)函數(shù):
這里涉及到最優(yōu)化理論,在實(shí)際應(yīng)用中,往往還要在后面加上2范數(shù)的罰項(xiàng),然后利用梯度下降法就可以求得這P,Q兩個(gè)矩陣的估計(jì)值。這里我們就不展開說(shuō)了。例如我們上面給出的那個(gè)例子可以分解成為這樣兩個(gè)矩陣:
這兩個(gè)矩陣相乘就可以得到估計(jì)的得分矩陣:
這兩個(gè)矩陣相乘就可以得到估計(jì)的得分矩陣:
將用戶已經(jīng)聽(tīng)過(guò)的音樂(lè)剔除后,選擇分?jǐn)?shù)最高音樂(lè)的推薦給用戶即可(紅體字)。
將用戶已經(jīng)聽(tīng)過(guò)的音樂(lè)剔除后,選擇分?jǐn)?shù)最高音樂(lè)的推薦給用戶即可(紅體字)。
在這個(gè)例子里面用戶7和用戶8有強(qiáng)的相似性:
從推薦的結(jié)果來(lái)看,正好推薦的是對(duì)方評(píng)分較高的音樂(lè):
從推薦的結(jié)果來(lái)看,正好推薦的是對(duì)方評(píng)分較高的音樂(lè):
本質(zhì)上應(yīng)該都類似,都是從Amazon那條路子下來(lái)的。但是這種方式也會(huì)遇到問(wèn)題:
A)冷啟動(dòng)的問(wèn)題,在沒(méi)有用戶數(shù)據(jù)的情況下要推哪些歌曲,目前網(wǎng)易云音樂(lè)搞了個(gè)比較Q的調(diào)查問(wèn)卷,還是挺有趣的。
B)同質(zhì)化嚴(yán)重問(wèn)題,怎么加入新的元素,比如熱門+新歌來(lái)補(bǔ)充這塊;
C)人群變化問(wèn)題,光靠推薦很明顯不代表每個(gè)個(gè)體的情況,特別是一些小眾群體,數(shù)據(jù)比較稀疏。這些就需要用戶自己主動(dòng)搜索和添加、喜歡、下載的方式。
2.相似歌的推薦
蝦米、酷狗上都是這樣的歌曲漫游推薦的形式,個(gè)人不太提倡這樣的方式,簡(jiǎn)單認(rèn)為聽(tīng)過(guò)A歌的人也可能喜歡B,這個(gè)差異還是比較大的。而且還是要維護(hù)一堆歌曲的tag標(biāo)簽。
整體來(lái)說(shuō),網(wǎng)易云音樂(lè)在個(gè)性化推薦這塊算法還是花了不少真功夫,所以要給個(gè)贊??吹剿麄?cè)谒惴ㄕ衅?、并發(fā)計(jì)算這些實(shí)時(shí)場(chǎng)景的介紹比較少,還是希望能夠有機(jī)會(huì)在線下能夠有這塊的交流。
評(píng)論