1. 程式人生 > >【讀書筆記】推薦系統實踐-常見推薦演算法及應用

【讀書筆記】推薦系統實踐-常見推薦演算法及應用

《推薦系統實踐》系統性地介紹了推薦系統這一領域,思路清晰,詳細介紹了各個領域不同情景的推薦演算法的應用,是一本很好的推薦系統入門書,尤其第二第三章的講解比較細緻。(Ps:書中插入的python程式碼有點生硬,讀者可以直接忽略)

衡量推薦演算法的指標

  • 使用者滿意度

    滿意度是評測推薦系統最重要的指標,但是無法通過離線計算獲得,只能通過使用者調查或者線上實驗。

  • 預測準確度

    對於TopN推薦(這裡主要討論TopN推薦),對於準確度的衡量有兩個指標。R(u)是針對測試集,根據使用者在訓練集上的行為給使用者作出的推薦列表,而T(u)是使用者在測試集上的行為列表。

    • 召回率:表示使用者喜歡的物品列表裡被推薦系統推薦到的比例
    Recall=uUR(u)T(u)uU|T(u)|
    • 準確率:表示推薦系統推薦給使用者的列表裡使用者喜歡該推薦的比例
    Precision=uUR(u)T(u)uU|R(u)|
  • 覆蓋率:述一個推薦系統對物品長尾的發掘能力。覆蓋率 最簡單的定義為推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的使用者集合為U ,推薦系統給每個使用者推薦一個長度為N的物品列表R(u) 。

    Cove
    rage=uUR(u)|I|
  • 多樣性:多樣性描述了推薦列表中物品兩兩之間的不相似性,與推薦的相似性是相對的。

  • 新穎性:是指給使用者推薦那些他們以前沒有聽說過的物品,給使用者帶來新穎感

  • 驚喜度:區別於新穎性,如果推薦結果和使用者的歷史興趣不相似,但卻讓使用者覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於使用者是否聽說過這個推薦結果。

  • 信任度:指使用者給推薦系統給出結果的信任,可以通過增加推薦系統的透明度(給出推薦理由)和考慮使用者的社交網路(使用者更信任他們的好友)來提升推薦系統的信任度。

  • 實時性:表現在使用者行為變化後,即使更新推薦列表;同時在新的物品加入系統,物品能夠被推薦到使用者。

  • 健壯性:推薦系統能夠抗攻擊,推薦系統依賴使用者行為,如果使用者刻意造假使用者行為,就會對推薦結果造成影響(如淘寶刷單強行將物品刷到熱門,被推薦的概率大大增加)。增加健壯性的方法有:

    • 使用代價比較高的使用者行為賦予更高的權重,代價比較的高的行為造假率低。
    • 使用資料前,進行攻擊檢測

推薦演算法簡介

當前業界用的最多的演算法就是基於領域的推薦演算法,包括基於使用者的協同過濾和基於內容的系統過濾,當然還有一些其他演算法,包括了基於圖的推薦演算法、基於內容的推薦演算法、隱語義模型、利用標籤推薦等等。

1. 基於使用者的協同過濾

a.推薦思想

當一個使用者A需要個性化推薦 時,可以先找到和他有相似興趣的其他使用者(這裡的興趣相似指兩人感興趣的物品重合度高),然後把那些使用者喜歡的、而使用者A沒有聽說過的物品推薦給A。這種方法稱為基於使用者的協同過濾演算法。

主要步驟包括:

  • 找到和目標使用者興趣相似的使用者集合(計算與當前使用者興趣相似度高的使用者)
  • 找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者

b.演算法實現

給定使用者u和使用者v,令N(u)表示使用者u曾經有過正反饋的物品集合,令N(v) 為使用者v曾經有過正反饋的物品集合。那麼u與v的相似度可以如下計算:

wuv=|N(u)N(v)||N(u)||N(v)|

比如使用者A對物品a,b,d產生過正反饋,使用者B對物品a,c產生過正反饋

使用者 物品
A a,b,d
B a,c

那麼使用者A與使用者B的相似度計算為:

wAB=|a,b,da,c||a,b,d||a,c|=16

假設使用者數為n,利用一個n*n使用者矩陣C儲存使用者兩兩之間相似度。但是這樣兩兩計算使用者相似度,使用者數量多了之後,複雜度顯然不可取。所以通常的計算方法是利用倒排表(物品到使用者的倒排表)。對於每個物品都儲存對該物品產生過行為的使用者列表,設使用者u和使用者v同時屬於倒排表中a物品對應的使用者列表,那麼矩陣對應的[u, v]位置加一。可以掃描倒排表中每個物品對應的使用者列表,最終就可以得到所有使用者之間相似度矩陣C。

注意得到了相似矩陣對於每個位置還需要除以|N(u)||N(v)|,才能得到相似度。

看下圖,就會更清晰。

完成了使用者之間相似度的計算,下面要根據相似度找到推薦的物品列表。

如下的公式度量了UserCF演算法中使用者u對物品i的感興趣程度。這裡S(u, K)包含和使用者u興趣最接近的K個使用者,N(i)是對物品i有過行為的使用者集合,wuv 是使用者u和使用者v的興趣相似度,rvi代表使用者v對物品i的興趣(這裡可以設為1):

pu,i=vS(u,K)N(i)wuvrvi

最後依據pu,i,找到最感興趣的n的物品推薦給使用者。

c.演算法改進

在計算使用者相似度的時候,簡單的使用了餘弦相似度公式,但這個公式過於粗糙。以電商為例子,如果兩人都夠了熱門商品,並不能說明他們的相似度,因為很多人都會購買熱門物品,所以改進的相似計算如下,懲罰了熱門物品對相似度的影響。