一狗唉、利用用戶行為數(shù)據
為了給用戶進行物品推薦耍群,首先必須得了解用戶的興趣愛好香椎,一般用戶會在注冊時給自己打標簽乐埠。但是利用用戶注冊信息為用戶進行推薦是不合理的:現(xiàn)有的自然語言處理技術不能很好的對用戶的自我描述進行準確的理解抗斤;用戶的興趣會發(fā)生變化囚企,但是卻不會動態(tài)的更新自我描述;用戶自己也知道怎么用語言去表達自己的興趣愛好瑞眼,或者不知道自己的愛好龙宏;所以我們要根據用戶的歷史行為對用戶進行建模。
- 2.1 用戶行為數(shù)據介紹
這里的用戶行為是指:某個用戶對某個商品進行了某種操作伤疙,不關注用戶或者商品的內容信息(用戶性別银酗,商品類別等)。
用戶行為一般分為兩種:顯性反饋行為和隱性反饋行為徒像。顯性反饋行為是指可以反映用戶對商品是否喜愛的行為黍特,比如用戶對電影的評分;隱性反饋行為就是不能反映用戶對該商品是否喜好的行為锯蛀,比如用戶在某個時間觀看了某個視頻灭衷。
行為數(shù)據的具體內容余黎。由于用戶行為有很多中澳迫,無法用一個具體的方式完全的表示夫嗓,但是大多數(shù)用戶行為可以從下列幾種角度去考慮:
- User id: 產生行為的用戶的唯一標識兔朦。
2.Item id: 產生行為的對象的唯一標識刀闷。
3.Behavior type: 行為的種類(購買浴滴,瀏覽等)茂浮。
4.Context: 產生行為的上下文睦优,主要是指時間和地點菌羽。
5.Behavior weight:行為的權重掠械。(如果是觀看視頻,可以用觀看時長表示算凿,如果是打分行為份蝴,可以用具體的分數(shù)表示)
6.Behavior content:行為的內容。(如果是評論行為氓轰,可以用評論的文本婚夫;如果是打標簽行為,就是標簽本身)
- 2.2 用戶行為分析
在利用用戶行為數(shù)據前署鸡,需要先對用戶行為數(shù)據做些統(tǒng)計分析案糙,了解數(shù)據的一般規(guī)律,這樣可以對整個推薦系統(tǒng)的算法設計提供先驗知識靴庆。這里主要考慮的是用戶活躍度和商品流行度时捌。用戶的獲取度是指:歷史數(shù)據中,用戶產生過行為的商品的數(shù)量炉抒。商品的流行度是指:歷史數(shù)據中奢讨,商品被用戶產生的動作的數(shù)量。
互聯(lián)網中的大部分數(shù)據都服從長尾分布焰薄。F(x)=a*x^k
通過對多個數(shù)據集的實驗表明:用戶活躍度和商品流行度都服從長尾分布拿诸。橫坐標x表示次數(shù)扒袖,縱坐標f(x)表示用戶數(shù)量或者商品數(shù)量。
用戶活躍度與商品流行度之間的關系亩码〖韭剩基于MovieLens數(shù)據設計實驗:橫坐標X表示用戶活躍度,縱坐標f(x)表示具有活躍度x的所有用戶動作過的商品的平均流行度描沟。發(fā)現(xiàn)曲線呈明顯下降的趨勢飒泻,這表示用戶越活躍,越傾向于瀏覽冷門的物品吏廉。這符合我們的一般觀點:新用戶傾向于瀏覽熱門的物品泞遗,因為他們對網站還不熟悉,只能點擊首頁的熱門物品迟蜜,而老用戶會逐漸開始瀏覽冷門的物品刹孔。
- 2.3 常用算法,實驗設計以及算法評測
單獨使用用戶行為數(shù)據進行推薦的算法一般被稱為協(xié)同過濾算法娜睛。主要包括:基于領域的方法髓霞,隱語義模型,基于圖的隨機游走算法畦戒。其中最重要的方法是基于領域的方法方库。該方法主要包括兩個算法:基于用戶的協(xié)同過濾算法和基于物品的協(xié)同過濾算法。
基于用戶的協(xié)同過濾算法:為用戶推薦 與其興趣相似的其他用戶 喜歡的物品障斋。
基于物品的協(xié)同過濾算法:為用戶推薦 與其之前喜歡的物品 相似的物品纵潦。
實驗方法:主要是離線實驗。
實驗數(shù)據:GroupLens提供的MovieLens數(shù)據集垃环。
實驗設計:將數(shù)據按照均勻分布隨機分成M份邀层,M-1份用來作為訓練集訓練模型,最后一份作為測試集測試模型遂庄。為了防止模型的過擬合寥院,需要進行M次實驗。將M次在測試集上的結果的平均值作為最后的實驗結果涛目。
評價指標:準確率秸谢,召回率,覆蓋率霹肝,新穎度估蹄。這里用推薦列表中所以物品的平均流行度來表示新穎度。
- 2.4 基于領域的算法
2.4.1 基于用戶的協(xié)同過濾算法
基于用戶的協(xié)同過濾算法在1992年誕生(和我一樣沫换。臭蚁。。),是推薦系統(tǒng)中最古老的算法刊棕。先介紹該算法最基本的算法炭晒,再逐步介紹算法的改進待逞。
1.基礎算法: 推薦算法的目的是為用戶u推薦N個商品甥角。為達到這么目的,需要分為3步走识樱,第一步是找到與目標用戶u興趣相似的用戶集合V嗤无,第二步是找到V中用戶喜歡的,但是u沒聽過的商品集合J怜庸,第三步是計算目標用戶u對J中商品j的分數(shù)Pu(u,j)当犯,按照分數(shù)排序為用戶推薦前N個商品。
2.用戶之間的相似度W(u,v): 主要通過兩個用戶動作過的物品的重合度來衡量割疾。如果兩個用戶購買的商品基本都一樣嚎卫,說明兩個用戶很相似。用戶u動作過的商品集合N(u)與用戶v動作過的商品集合N(v)的相似度可以用杰卡德相似系數(shù)(Jaccard)或者余弦相似度(cos)宏榕。分子都一樣拓诸,是集合的交集。前者的分母是集合的并集麻昼,后者的分母是長度的乘積開方奠支。
3.相似度的改進:最原始的計算方法認為每個商品都是平等的,所以分子就是商品的數(shù)量抚芦。其實每個商品的流行度不一樣倍谜,如果兩個用戶經常同時購買流行度較低的商品,更加能說明兩個人比較相似叉抡。這里分子改為: 1/( log( 1+N(j) )).N(j)表示兩人同時購買的商品j的流行度尔崔。
4.時間效率的改進:在計算所有用戶間的相似度時,每計算兩個用戶間的距離褥民,都需要遍歷整個數(shù)據集季春。假設數(shù)據集的長度為L,用戶數(shù)量為M轴捎,那么時間復雜度是O(MML)鹤盒。將統(tǒng)計結果放入字典C[u][v]中。改進思想:建立物品到用戶的倒排表侦副,對于每個物品侦锯,保存對該物品產生動作的所有用戶。這樣只需要對數(shù)據進行一次遍歷秦驯,就可以得到詞典dict_item_user[u]尺碰。然后對該詞典進行M*M次遍歷就可以得到所有用戶的動作過的商品的交集C[u][v]。
5.目標用戶u對商品j的分數(shù):Wuv*Rvj累加。V表示與用戶u興趣最接近的前K個用戶亲桥,Wuv表示用戶間的相似度洛心,Rvj表示用戶V對商品j的打分。如果沒有打分题篷,按照1計算词身。
2.4.2 基于物品的協(xié)同過濾算法
上面介紹的基于用戶的CF算法有個2個很重要的缺點:隨著網站的用戶數(shù)目越來越大,計算用戶間的相似度矩陣也越來越困難番枚;推薦結果很難對用戶進行解釋法严。于是亞馬遜提出了基于物品的CF算法。
基于物品的協(xié)同過濾是目前業(yè)界應用最多的算法葫笼。先介紹最基本的算法深啤,再逐步介紹算法的改進。
1.基礎算法:為目標用戶u推薦N個商品路星。第一步計算物品間的相似度溯街。第二步找出用戶u歷史喜歡的商品集合I,根據前一步得到的相似度矩陣洋丐,獲得與每個商品i最相似的商品K個商品集合J(如果不重合呈昔,有I*J個商品)。第三步通過計算u對集合J中商品j的分數(shù)垫挨,根據分數(shù)推薦前N個商品給用戶u韩肝。
2.商品間的相似度W(i,j): 如果兩個商品經常被同一個用戶購買,說明兩個商品很相似九榔。分子為同時購買商品i和商品j的用戶的數(shù)量哀峻,分母為購買i的用戶數(shù)量*購買j的用戶數(shù)量 開方。
3.相似度的改進:如果兩個商品同時被一個活躍度低的用戶購買哲泊,能夠更加說明兩個商品相似剩蟀,所以需要對活躍用戶進行懲罰。分母不變切威,分子改為 1 / ( log( 1+N(u)) ). N(u)表示同時購買i和j的用戶的活躍度育特。
4.相似度的歸一化:有學者發(fā)表了一篇論文,提到如果將ItemCF中的相似度矩陣按照最大值歸一化先朦,可以提高推薦的準確率缰冤。Wij=Wij /max(Wij) 分母表示商品i與其他所有商品的相似度的最大值。不是所有商品與其他商品的最大值喳魏。不知道在UserCF中棉浸,將相似度矩陣歸一化效果會不會有提升?
5.時間效率的改進:建立從用戶到商品的倒排表dict_user_item[user]刺彩,存儲每個用戶喜歡的商品集合迷郑。
6.用戶u對商品j的分數(shù): Wij*Rui的累加枝恋。Wij表示用戶喜歡的商品i與待推薦商品j的相似度,Rui表示用戶u對自己喜歡的商品i的打分嗡害。如果商品j與用戶喜歡的m個商品都很相似焚碌,那么就是累加m項。
2.4.3 UserCF和ItemCF的比較
那么我們到底應該選用UserCF還是ItemCF呢霸妹?最直接的想法是根據離線實驗十电,看哪個的效果好就用哪個。但是離線實驗的結果在選取推薦算法時不能起到決定作用抑堡。首先應該滿足產品的需求摆出,比如如果需要提供可解釋性,就得選擇ItemCF首妖;其次要看時間代價。如果用戶數(shù)量太多爷恳,就不能用UserCF有缆;最后,離線的指標與在線的指標(如點擊率)不一定成正比温亲。
2.5 隱語義模型
LFM隱語義模型最早在文本挖掘領域被提出棚壁,用于找到文本的隱含語義,相關的名詞有LSI/PLSA/LDA和topic model栈虚。
通過對用戶和商品自動聚類袖外,實現(xiàn)了不同于CF的基于用戶行為的推薦算法。
用戶u對商品i的興趣: P(u,i)=Puk*Qik 求和魂务。其中k表示隱類的個數(shù)曼验,由用戶指定;Puk表示用戶u對隱類k的偏好粘姜;Qik表示商品i與隱類k的關系△拚眨現(xiàn)在需要解決的就是如何確定這兩個參數(shù)。書中通過機器學習的思想孤紧,通過迭代的方式得到參數(shù)豺裆。
機器學習方法求參數(shù):該類方法最本質的思想:首先構建總的損失函數(shù),設定參數(shù)初始值和學習步長号显,在梯度方向進行搜索臭猜,某個參數(shù)的梯度方向就是損失函數(shù)對該參數(shù)求偏導。這里的數(shù)據是隱反饋數(shù)據押蚤,所以需要構建正負樣本蔑歌。
隱反饋數(shù)據生成類別標簽:正樣本很好解決,用戶對物品產生動作就設置Rui=1活喊,否則設置為0.但是這樣會導致負樣本特別多丐膝,所以需要對負樣本進行采樣量愧,一般設置比例為1:1。優(yōu)先選取流行度較低的商品帅矗,因為用戶可能不知道該商品才沒買偎肃,不是因為知道了不買。
書中介紹的損失函數(shù)中浑此,參數(shù)向量在實際中具體表示什么不是很明白累颂,所以不是完全明白該小節(jié)?
2.6 基于圖的模型
用戶行為很容易用二分圖表示凛俱,因此很多圖的算法都可以用到推薦系統(tǒng)中紊馏。
如何用圖表示用戶行為:左邊一列的節(jié)點表示用戶,右邊的一列節(jié)點表示商品蒲犬,如果一個用戶購買了一個商品朱监,就把兩個節(jié)點相連。給用戶推薦商品原叮,就是用戶節(jié)點與商品節(jié)點之間的相關性赫编,向用戶推薦相關性最高的商品。
基于圖的推薦算法:相關性較高的一對定點具有三個特征:兩個頂點之間有很多路徑相連奋隶;連接兩個頂點的路徑的長度都比較短擂送;連接兩個定點之間的路徑不會經過初度比較大的頂點。針對這三個特征唯欣,研究人員設計了很多算法嘹吨,比如基于隨機游走的PersonalRank算法。
PersonalRank算法:假設給用戶u(在圖中用Vu)推薦商品v(在圖中用Vv表示)境氢。從Vu開始在二分圖中進行隨機游走蟀拷,游走到任何一個節(jié)點,首先按照概率alpha決定是否繼續(xù)游走产还。如果走匹厘,就從當前節(jié)點指向的任意一個節(jié)點隨機選一個節(jié)點,作為下次經過的節(jié)點脐区;如果不走愈诚,就回到Vu節(jié)點重新游走。這樣牛隅,經過很多次隨機游走后炕柔,每個商品被訪問的概率會收斂到一個數(shù)字。用戶對每個商品的偏好就是本次游走結束后Vv節(jié)點的概率值媒佣。具體的公式和代碼都比較簡單匕累,在書中有介紹。