推薦召回 基於使用者的協同過濾UserCF

2022-09-19 06:51:09 字數 2832 閱讀 6861

目錄6. 總結

協同過濾的思想在推薦系統中,可謂是開山鼻祖般的存在。從推薦系統最初至今,幾十年的歷程中,協同過濾一直都閃爍著迷人的光芒。

要說為何協同過濾這麼重要,就得說說它的優點:

模型通用性強,不需要太多的領域知識

工程實現簡單,可以方便的應用到產品中,而且效果還不錯

接下來我們來說說,協同過濾的思想。通常呢,就是從埋點日誌裡,找出使用者的行為資料,然後構建出使用者和物品的乙個共現矩陣,當然不可能說使用者把所有的物品都消費過,所以這個共現矩陣會有很多空白的地方,而我們的重點就是通過計算,把這些空白的地方填充,然後排除已經消費過的物品,把那些最終得分高的推薦給使用者。

一般而言呢,協同過濾分為三種型別:基於使用者(user-based)的協同過濾,基於物品(item-based)的協同過濾,基於模型(model-based)的協同過濾。

那今天我們主要來講解下基於使用者的協同過濾:usercf。

老話說的好:人以群分。你是什麼樣的人,你的朋友也基本和你一樣。生活中呢,會有這樣的場景出現:比如說最近想看一部懸疑片的電影,你會讓你的好朋友給你推薦。這個過程呢,就是基於使用者的協同思想,而你的朋友給你推薦過幾部電影《神探夏洛克》、《盜夢空間》等,然後你說《盜夢空間》我看過了,我來看看《神探夏洛克》。那這個過程,就是過濾的思想了。從前到後,我們梳理下,就會發現,基於使用者的協同過濾其實一直就出現在我們的日常生活中,只是沒有用數學和演算法的思想提煉而已。

那麼問題來了,在實際的應用中,我們怎麼去找到相似的使用者,也就是從其他使用者中找到你的「好朋友」呢?

說到這裡,必須得提一下,通常而言,我們從埋點日誌資料裡,提煉出的使用者-物品共現矩陣中,資料的展示會有兩種方式:顯式評分矩陣和隱式評分矩陣。

顯式:比如說使用者給物品評分5分,4分,3分等,這種呢,就是使用者在消費物品後,會給物品反饋乙個自己的衡量。也就是我們在網上購物後的乙個評價得分。

隱式:通常有的使用者在購買過物品後,不會給物品評分,因為懶。這個時候呢,我們怎麼去衡量這個得分呢?簡單,直接將使用者購買過的物品給1,使用者未購買的給0。

對於資料的處理,到乙個階段。接下來看看如何計算使用者的相似度。

對應上面的資料格式,業內在相似度計算上的選擇也不同。顯式用余弦cosine,隱式用傑卡德jaccard,余弦有變種,別忘皮爾遜,加時間衰減,效果會更好。

余弦相似度:

余弦相似度在計算使用者、物品、文字時使用很頻繁。

計算夾角,而不考慮長度的影響。如:使用者a對物品1和物品2的評分是1分,2分,使用者b的評分是4分,5分。用余弦相似度計算的話,使用者a和使用者b相似度高達98%,故引入皮爾遜。

\[cos(\theta)=\frac= \frac^n a_i \times b_i}^n(a_i)^2} \times \sqrt^n(b_i)^2}}

\]

實際上也是一種余弦相似度,只不過是先對向量做了去中心化,也就是減去均值後,再計算相似度。

區別於余弦相似度,皮爾遜計算結果在[-1, 1]之間。有正相關和負相關之分。

皮爾遜只適合於顯示評分體系。

\[r = \frac^n(x_i - \overline x)(y_i - \overline y)}^n(x_i - \overline x)^2} \sqrt ^n(y_i - \overline y)^2}}

\]傑卡德相似度:

簡單來說,就是交集除以並集

\[j(a,b) = \frac

\]另外,拓展下常用的八大距離計算方法:

在計算完使用者相似度後,我們接下來就可以根據使用者間的相似度,來給目標使用者推薦物品。

一般,常用加權平均法:

\[pred(u,i)=\hat_=\fracsim(u,v)*r_}|sim(u,v)|}

\]整體的思路就是:根據相似度,選取k個最相似的使用者(k近鄰思想),然後對這k個使用者評分過的物品進行打分,最後過濾掉該使用者已經評分過的即可。

有個問題得備註下:通常來說,用隱式矩陣的話,只是能**出使用者是否對物品感興趣,但是呢,對物品的喜好程度不能很好的**。所以實際工作中,盡可能的去使用顯式評分矩陣,效果會更好。

當然,評分矩陣一般都比較稀疏,比如用皮爾遜計算,如果不存在正相關,那就無法做出**。這個時候呢,可以使用余弦相似度,然後根據最終的推薦結果,去調整分數閾值。另外,召回通路不僅僅是一條,如果卡分數閾值後,沒有推薦結果,那就用其他路填充唄。

5.1 如何提煉使用者日誌資料?

這個涉及到資料結構儲存了,如果資料量不大,可以用字典的方式儲存。其次用numpy、pandas來運算元據。

5.2 使用者相似度計算很耗時,有什麼好的方法?

主要的思想就是聚類過濾。如篩選某一區域的使用者進行計算,或者根據性別、年齡、消費水平等等,這樣的條件篩選完後,使用者的基數就比較小。

其次就是向量化計算,記住:不要重複造輪子。python中的numpy、pandas已經內嵌了很多方法,可以高效的運算元據。

在海量資料的基礎上,還可以考慮hadoop、spark等大資料分布式計算框架。

此外,可以嘗試一些單機版的工具:kgraph、graphchi等。

5.3 有哪些改進措施?

像上文提到的篩選出k個最相似的使用者,可以大大縮減推薦的計算時間。

另外,可以考慮多執行緒的方法,如c++的openmp庫可以讓我們大大提公升計算機的使用效率。

還有就是,可以懲罰熱門物品的喜歡程度,增加時間衰減,一般用乙個指數函式,來對物品進行降權處理。

最後,協同過濾是推薦系統的入門策略,但也是推薦系統的基石。目前行業內的大廠,在召回側的基本都是協同過濾、內容、模型等策略,像word2vec、fm等召回思想都是在base之上的延伸,所以掌握協同過濾的思想是非常重要的。

加油!!!

協同過濾 基於使用者的協同過濾itemCF

基於使用者的協同過濾演算法也被稱為最近鄰協同過濾或knn k nearest neighbor,k最近鄰演算法 其核心思想就是,首先根據相似度計算出目標使用者的鄰居集合,然後用鄰居使用者評分的加權組合來為目標使用者作推薦。通常這些演算法都可以總結成三步 首先,使用使用者已有的評分來計算使用者之間的相...

協同過濾推薦演算法 推薦演算法 基於協同過濾CF

前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...

推薦演算法之基於使用者的協同過濾

基於使用者的的協同過濾演算法是推薦統統最古老的演算法,簡稱usercf。該演算法的誕生一定程度上標誌著推薦系統的誕生。本文將對usercf演算法原理進行講解,並且基於movielens資料集給出實現 供大家交流學習。找到和目標使用者興趣相似的使用者集合 找到這個集合中使用者喜歡的且目標使用者沒有聽說...