推荐系统中的召回算法--协同过滤
工業(yè)界通用推薦系統(tǒng)架構(gòu):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
Match&Rank
定義:Match基于當(dāng)前user(profile、history)和context,快速在全庫中找到TopN最相關(guān)的Item,給Rank來做小范圍綜合多目標(biāo)最大化
通常做法:通常情況下,用各種算法做召回,如:item/user/model-based CF/DNN等等,做粗排之后交由后面的Rank層做更精細(xì)的排序,最終展現(xiàn)TopK item.
Match 算法典型應(yīng)用
猜你喜歡:多樣推薦? 相似推薦:看了還看? 搭配推薦:買了還買
?
協(xié)同過濾算法介紹(Collaborative Filtering簡稱CF):
1、定義:
簡單地來說,CF就是收集(collaborative)用戶偏好信息預(yù)測(filtering)用戶的興趣
數(shù)學(xué)形式化:矩陣補全問題
分類:
? ? ? ?CF主要包括:
? ? ? ? ? ? ?基于鄰域(內(nèi)存、共現(xiàn)關(guān)系)的協(xié)同過濾---->又包括user-based CF和Item-based CF
? ? ? ? ? ? ?基于模型的協(xié)同過濾(model-based CF)
2、基于共現(xiàn)關(guān)系的協(xié)同過濾算法
1、User-based CF :基于用戶的協(xié)同過濾算法,多用于挖掘那些有共同興趣的小團(tuán)體,通常新穎性比較好,準(zhǔn)確性稍差
2、Item-based CF:基于物品的協(xié)同過濾算法,多用于挖掘物品之間的關(guān)系,然后根據(jù)用戶的歷史行為來為用戶生成推薦列表
相比于user-based方法,item-based的應(yīng)用更加廣泛
3、相似度
計算相似度主要是通過余弦距離計算
similarity(A,B) = cos(A,B) = A*B/||A||*||B||
? ?1)有時候為了簡化,會直接去掉分母,會出現(xiàn)哈利波特效應(yīng)
? ? ? ?(哈利波特效應(yīng)是指 某個物品太熱,而導(dǎo)致好多物品都會跟熱門物品關(guān)聯(lián))
? ?2)在大數(shù)據(jù)量的環(huán)境下,直接計算兩個用戶之間的相似度,會出現(xiàn)很多用戶之間沒有對相同的物品進(jìn)行過行為,大部分交集為? ? ? ? ?0,為了解決此問題,需要建立每個物品對應(yīng)用戶的倒排表,如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ??
? ? ? ? ? ?可以根據(jù)倒排表,只對有效的pair進(jìn)行計算,從而簡化計算
? ? ? 還有一個子主題的知識,看一下下圖便知怎么回事,如下圖所示:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
4、基于ItemCF的推薦算法調(diào)用示意圖:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? 盡量不做補足抄底,用算法補全(補足抄底是指match階段數(shù)據(jù)不夠,可能會使用熱門進(jìn)行補足)
? match后面一般有rank和rerank的策略
5、改進(jìn)Item2Item
? ?針對之前計算Item2Item存在問題:熱門用戶、哈利波特效應(yīng)、用戶行為缺乏考慮
? ?解決辦法:熱門用戶降權(quán),熱門Item降權(quán)
? ?降低熱門用戶影響:? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?緩解哈利波特效應(yīng):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?綜合考慮:1、用戶行為差? 2、熱門用戶降權(quán)
? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
6、實時Item2Item
? 針對之前的情況會出現(xiàn)新品推薦問題
? 解決辦法:實時增量Item2Item
? ? ? ? ? ? ? ? ? ? ? ?? ?
? 分子:根據(jù)user,item的時間順序流,需要更新item的pair,到存儲中去
? 實時更新統(tǒng)計量
??具體詳見下述參考文獻(xiàn)1
7、混合Item2Item算法框架
? ?針對之前的情況會出現(xiàn)每個場景都用同樣的Item2Item
? ?解決辦法:有監(jiān)督混合多種Item2Item算法
? 1)Learning to Rank
? ?在信息檢索中,給定一個query,搜索引擎會召回一系列相關(guān)的Documents(通過關(guān)鍵詞匹配等方法),然后需要對這些召回的Documents進(jìn)行排序,最后將Top N的Documents輸出。而排序問題就是使用一個模型f(q,d)來對該query下的documents進(jìn)行排序,這個模型是用機器學(xué)習(xí)算法訓(xùn)練的模型也可以是人工設(shè)定的規(guī)則;最關(guān)注的是各個Documents之間的相對順序關(guān)系,而不是各個Docuemnts預(yù)測分?jǐn)?shù)最準(zhǔn)確
? 具體詳見下述參考文獻(xiàn)2
2)Hybrid Item2Item算法框架利用Learning to Rank的思想重構(gòu)Item2Item
以短視頻推薦為例:
Feature:
? ? Item Feature : video ctr、video pv、video_comment、
? ? Trigger Feature : trigger ctr、topic ctr
Model:
? ?自己學(xué)習(xí)各自特征的重要性
? ?Loss:Pairwise Loss,同時優(yōu)化CTR、LikeR、FavorR
? ?Lambdamart/Neural Nets
? ? ? ? ? ? ? ? ? ? ??
3、基于模型協(xié)同過濾
1、SVD算法:
? ?目標(biāo)函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? SVD存在的幾個問題:1、缺失數(shù)據(jù)和觀測到的數(shù)據(jù)權(quán)重相同(>99% 稀疏性)? ?2、沒有正則項,容易過擬合
? ? SVD具體知識可參考下述參考4
2、矩陣分解(Matrix Factorization)算法
?主要改進(jìn)
? ? ?用latent vector來表示user和item(ID embedding)
? ? ?組合關(guān)系用內(nèi)積inner product(衡量user對于某一類商品的偏好)
簡化SVD:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
舉例:u_1,u_2,i_1,i_2,構(gòu)造4條樣本,構(gòu)造v_u,v_i矩陣
損失函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
w_ui是樣本的權(quán)重,比如可觀測和不可觀測的,權(quán)重不同
具體詳見下述參考文獻(xiàn)5
3、Factored Item Similarity Model(因子項相似度模型)
1)MF用UserID來表示用戶,可以叫做user-based CF.(找到相似的user用于推薦)
2)用用戶評價過的item表示用戶,可以叫做item-based CF(找到相似的item用于推薦)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
具體可參考下述參考6
4、SVD++:Fusing User-based and Item-based CF
1) MF(user-based CF)表示UserID表示用戶? ? ?->? 直接映射ID到隱空間
2) FISM(item-based CF)用用戶評價的item來表示用戶 -> 映射items到隱空間
3) SVD++混合兩種想法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
具體文獻(xiàn)詳見下述參考文獻(xiàn)7
5、Generic Feature-based Recommendation
? ? ? 上述說到CF的一些算法,但是CF只是用交互矩陣來構(gòu)建模型,沒有利用user/item屬性和上下文
如下圖所示:
6、FM:Factorization Machines
? ? ?FM受到前面所有的分解模型的啟發(fā),每個特征都表示成embedding vector,并且構(gòu)造二階關(guān)系
? ? ?FM允許更多的特征工程,并且可以表示之前所有模型為特殊的FM
? ? ? ? ? ? ? ? ? ?
? ?只有uid,item_id,那么就相當(dāng)于是MF;UserID和Item評價,相當(dāng)于是SVD++
? ?具體文獻(xiàn)詳見下述參考文獻(xiàn)8
7、之前和現(xiàn)在優(yōu)化loss方面的區(qū)別
? ?之前的很多工作都在優(yōu)化L2 loss:
? ? ? ? ? ? ? ? ? ??
? ?很多內(nèi)容表明:一個低MSE模型不一定代表排序模型效果好
? ?可能的原因:均方誤差和排序指標(biāo)之間的分歧(排序指標(biāo)AUC等);觀察有偏用戶總是去對喜歡的電影打分
?
? 現(xiàn)在大部分工作都是朝向優(yōu)化pairwise ranking loss
? Known as the Bayesian Personalized Ranking loss? 個性化排名 優(yōu)化相對順序,而不是優(yōu)化絕對值
?
? ? ? ? ? ? ? ??
8、淘寶搜索推薦核心系統(tǒng)架構(gòu)(2018)
? ? ? ? ? ? ??
具體文章可參考下述參考9
4、深度協(xié)同過濾模型(Deep Collaborative Filtering Model)
? Methods of representation learning
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?
? Methods of matching function learning
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
embedding 學(xué)習(xí)常用算法:
1、矩陣分解(Matrix Factorization)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2、topic model
?1) embedding from topic model:
? 看看下面這兩張圖片你會明白很多東西,?
? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ??? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ??
2) LDA in music recommendation:(LDA是一個無監(jiān)督算法,和聚類有點類似的味道)
? ? ?建模:歌曲(doc) - 歌詞(word) 只看歌詞可能是片面的,有時候需要加上其它的特征;用戶(doc) - 歌曲(word)
? ? ?應(yīng)用:
? ? ? ? ? ? ? 相似歌曲:根據(jù)doc的topic分布計算相似度
? ? ? ? ? ? ? 生成歌單:每個topic下概率最大的doc
? ? ?頻率比較低的詞學(xué)習(xí)的效果不好
3、word2vec
? ?1)由來:
? ? ? ?傳統(tǒng)的N-gram統(tǒng)計語言模型:最大化轉(zhuǎn)移概率:w = argmax P(w|History);將詞看作原子單位,相互獨立;不考慮詞之間的相似性;效果受限于語料規(guī)模;大多數(shù)情況下語料不足,需要平滑
? ? ? 神經(jīng)網(wǎng)絡(luò)語言模型:最大化最大似然估計:w = argmax P(w|content);詞的分布式表示:詞向量;超越n-gram模型-通過上下文,即周圍的環(huán)境來表示詞
? ? ? 其它方法:
? ? ? ? ? ? ? ? ? ?LSA:Latent Sematic Analysis 沒有線性規(guī)則;LDA:Latent Dirichlet Allocation 大數(shù)據(jù)訓(xùn)練太慢
?2)實現(xiàn)方法:
? ? ? ? ? ? ? ? ? ? ?? ? ?
? ? ?Skip-Ngram是根據(jù)word來預(yù)測上下文的概率P(context|word)
? ? ?CBOW(continuous Bag of Words):根據(jù)context來預(yù)測word概率P(word|context)
3) 訓(xùn)練
? ? ?Hierarchical Softmax:使用一顆二分Huffman樹表示,葉子節(jié)點是單詞,詞頻越高離根節(jié)點越低,優(yōu)化計算效率O(logV)
? ? ?Negative Sampling:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
4)優(yōu)勢
? 不丟失信息的情況下降低維度;矩陣及向量運算便于并行;向量空間具有物理意義;可以在多個不同的維度上具有相似性
? 線性規(guī)則:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????
4、DNN(Youtobe應(yīng)用)
?1) embedding from DNN:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2)DNN at Google
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
訓(xùn)練training:通過分類任務(wù)學(xué)習(xí)出用戶向量和視頻向量,每個視頻作為一個類別,觀看完成是視頻作為一個正例;把最后一層隱層輸出作為用戶向量(U+C);video embedding:pre trained to feed or training together
服務(wù)serving:輸入用戶向量,查詢出與之向量相似度TopK高的視頻
3)DNN at Google 前人的一些經(jīng)驗
? 隨機負(fù)采樣效果好于hierarchical soft-max
? 使用全量的數(shù)據(jù)而不是只使用推薦數(shù)據(jù)
? 每個用戶生成固定數(shù)量的樣本
? 丟棄搜索詞的序列性
? 輸入數(shù)據(jù)只使用歷史信息
上面主要說一下怎么獲取embedding幾種方法,其實即使你模型構(gòu)建好啦,來了一個人,你通過模型給他返回一個可推薦物品列表,返回topK個item,想過這個模型之后選取topK等等過程工業(yè)界是怎么實現(xiàn)的嘛
這個部分叫做服務(wù)serving,想想去飯店吃飯服務(wù)員怎么服務(wù)的,其實是一個道理,來一個用戶你給他服務(wù)給他他最想看的幾個物品
下面看一下這個部分的通用框架:
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
下面框圖是一個參數(shù)服務(wù)器,說白啦就是一個集群,你把數(shù)據(jù)給它它分給好幾個機器處理,最后匯總一下返回,優(yōu)點就是大數(shù)據(jù)量的情況下可以加快速度
DB部分:考慮到這種實時的要求,會采用NoSQL存儲系統(tǒng):存儲鍵值對文檔,修改靈活;無join操作,操作簡單,速度快
kv存儲是NoSQL存儲的一種,hbase:分布式、持久化、常用于大數(shù)據(jù)存儲,redis:基于內(nèi)存、速度快、常用于緩存
現(xiàn)在我接觸到的存儲:定時更新的庫會是hbase、hive,如果涉及到實時的話更多的使用redis和ES
?哈哈哈,我要去跑步啦,周末愉快~~~
? ?
?
參考:
1、http://net.pku.edu.cn/~cuibin/Papers/2015SIGMOD-tencentRec.pdf
2、https://www.cda.cn/uploadfile/image/20151220/20151220115436_46293.pdf
3、https://blog.csdn.net/huagong_adu/article/details/40710305
4、https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
5、https://datajobs.com/data-science-repo/Recommender-Systems-%5BNetflix%5D.pdf
6、https://www.researchgate.net/publication/262219034_FISM_factored_item_similarity_models_for_top-N_recommender_systems
7、https://www.cs.rochester.edu/twiki/pub/Main/HarpSeminar/Factorization_Meets_the_Neighborhood-_a_Multifaceted_Collaborative_Filtering_Model.pdf
8、https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
9、https://www.sohu.com/a/212035397_612370
總結(jié)
以上是生活随笔為你收集整理的推荐系统中的召回算法--协同过滤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bandit算法
- 下一篇: 关于AUC计算公式推导