如何捕捉推薦系統中隨時間變化的動態資訊

2021-06-19 20:21:47 字數 1917 閱讀 9175

首先來看為時間資訊建模的重要性

事物是動態變化的。不僅是人的喜好、品味會隨著時間的推移改變(比如,乙個喜歡看韓劇的使用者漸漸喜歡上了國產「恐怖片」;或使用者打分的標準比以往更嚴格了,感覺極好的也只打4分)。物品的流行度也會隨著其他物品的出現,時間的發展而改變(文中顯示,老電影評分tend to 比新電影的高)。因此,讓推薦系統捕捉到使用者和物品的改變能顯著地提高推薦的準確度。[2]

進一步,使用者和物品的變化可以分兩種:long-term trends 和 temporary effects。 模型的目的應該是捕捉到長期的變化趨勢,忽略一些暫時表現出的noise。以往的方法會對以前的評價賦予較小的權值,以重點考慮當前的行為。但作者指出在衡量物品間的相似度方面,歷史評價記錄跟最新評價是同樣efficient的(如,看了a的90%使用者也看了b,那麼a和b是相似的,這點無論在過去還是現在都成立)。[2]

接下來看兩個實際的模型

[1] exploring temporal effects for location recommendation on location-based social networks

作者在矩陣分解中加入時間資訊,它利用了使用者簽到在時間上的兩個屬性:首先,使用者在不同時間呈現不同的簽到喜好。其次,使用者在相鄰時間呈現的簽到喜好是相近的。因此,假設總共有t個時間段,該方法為每個使用者在t個時間段分別建立使用者preference矩陣。然後對相鄰時段的兩個preference矩陣的差值做約束 —— 約束因子為對應時段兩個簽到向量的余弦相似度。

[2] collaborative filtering with temporal dynamics

物品bias:某一樣物品內在就比其他好,於是獲得的評分相對高一般水準要高個0.4分,比如說。

物品的bias動態:舉個例子,雖然乙個電影從質量上來講要高於其他電影0.5分,但實際表現出來的差值在不同時間段是不同的 —— 動態變化的

使用者的bias動態:舉個例子,乙個使用者打分標準變寬鬆了,平均提高了0.3分 —— 動態變化了

1、作者首先為系統的bias建模。

為物品的bias動態建模:因為物品的變化相對人的變化要小,所以可以把總的時間段分成幾段(文中採用的是10周一段),並為每一段分別賦乙個物品bias值。

這裡有個疑問:既然是per user and day,那如果測試集資料採集的日期大於訓練集採集的日期怎麼辦?

2、這些與使用者真正喜好無關的bias被建模之後,剩下的就能更準確地反應使用者的喜好和物品的類屬。於是可以大膽地使用隱語義和基於鄰域的方法了。

對於隱語義:保持物品的特徵不變,使用之前類似的思想給使用者的特徵加上了隨時間的線性變化。

對於鄰域模型:由於使用者興趣的變化,過去打5分的電影與現在打5分的電影「相似度」不大可能高(比如,以前他打5分的恐怖片可能現在只會給3分,因為他轉性看文藝片了)。所以乙個物品對另乙個物品的參考價值,是隨時間距離的增長而遞減的。

這個模型為稱為timesvd++,當特徵維度為200,它在netflix上取得了0.8799的成績。

總結

其實要在推薦系統中加入時間因素很直觀,可以把捕捉使用者動態的問題看成乙個regression問題。但問題是這種變化通常不是連續的[1][2]。解決的辦法是同時捕捉連續和離散的成分。連續成分:使用全域性的regression函式來捕捉。離散成分:將timeline分段,並為每段設定獨有的基準值。可以看到,[1]中的基準值是那t個使用者preference矩陣。[1]不同於[2]的做法是,不使用連續的函式,而是改用「使相鄰兩個變數的差值盡可能小「的限制。不過本質上都是一樣的。

參考文獻:

[1] exploring temporal effects for location recommendation on location-based social networks

[2] collaborative filtering with temporal dynamics

帶電粒子在隨時間緩慢變化的磁場中的運動

如果磁場隨時間緩慢變化,根據法拉第定律,e b t bm times bm partial bm partial t e b t 會產生乙個非保守電場,從而粒子總能量不再守恆。設磁場在空間分布均勻,則粒子在乙個迴旋週期內,動能的變化量為 q c e dl q s b t da delta omega...

UDF 提取指定線上隨時間變化的物理量

fluent 版本 fluent 19.0 visual studio 版本 visual studio 2013 有時候我們想要實現一些功能,比如 我們在使用 fluent 進行瞬態計算的時候,想要獲取某條線上的物理量隨時間的變化,如果我們直接用 udf去輸出當然是可以的,但是實現起來難度比較大,...

推薦系統系列3 推薦系統中如何解決冷啟動

使用者冷啟動主要解決如何給乙個新的使用者做個性化推薦。當乙個新使用者 新註冊的 到來時,我們沒有他的歷史行為資料,所以無法根據他的歷史行為去 他的興趣,從而無法去做個性化推薦。物品冷啟動 物品冷啟動主要解決如何將新的物品推薦給可能對其感興趣的使用者。系統冷啟動 利用使用者註冊提供的年齡性別等做粗粒度...