雲音樂推薦系統(二):推薦系統的核心演算法
這裡寫目錄標題
一、召回階段
1.1基於熱門的召回
篩選使用者播放歌曲的行為資料,
選取播放次數最多的歌曲作為熱門歌曲,為每個使用者進行推薦
1.2基於使用者分群的召回
將使用者劃分為細粒度群體,為每一個使用者群體篩選歌
曲播放行為,選取每個群體中的熱門歌曲,為每一個
使用者進行推薦
可以使用KMeans等聚類演算法
1.3基於協同過濾的召回
二、協同過濾演算法(計算相似的一種方式)
2.1基於使用者(user-based)的協同過濾演算法
首先計算使用者與使用者之間的相似性,
然後再計算其他與目標相似的使用者對物品的評分來為目標使用者推薦
2.2基於物品的(item-based)的協同過濾演算法
與基於使用者的協同過濾演算法基本相似
2.3基於模型(model-based)的協同過濾演算法
SVD矩陣分解協同過濾演算法
LFM隱含語義協同過濾演算法
ALS交替最小二乘協同過濾演算法
三、協同過濾
依賴使用者行為資料
分析使用者行為資料,求出
使用者與使用者之間的相似度,進而通過相似度計算出使用者對所有物品的”感興趣程度”(user-based)
物品與物品之間的相似度,進而通過相似度計算出使用者對所有物品的”感興趣程度”(item-based)
中間矩陣,進而通過中間矩陣計算出使用者對所有物品的”感興趣程度”(model-based)
四、基於使用者的協同過濾
根據使用者行為資料,獲取使用者對物品的喜歡程度評分,同時使用者無法對所有物品都進行評分,最終可組織成一個使用者-物品稀疏矩陣
計算使用者之間的相似程度,通過使用者向量,按照餘弦相似度公式進行求解
上面是向量點積
上面是是向量的模積
將使用者一看出一個向量u1=[4.5,3,3.5,0,4,0];
將使用者二看成一個向量u2=[0,4.5,5,0,0,4,0];
使用者沒有對物品進行評分回預設為0,但是可以對預設的沒有評分的物品用平均數代替
餘弦相似度的scala程式碼實現:
object cosine_similarity {
//向量的模
def module(vec: Vector[Double]) = {
math.sqrt(vec.map(math.pow(_, 2)).sum)
}
//向量的點積
def innerProduct(v1: Vector[Double], v2: Vector[Double]) = {
val listBuffer = ListBuffer[Double]()
for (i <- 0 until v1.length; j <- 0 to v2.length; if i == j) {
if (i == j) listBuffer.append(v1(i) * v2(j))
}
listBuffer.sum
}
def cosvec(v1: Vector[Double], v2: Vector[Double]) = {
val cos = innerProduct(v1, v2) / (module(v1) * module(v2))
if (cos <= 1) cos else 1.0
}
def main(args: Array[String]): Unit = {
var vec1 = Vector(4.5, 3, 3.5, 0, 4, 0, 0)
var vec2 = Vector(0, 4.5, 5, 0, 0, 4, 0)
var similarity = cosvec(vec1,vec2)
println("vec1與vec2的餘弦相似度為:")
println(similarity)
}
}
使用餘弦相似度構造使用者-使用者相似度矩陣
求解使用者兩兩之間的相似度,可以得到如下相似度矩陣
為目標使用者推薦物品時,選取與目標使用者最相似的前K個使用者,選取目標使用者沒有進行過評分的物品n,將K個相似使用者對n個物品的評分進行加權,認為該評分為目標使用者對n個物品的預測評分
sim(u,v)表示目標使用者與使用者的相似性,
R(vi)表示使用者對商品的真實評分
使用者1對商品預測評分
=(sim(使用者1,使用者2)*使用者2對該商品的真實評分+sim(使用者1,使用者3)*使用者3對該商品的真實評分+sim(使用者1,使用者4)*使用者4對該商品的真實評分)/(sim(使用者1,使用者2)+sim(使用者1,使用者3)+sim(使用者1,使用者4))
最後對n個物品預測評分進行倒排,優先推薦
協同過濾實際是通過分析使用者行為資料,對原始user-item稀疏矩陣進行”填充”的過程
五、ALS(交替最小二乘法)
ALS演算法是2008年以來,用的比較多的協同過濾演算法,它已經整合到Spark的Mllib庫中,從協同過濾的分類來說,它屬於基於模型的協同過濾,它的核心思想同樣是對User-Item稀疏矩陣進行”填充”,從而獲得User對所有Item的感興趣程度
5.1 ALS原理
假設有一批使用者行為資料,其中包含m個User和n個Item,構建User-Item矩陣(稀疏矩陣),其中的元素表示第u個User對第i個Item的評分
藍色為已經評分
灰色為未評分
ALS會將User-Item矩陣分解為兩個矩陣:User-Embedding_K矩陣和Embedding_K-Item矩陣(Embedding_K是超引數,自己設定),兩個矩陣相乘能剛好得到User-Item矩陣
將User-Item稀疏矩陣中藍色的值作為訓練集,User-Embedding,Embedding-Item矩陣為稠密矩陣,並且矩陣中所有的值都在機器學習任務中當作引數,需要通過機器學習訓練得出,損失函式由User-Embedding,Embedding-Item矩陣的點積和訓練集的值求RMSE得出,優化方法使用ALS交替最小二乘法進行損失函式優化,最終求得User-Embedding,Embedding-Item矩陣,這樣就可以得到稠密的User-Item矩陣
六、協同過濾的“評分策略”
User-item矩陣的評分是主觀設定
專案中的設定為:
播放=>1分,下載=>2分,分享=>3分,收藏=>4分
最終在全域性做一次評分歸一化得出最終評分(將總得分處理到0~1之間)
通常評分策略由懂業務、模型開發、專案經理等人蔘與制定
調整評分策略是優化召回演算法的一個非常重要的途徑
相關文章
- 【推薦演算法】推薦系統的評估演算法
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- 網易雲音樂推薦系統簡單實現系列
- 網易雲音樂基於使用者的推薦系統
- 【推薦系統篇】--推薦系統之訓練模型模型
- 用深度學習打造自己的音樂推薦系統深度學習
- 【推薦系統篇】--推薦系統之測試資料
- python 推薦系統Python
- 推薦系統概述
- 抖音推薦系統冷啟動
- 《推薦系統實踐》筆記 01 推薦系統簡介筆記
- Mahout的taste推薦系統引擎(影片推薦案例)AST
- 【推薦系統】:LFM演算法解析演算法
- 推薦系統論文之序列推薦:KERL
- 實時增量學習在雲音樂直播推薦系統中的實踐
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- 推薦系統基礎知識(二)
- 推薦系統概念篇
- 《推薦系統》-DIN模型模型
- 《推薦系統》-PNN模型模型
- 推薦系統[八]演算法實踐總結V0:騰訊音樂全民K歌推薦系統架構及粗排設計演算法架構
- 實時增量學習在雲音樂直播推薦系統中的工程實踐
- 推薦系統應該如何保障推薦的多樣性?
- 電影推薦系統的圖片雲存
- 序列推薦系統的前世今生
- 推薦系統的評估方法
- PredictionIO:開源的推薦系統
- 推薦系統工程架構架構
- 《推薦系統》-Wide&DeepIDE
- 推薦系統 task 1 @datawhale
- 【推薦系統】GBDT+LR
- 如何構建推薦系統
- Spark推薦系統實踐Spark
- 基於內容的推薦系統演算法演算法
- 推薦演算法在商城系統實踐演算法
- Netflix 推薦系統 (Part One)-排序演算法排序演算法
- 【轉】推薦系統演算法總結(一)演算法
- 推薦系統實踐學習系列(三)推薦系統冷啟動問題