1. 程式人生 > >《推薦系統實踐》第五章 利用上下文資訊

《推薦系統實踐》第五章 利用上下文資訊

使用者所處的上下文(context)包括使用者訪問推薦系統的時間、地點、心情等,對於提高推薦系統的推薦系統是非常重要的。

關於上下文推薦的研究,可以參考Alexander Tuzhilin教授(個人主頁為http://people.stern.nyu.edu/atuzhili/)的一篇綜述“Context Aware Recommender Systems”

5.1 時間上下文資訊

5.1.1 時間效應簡介

一般認為,時間資訊對使用者興趣的影響表現在以下幾個方面。

 使用者興趣是變化的,如果我們要準確預測使用者現在的興趣,就應該關注使用者最近的行為,因為使用者最近的行為最能體現他現在的興趣。

 物品也是有生命週期的,當我們決定在某個時刻給某個使用者推薦某個物品時,需要考慮該物品在該時刻是否已經過時了。不同系統的物品具有不同的生命週期。

 季節效應,季節效應主要反映了時間本身對使用者興趣的影響。

5.1.2 時間效應舉例

標號為①的曲線對應facebook,標號為②的曲線對應myspace,標號為③的曲線對應twitter。

標號為①的曲線對應iphone,標號為②的曲線對應samsung,標號為③的曲線對應nokia。

標號為①的曲線對應coffee(咖啡),標號為②的曲線對應chocolate(巧克力),標號為③的曲線對應soup(湯),標號為④的曲線對應ice cream(冰淇淋)

5.1.3 系統時間特性的分析

包含時間資訊的使用者行為資料集由一系列三元組構成,其中每個三元組(u,i,t)代表了使用者u在時刻t對物品i產生過行為。在給定資料集後,本節通過統計如下資訊研究系統的時間特性。

 資料集每天獨立使用者數的增長情況 
 系統的物品變化情況 
 使用者訪問情況:可以統計使用者的平均活躍天數,同時也可以統計相隔T天來系統的使用者的重合度。

1. 資料集的選擇

將利用Delicious資料集進行離線實驗以評測不同演算法的預測精度。該資料集包含950 000個使用者在2003年9月到2007年12月間對網頁打標籤的行為。該資料集中包含132 000 000個標籤和420 000 000條標籤行為記錄。因為網頁由URL標識,因此可以根據域名將網頁分成不同的類別。本節選取了5個域名對應的網頁,將整個資料集分成5個不同的資料集加以研究。

2. 物品的生存週期和系統的時效性

不同型別網站的物品具有不同的生命週期,我們可以用如下指標度量網站中物品的生命週期。

(1)物品平均線上天數:如果一個物品在某天被至少一個使用者產生過行為,就定義該物品在這一天線上。因此,我們可以通過物品的平均線上天數度量一類物品的生存週期。考慮到物品的平均線上天數和物品的流行度應該成正比,因此給定一個數據集,我們首先將物品按照流行度分成20份,然後計算每一類物品的平均線上天數。

(2)相隔T天系統物品流行度向量的平均相似度:取系統中相鄰T天的兩天,分別計算這兩天的物品流行度,從而得到兩個流行度向量。然後,計算這兩個向量的餘弦相似度,如果相似度大,說明系統的物品在相隔T天的時間內沒有發生大的變化,從而說明系統的時效性不強,物品的平均線上時間較長。相反,如果相似度很小,說明系統中的物品在相隔T天的時間內發生了很大變化,從而說明系統的時效性很強,物品的平均線上時間很短。

5.1.4 推薦系統的實時性

使用者興趣是不斷變化的,其變化體現在使用者不斷增加的新行為中。一個實時的推薦系統需要能夠實時響應使用者新的行為,讓推薦列表不斷變化,從而滿足使用者不斷變化的興趣。

實現推薦系統的實時性除了對使用者行為的存取有實時性要求,還要求推薦演算法本身具有實時性,而推薦演算法本身的實時性意味著:

 實時推薦系統不能每天都給所有使用者離線計算推薦結果,然後線上展示昨天計算出來的結果。所以,要求在每個使用者訪問推薦系統時,都根據使用者這個時間點前的行為實時計算推薦列表。
 推薦演算法需要平衡考慮使用者的近期行為和長期行為,即要讓推薦列表反應出使用者近期行為所體現的興趣變化,又不能讓推薦列表完全受使用者近期行為的影響,要保證推薦列表對使用者興趣預測的延續性。

5.1.5 推薦演算法的時間多樣性

推薦系統每天推薦結果的變化程度被定義為推薦系統的時間多樣性。時間多樣性高的推薦系統中使用者會經常看到不同的推薦結果。

為了研究推薦系統的時間多樣性和使用者滿意度之間是否存在關係,設計了3種推薦系統。

A 給使用者推薦最熱門的10部電影。
B 從最熱門的100部電影中推薦10部給使用者,但保證了時間多樣性,每週都有7部電影推薦結果不在上週的推薦列表中。
C 每次都從所有電影中隨機挑選10部推薦給使用者。

結果發現:

(1)A、B演算法的平均分明顯高於C演算法。這說明純粹的隨機推薦雖然具有最高的時間多樣性,但不能保證推薦的精度。
(2)A演算法的平均分隨時間逐漸下降,而B演算法的平均分隨時間基本保持不變。這說明A演算法因為沒有時間多樣性,從而造成使用者滿意度不斷下降,從而也說明了保證時間多樣性的重要性。

提高推薦結果的時間多樣性需要分兩步解決:首先,需要保證推薦系統能夠在使用者有了新的行為後及時調整推薦結果,使推薦結果滿足使用者最近的興趣;其次,需要保證推薦系統在使用者沒有新的行為時也能夠經常變化一下結果,具有一定的時間多樣性。

如果使用者沒有行為,如何保證給使用者的推薦結果具有一定的時間多樣性呢?一般的思路有以下幾種。
(1)在生成推薦結果時加入一定的隨機性。
(2)記錄使用者每天看到的推薦結果,然後在每天給使用者進行推薦時,對他前幾天看到過很多次的推薦結果進行適當地降權。
(3)每天給使用者使用不同的推薦演算法。

5.1.6 時間上下文推薦演算法

1. 最近最熱門

在獲得使用者行為的時間資訊後,最簡單的非個性化推薦演算法就是給使用者推薦最近最熱門的物品了。給定時間T,物品i最近的流行度n_i(T)可以定義為:

,α是時間衰減引數。

2. 時間上下文相關的ItemCF演算法

基於物品(item-based)的個性化推薦演算法由兩個核心部分構成:

(1)利用使用者行為離線計算物品之間的相似度;
(2)根據使用者的歷史行為和物品相似度矩陣,給使用者做線上個性化推薦。

時間資訊在上面兩個核心部分中都有重要的應用,這體現在兩種時間效應上。

(1)物品相似度:使用者在相隔很短的時間內喜歡的物品具有更高相似度。:
(2)線上推薦:使用者近期行為相比使用者很久之前的行為,更能體現使用者現在的興趣。因此在預測使用者現在的興趣時,應該加重使用者近期行為的權重,優先給使用者推薦那些和他近期喜歡的物品相似的物品。

基於物品的協同過濾演算法,它通過如下公式計算物品的相似度:

在得到時間資訊(使用者對物品產生行為的時間)後,我們可以通過如下公式改進相似度計算:

,其中衰減函式

α是時間衰減引數,它的取值在不同系統中不同。如果一個系統使用者興趣變化很快,就應該取比較大的α,反之需要取比較小的α。

而在給使用者u做推薦時,使用者u對物品i的興趣p(u,i)通過如下公式計算:

一般來說,使用者現在的行為應該和使用者最近的行為關係更大。因此,我們可以通過如下方式修正預測公式:

t_0是當前時間。\beta是時間衰減引數,需要根據不同的資料集選擇合適的值。

3. 時間上下文相關的UserCF演算法

可以在以下兩個方面利用時間資訊改進UserCF演算法。

(1)使用者興趣相似度:如果兩個使用者同時喜歡相同的物品,那麼這兩個使用者應該有更大的興趣相似度。
(2)相似興趣使用者的最近行為:在找到和當前使用者u興趣相似的一組使用者後,這組使用者最近的興趣顯然相比這組使用者很久之前的興趣更加接近使用者u今天的興趣。也就是說,我們應該給使用者推薦和他興趣相似的使用者最近喜歡的物品。

UserCF通過如下公式計算使用者u和使用者v的興趣相似度:

,N(u)是使用者u喜歡的物品集合,N(v)是使用者v喜歡的物品集合。

可以利用如下方式考慮時間資訊:

,使用者u和使用者v對物品i產生行為的時間越遠,那麼這兩個使用者的興趣相似度就會越小。

在得到使用者相似度後,UserCF通過如下公式預測使用者對物品的興趣:

如果考慮和使用者u興趣相似使用者的最近興趣,我們可以設計如下公式:

5.1.7 時間段圖模型

時間段圖模型G(U,S_U,I,S_I,E,w,\sigma )也是一個二分圖。U是使用者節點集合, S_U是使用者時間段節點集合。一個使用者時間段節點v_{ut}\in S_U會和使用者u在時刻t喜歡的物品通過邊相連。I是物品節點集合, S_I是物品時間段節點集合。一個物品時間段節點v_{it}\in S_I 會和所有在時刻t喜歡物品i的使用者通過邊相連。E是邊集合,它包含了3種邊:(1)如果使用者u對物品i有行為,那麼存在邊e(v_u,v_i)\in E;(2)如果使用者u在t時刻對物品i有行為,那麼就存在兩條邊e(v_{ut},v_i),e(v_u,v_{it})\in E。w(e)定義了邊的權重,\sigma (e)定義了頂點的權重。

,(A,b,2)表示使用者A在時刻2對物品b有行為。

定義完圖的結構後,最簡單的想法是可以利用前面提到的PersonalRank演算法給使用者進行個性化推薦。但是因為這個演算法需要在全圖上進行迭代計算,所以時間複雜度比較高。因此我們提出了一種稱為路徑融合演算法的方法,通過該演算法來度量圖上兩個頂點的相關性。

一般來說,圖上兩個相關性比較高的頂點一般具有如下特徵:

 兩個頂點之間有很多路徑相連;
 兩個頂點之間的路徑比較短;
 兩個頂點之間的路徑不經過出度比較大的頂點。

路徑融合演算法首先提取出兩個頂點之間長度小於一個閾值的所有路徑,然後根據每條路徑經過的頂點給每條路徑賦予一定的權重,最後將兩個頂點之間所有路徑的權重之和作為兩個頂點的相關度。
假設P=\{v_1,v_2,...,v_n\}是連線頂點v_1v_n的一條路徑,這條路徑的權重\Gamma (P)取決於這條路徑經過的所有頂點和邊:

這裡out(v)是頂點v指向的頂點集合,|out(v)|是頂點v的出度, \sigma (v_i)\in (01]定義了頂點的權重,w(v_i,v_{i+1})\in (0,1]定義了邊e(v_i,v_{i+1})的權重。上面的定義符合上面3條原則的後兩條。首先,因為\frac{\sigma (v_i)\cdot w(v_i,v_{i+1})}{|out(v_i)|^{\rho }}\in (0,1),所以路徑越長n越大,\Gamma (P)就越小。同時,如果路徑經過了出度大的頂點v',那麼因為|out(v')|比較大,所以\Gamma (P)也會比較小。

在定義了一條路徑的權重後,就可以定義頂點之間的相關度。對於頂點v和v',令p(v,v',K)為這兩個頂點間距離小於K的所有路徑,那麼這兩個頂點之間的相關度可以定義為:

對於時間段圖模型,所有邊的權重都定義為1,而頂點的權重\sigma (v)定義如下:

,\alpha ,\beta \in [0,1]是兩個引數,控制了不同頂點的權重。

5.1.8 離線實驗

1. 實驗設定

在得到由(使用者、物品、時間)三元組組成的資料集後,我們可以通過如下方式生成訓練集和測試集。對每一個使用者,將物品按照該使用者對物品的行為時間從早到晚排序,然後將使用者最後一個產生行為的物品作為測試集,並將這之前的使用者對物品的行為記錄作為訓練集。推薦演算法將根據訓練集學習使用者興趣模型,給每個使用者推薦N個物品,並且利用準確率和召回率評測推薦演算法的精度。將選取不同的N(10,20,…,100)進行10次實驗,並畫出最終的準確率和召回率曲線,通過該曲線來比較不同演算法的效能。

,R(u,N)是推薦演算法給使用者u提供的長度為N的推薦列表,T(u)是測試集中使用者喜歡的物品集合。

離線實驗將同時對比如下演算法,將它們的召回率和準確率曲線畫在一張圖上。
 Pop 給使用者推薦當天最熱門的物品。
 TItemCF 融合時間資訊的ItemCF演算法。
 TUserCF 融合時間資訊的UserCF演算法。
 ItemCF 不考慮時間資訊的ItemCF演算法。
 UserCF 不考慮時間資訊的UserCF演算法。
 SGM 時間段圖模型。
 USGM 物品時間節點權重為0的時間段圖模型。
 ISGM 使用者時間節點權重為0的時間段圖模型。

這些曲線的形狀將資料集分成了兩類。一類是BlogSpot、YouTube、NYTimes,另一類是Wikipedia和SourceForge。在第一類資料集中,有4個演算法(SGM、ISGM、TUserCF、Pop)明顯好於另外4個演算法,而在第二類資料集中,不同演算法的召回率和準確率曲線交織在一起,並不能明顯分開。而且,在第一類資料集中,即使是非個性化推薦演算法Pop也優於很多個性化推薦演算法(TItemCF、USGM)。這主要是因為第一類資料集的時效性很強,因此使用者興趣的個性化不是特別明顯,每天最熱門的物品已經吸引了絕大多數使用者的眼球,而長尾中的物品很少得到使用者的關注。

5.2 地點上下文資訊

不同地區的使用者興趣有所不同,使用者到了不同的地方,興趣也會有所不同。

基於位置的推薦演算法

明尼蘇達大學的研究人員提出過一個稱為LARS(Location Aware Recommender System,位置感知推薦系統)的和使用者地點相關的推薦系統(https://ieeexplore.ieee.org/document/6228105)。該系統首先將物品分成兩類,一類是有空間屬性的,比如餐館、商店、旅遊景點等,另一類是無空間屬性的物品,比如圖書和電影等。同時,它將使用者也分成兩類,一類是有空間屬性的,比如給出了使用者現在的地址(國家、城市、郵編等),另一類使用者並沒有相關的空間屬性資訊。它使用的資料集有3種不同的形式。

(1)(使用者,使用者位置,物品,評分),每一條記錄代表了某一個地點的使用者對物品的評分。
(2)(使用者,物品,物品位置,評分),每一條記錄代表了使用者對某個地方的物品的評分。
(3)(使用者,使用者位置,物品,物品位置,評分),每一條記錄代表了某個位置的使用者對某個位置的物品的評分。

LARS通過研究前兩種資料集,發現了使用者興趣和地點相關的兩種特徵。

(1)興趣本地化:不同地方的使用者興趣存在著很大的差別。不同國家和地區使用者的興趣存在著一定的差異性。

(2)活動本地化:一個使用者往往在附近的地區活動。

對於第一種資料集,LARS的基本思想是將資料集根據使用者的位置劃分成很多子集。因為位置資訊是一個樹狀結構,比如國家、省、市、縣的結構。因此,資料集也會劃分成一個樹狀結構。我們可以從根節點出發,在到葉子節點的過程中,利用每個中間節點上的資料訓練出一個推薦模型,然後給使用者生成推薦列表。而最終的推薦結果是這一系列推薦列表的加權。這種演算法稱為金字塔模型,而金字塔的深度影響了推薦系統的效能,因而深度是這個演算法的一個重要指標。下文用LARS-U代表該演算法。

對於第二種資料集,每條使用者行為表示為四元組(使用者、物品、物品位置、評分),表示了使用者對某個位置的物品給了某種評分。對於這種資料集,LARS會首先忽略物品的位置資訊,利用ItemCF演算法計算使用者u對物品i的興趣P(u,i),但最終物品i在使用者u的推薦列表中的權重定義為:

TravelPenalty(u,i)表示了物品i的位置對使用者u的代價。計算TravelPenalty(u,i)的基本思想是對於物品i與使用者u之前評分的所有物品的位置計算距離的平均值(或者最小值)。該中演算法稱為LARS-T演算法。

考慮TravelPenality確實能夠提高TopN推薦的離線準確率,LARS-T演算法明顯優於ItemCF演算法。

選擇合適的深度對LARS-U演算法很重要,不過在絕大多數深度的選擇下,LARS-U演算法在兩個資料集上都優於普通的ItemCF演算法。

5.3 擴充套件閱讀

“collaborative filtering with temporal dynamics”,該文系統地總結了各種使用時間資訊的方式,包括考慮使用者近期行為的影響,考慮時間的週期性等。http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.379.1951&rep=rep1&type=pdf

“Temporal Diversity in Recommender Systems”一文中深入分析了時間多樣性對推薦系統的影響。http://www0.cs.ucl.ac.uk/staff/l.capra/publications/lathia_sigir10.pdf

“Evaluating Collaborative Filtering Over Time”論述了各種不同推薦演算法是如何隨時間演化的。http://ntp-0.cs.ucl.ac.uk/staff/n.lathia/thesis/lathia_thesis.pdf

如果要系統地研究與上下文推薦相關的工作,可以參考Alexander Tuzhili教授的工作(http://pages.stern.nyu.edu/~atuzhili/)。