推薦系統-實戰總結
推薦系統實戰
這周看了推薦系統實戰這本書,其中基本上介紹的比較全面,但是每一部分并沒有十分深入,深入的精華全部都在下方的備注當中,備注中有很多的論文,可以進行進一步的學習。
首先回顧一下一些框架信息,在專門思考其中幾個重要的部分:
3種聯系用戶和item的推薦方式:
1 根據用戶的歷史行為,表達過反饋的item進行item的預測,傳統的itemCF
2 根據用戶的歷史行為,找到相似用戶,進行預測, userCF
3 根據用戶的喜好和個人信息,提取用戶的特征,喜歡的物品的特征,進行預測。基本上就是建立模型的思路
用戶自身的特征,1 比如年齡,性別,2 用戶歷史行為,時間和地理位置同樣重要 3根據歷史行為找到話題模型,喜歡的物品種類(可能涉及topic model)的部分,同時也需要提取物品的特征,比如物品的種類,屬性。。。書中介紹到物品冷啟動的時候也需要提取物品的特征,比如關鍵詞向量,d= {(e1,w1),(e2,w2)…}表示關鍵詞和權重,權重信息可以利用TF-IDF進行計算。
在提取了特征信息之后如果是要計算兩個物品的相似性,那么表達為特征向量,兩個特征向量直接相乘,如果是想直接直接得到預估結果,比如直接根據ctr排序等,那么利用機器學習的模型,進行訓練。
一般系統的特征是十分多的,最近做的一個實例大概涉及2000萬+的特征信息,如果一個系統把所有特征都考慮不現實,通過配置文件進行配置很麻煩,一般是多個推薦引擎一起工作,在按照一定的權重和優先級進行組合。
推薦系統的結構:
A 用戶特征一般分為用戶的行為特征,從用戶日志中進行行為提取,再進行行為特征轉換,而對于屬性特征,就可以直接根據信息轉化為特征向量
B 生成初始化推薦列表
根據用戶的特征,和線下計算完成的 特征-物品 的相關矩陣,進行轉化得到相關推薦。 這里一個重點:這里一般會引入一個候選物品集合,也就是需要推薦的物品需要在候選集合當中。
如果用戶對物品a產生了行為,候選列表中b希望被推薦,a比較流行,b不流行,那么,b在a中的相關性計算的分肯定不會靠前(一般也會有抑制流行度的方法),那么topN推薦的時候可能不會有b,推薦的都是不在推薦列表中的物品,那么如果在最后進行簡單過濾,可能導致推薦商品會很少,所以在這里,就應該適當根據推薦列表,增加列表中物品的權重信息。
C 過濾模塊
過濾到不滿意的物品,比如,用戶操作過的,質量很差的。。。
D 排名模塊
1 新穎性 在推薦過程中,對熱門的物品進行降權
2 多樣性 對展現過的商品權重衰弱,通過根據用戶的歷史行為多挖掘主題,進行推薦
3 時間多樣性 系統實時性 商品根據時間因子衰減
其中幾個比較重要的點,先簡要記錄一下,之后對每一個進行深入的介紹:
1 在CF的推薦過程中,一定要注意抑制物品,用戶的活躍性因子。同時在計算相關性的時候,注意進行歸一化操作 物品總是屬于很多的類別,每個類別內部的物品的相似性也是不同的,所以最好類別進行歸一化
2 隱語義模型 根據隱含特征聯系用戶的興趣和物品,根據用戶行為自動聚類 用戶u與第k個隱含類的關系*第k個隱含類和物品i的關系 ,計算量比較大,如果不能先生成候選列表,不適合在實時應用,同時不好對結果進行解釋
3 為模型抽樣或者生成負樣本的時候,盡量保持正負均衡,同時負樣本盡量選擇熱門但是用戶沒有行為的
4 如何處理實時推薦系統的實時性問題
5 冷啟動問題
用戶冷啟動問題,用戶在注冊的時候有基本信息,可以根據基本信息對用戶分類,同時找到和用戶特征f和物品i被具有特征f的用戶喜歡的程度進行推薦,也可以在注冊的時候先讓用戶顯性地完成一些反饋操作,我記得像微博,lofter等都有這個過程
物品冷啟動問題,簡單的方法是將物品隨機進行展示,那么會收集到一定的信息可以進行處理。最常用的方法是根據物品的內容生成關鍵詞向量,根據關鍵詞向量找到相似的物品,可以類似于CF的方法進行推薦,一般涉及到詞語,那么就需要思考到同義詞,LDA模型就可能需要
LDA包括3個個元素 文檔,話題,詞語通過收斂使詞語組合為不同的話題,根據物品在話題上的分布,計算物品的相似性。計算分布相似性KL
6 通過給物品打標簽,計算物品的標簽分布,計算相似性,這里標簽類似關鍵詞,在計算權重的時候也可以引入ID-TFD進行優化
7 在做推薦的過程中,注意時間和地理位置的因素,注意一個物體的生命周期,系統的生命周期。在計算系統的時效性的時候,先計算物品的流行度,用物品的平均在線天數進行評估。再計算相鄰T天時間,物品的流行度的相似性,獲得系統的時效性
來自:http://blog.csdn.net/xietingcandice/article/details/46766383