李梅
摘要:協(xié)同過濾算法分為ItemCF算法和UserCF算法,分別側(cè)重物品和用戶,常用于新聞推薦。文章介紹了這兩個基礎(chǔ)算法及實現(xiàn)的步驟,并列出了這兩個算法的優(yōu)缺點。通過新聞數(shù)據(jù)集20Newsgroups比較了ItemCF算法和UserCF算法在準(zhǔn)確率、召回率、覆蓋率及流行度這四個評價指標(biāo)的值,ItemCF算法都低于UserCF算法。
關(guān)鍵詞:新聞推薦;ItemCF算法;UserCF算法
中圖分類號:TP312? ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2022)34-0051-03
每天瀏覽新聞已經(jīng)是大多數(shù)人的生活習(xí)慣,如何從海量的新聞中獲取感興趣的新聞,成為很多人關(guān)心的問題,可以節(jié)省大量時間,新聞推薦系統(tǒng)可以完美解決這個問題。下面介紹基于協(xié)同過濾的新聞推薦算法。
1 基于用戶的協(xié)同過濾算法
基于用戶的協(xié)同過濾算法(UserCF)在為大家推薦喜歡看的電影方面,如最近看得比較多的歐美大片,為喜歡聽音樂人們推薦好聽的歌曲,如WestLife的經(jīng)典歌曲。UserCF算法影響深遠(yuǎn),近年來,廣泛應(yīng)用于各種類別的新聞推薦。
1.1 基礎(chǔ)算法
當(dāng)人們需要在網(wǎng)上尋找自己需要的信息時,面對如此龐大的信息量,常會感到茫然,這時亟須一個推薦系統(tǒng)。通過用戶間的大量對比,發(fā)現(xiàn)興趣愛好等最相似的m個用戶,采用相應(yīng)的算法,將這m個用戶感興趣的item推薦給該用戶,即為我們熟悉的基于用戶的協(xié)同過濾算法(UserCF) 。
從UserCF算法的定義可以看出此算法經(jīng)歷兩個步驟。
1) 第一步 ,對比大量用戶,包括他們的購物行為等,經(jīng)常去哪些店鋪,經(jīng)常點擊哪類物品,發(fā)現(xiàn)與該用戶興趣愛好等相似的m個用戶。
2) 第二步,把發(fā)現(xiàn)的這m個用戶都有興趣的并且該用戶未涉獵過的這些item推薦給該用戶。
第一個步驟的核心就是尋找相似的m個用戶,找到后并計算他們之間的相似度。例如:現(xiàn)在有A、B、C、D四個用戶,分別對a、b、c、d、e五個物品表達了自己的喜好程度(通過評分的高低來表現(xiàn)自己的喜好程度高低),而B用戶由于工作需要推薦軟件測試方面的書籍,這就需要計算發(fā)現(xiàn)B用戶的相似用戶群,然后找到用戶群喜歡的經(jīng)常查看的但C未涉獵的軟件測試方面的書籍推薦給B[1]。計算相似度可以使用Jaccard公式:
1.2 用戶相似度計算的改進
生活中你會發(fā)現(xiàn),兩個人都購買了《三國演義》,不能體現(xiàn)這兩個人的共同興趣,因為這本名著老幼皆知,中國人買得很多,即熱門物品對相似度的影響。再例如,兩個人都買過《軟件測試技術(shù)及項目案例實踐》,這個購買行為就說明兩人興趣愛好相似,只有對軟件測試感興趣或者從事軟件測試工作的人才會買這本書。因此,改進相似度計算公式。
def UserSimilarity(train):
W = dict()
for u in train.keys():
for v in train.keys():
if u == v:
continue
W[u][v] = len(train[u] & train[v])
W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)
return W
2 基于物品的協(xié)同過濾算法
基于物品的協(xié)同過濾算法(ItemCF),在某些網(wǎng)站中通過點擊等行為,使用“Customers who? viewed this also viewed(看過還看過)”以及“Customers who viewed this item also bought(看過且買過)”來進行推薦。
2.1 基礎(chǔ)算法
簡單的抑或通俗解釋,通過歷史喜歡的item推薦與這個item相似的item,即物——物。從原理上我們可以得知:這個算法物——物的推薦方式,與目標(biāo)用戶的興趣愛好并不存在某種之間聯(lián)系。例如,要計算《傲慢與偏見》和《簡·愛》兩部電影之間的相似度,需要使用對這兩部影片都有過評價的用戶數(shù)據(jù)。UserCF算法中,需要找到行與行之間的相似度;ItemCF算法中,要找到列之間的相似度,這個是兩者在找相似度方面的差別。ItemCF算法主要經(jīng)歷下面兩個步驟:
1) 第一步,找到物品之間的相似度,通過倒排表等方式。
2) 計算推薦結(jié)果,同時過濾熱門物品。
2.2 物品相似度計算的改進
根據(jù)前面的介紹,在計算物品的相似度矩陣中有個問題,如果物品j過于熱門,就像大家熟悉的網(wǎng)紅物品,有很多用戶都給它進行了評分,則計算出的Wij就會很大。熱門Item影響了推薦,包括明星、網(wǎng)紅代言的這些Item都會有影響。為了避免推薦熱門的物品,可以用下面的公式:
修改后的公式變化很大,減少了物品j的權(quán)重占比,還可以避免與網(wǎng)紅熱門商品相似的概率。這里假設(shè):每個用戶的興趣愛好可能就那么幾個,一個用戶如果對某兩個item感興趣,則這兩個item所屬的范圍是有限的,但是大量用戶對相關(guān)item感興趣,例如都喜歡軟件測試書籍,則具有一定相似度。利用修改后的公式計算相似度矩陣與評分矩陣的乘積,與優(yōu)化前的結(jié)果是一樣的。
3 UserCF和ItemCF的綜合比較
由前面的分析,可以看出UserCF和ItemCF這兩個算法的推薦實現(xiàn)思路:UserCF算法先要利用相關(guān)算法發(fā)現(xiàn)m個用戶,即用戶——用戶,以此為第一步,然后將m個相似用戶評分item在目標(biāo)用戶沒有評分的item推薦給用戶;ItemCF算法要發(fā)現(xiàn)大量item之間的相似度,如不同品牌的長款大衣,根據(jù)這些 item的相似度進行推薦,即人們熟悉的物——物。由此可以看到:
UserCF算法側(cè)重用戶所處的群體,他們有相似的愛好,在進行推薦時也是這個群體中大家極力推崇的,通過歷史行為計算得到[2]。
ItemCF算法側(cè)重用戶以前行為的歷史item,用戶自己的喜好變化對用戶影響更大,偏向于個性化。
下面從三個方面對比UserCF和ItemCF算法。
1) 在適用場景上的比較
ItemCF算法強調(diào)物品間的相似性,因此在進行推薦時,當(dāng)用戶數(shù)量大大超過item 數(shù)量時,ItemCF算法更加合適。例如,購物網(wǎng)站和技術(shù)博客網(wǎng)站的item或文章數(shù)據(jù)比較穩(wěn)定,所以計算item相似度時不但計算量小,而且不必經(jīng)常進行更新[3]。UserCF算法強調(diào)用戶間的相似性,所以在進行推薦時,當(dāng)item的 數(shù)量大大超過用戶數(shù)量時,UserCF算法更加合適。UserCF算法在新聞類網(wǎng)站中可以經(jīng)??吹健@?,在社交網(wǎng)站中可以使用UserCF算法,可解釋性也更強。所以這些網(wǎng)站的內(nèi)容更新比較快,用戶更偏愛社會化熱點。
2) 在推薦系統(tǒng)多樣性上的比較
ItemCF算法在考慮單個用戶的多樣性方面優(yōu)勢不及UserCF算法,item覆蓋率比較小,多樣性和豐富度都低,且其精度稍微小于UserCF算法。ItemCF算法在考慮系統(tǒng)的多樣性方面要大大勝過UserCF算法,原因歸于UserCF算法偏重推薦熱門item。
3) 在用戶特點上的比較
UserCF算法在進行推薦時,如果目標(biāo)用戶暫時找不到興趣愛好相同的鄰居,則該算法的推薦效果就會大打折扣了,結(jié)果就不好了。因此,用戶是否適應(yīng)UserCF,與“目標(biāo)用戶有多少鄰居”成正比。ItemCF算法要發(fā)現(xiàn)某個人愛好item 的自相似度,一旦大了,則說明該用戶對ItemCF算法的適應(yīng)度很好。反之,說明該用戶的偏好不滿足ItemCF算法的假設(shè)條件,則此時使用ItemCF算法對該用戶進行推薦效果不佳。
4 實驗驗證
所使用的數(shù)據(jù)來源是新聞數(shù)據(jù)集20Newsgroups。選擇的幾個主題為:國內(nèi)新聞、航空、軍事、傳媒研究院、公益、媒體。爬取的每條數(shù)據(jù)包含三個字段:標(biāo)題、時間、正文、預(yù)處理數(shù)據(jù)。
4.1 原始數(shù)據(jù)加工
原始數(shù)據(jù)只包含標(biāo)題、時間和正文三個字段,這里增加唯一編號、類別、瀏覽次數(shù)和跟帖次數(shù)這幾個字段并對原始數(shù)據(jù)簡單處理,其中“瀏覽次數(shù)”和“跟帖次數(shù)”是為了方便后續(xù)對新聞進行排序增加的隨機值。
4.2 新聞熱度值計算
這里為每則新聞計算一個熱度分,為后續(xù)的“熱度榜”和“為你推薦”做新聞排序使用。這里的新聞熱度值采用如下的公式計算:
hotValue=seeNum*0.4+disNum*0.5-diffDays*0.1
其中:seeNum:某則新聞被瀏覽的次數(shù);
disNum:某則新聞被評論的次數(shù);
diffDays:新聞在某一天發(fā)表及和當(dāng)前的日期差。
新聞是一個時效性很強的個體,因此在考慮其熱度值時要把時間因素考慮進去。
4.3 新聞相似度計算
新聞相似度在進行新聞推薦時的一個很重要的因素,這里使用新聞主題詞的重合度來考量新聞相似度。
1) 新聞分詞處理
首先需要對新聞進行分詞處理。實現(xiàn)思路是:因為新聞標(biāo)題多樣,如軍事類、科技類、汽車類,利用Python的jieba分詞包,可以對這些關(guān)鍵詞分詞處理。看一篇新聞的第一切入點便是新聞標(biāo)題,新聞標(biāo)題是整篇新聞的高度概括,因為當(dāng)兩則新聞的標(biāo)題重合度越高時,新聞本身的內(nèi)容相似度也就越大[4]。
原始數(shù)據(jù)加載之后保存在相應(yīng)的變量中,在對文章標(biāo)題分詞時使用,分詞使用的是jieba.analyse.extract_tags()函數(shù)。句子組成中包含了大量的單音節(jié)詞、標(biāo)點符號等,在分詞時要去掉這些詞語或標(biāo)點符號,其具體的實現(xiàn)方法是加載停用詞表進行過濾,提取新聞標(biāo)題的關(guān)鍵詞,例如標(biāo)題。
2) 計算相似度
相似度的計算需要相關(guān)函數(shù)去完成,這里用到的函數(shù)為:getCorrelation(self)。
4.4 指定標(biāo)簽下的新聞統(tǒng)計
統(tǒng)計指定標(biāo)簽下的新聞是為用戶選擇標(biāo)簽后生成“為你推薦”內(nèi)容做準(zhǔn)備,這里指定用戶可以選擇的標(biāo)簽有:互聯(lián)網(wǎng)、金融、旅游、經(jīng)濟、文學(xué)、音樂、綜藝等。
其中各個模塊介紹如下:
MySQL數(shù)據(jù)存儲:這里使用MySQL存儲系統(tǒng)所使用的數(shù)據(jù)。系統(tǒng)實現(xiàn)選用的是Python的Django框架,在框架中有對數(shù)據(jù)對象的封裝。
用戶選擇:不同的用戶選擇不同,推薦的內(nèi)容也不同,因為用戶不同所處的圈子也不同。
選擇標(biāo)簽:解決冷啟動問題。當(dāng)然用戶也可以不選擇相應(yīng)的標(biāo)簽,此時“為你推薦”模塊顯示的是熱度數(shù)據(jù)。
用戶點擊瀏覽文章:即用戶在系統(tǒng)中產(chǎn)生了相關(guān)行為,每篇文章的詳細(xì)頁都會推薦該篇文章的相似文章。
熱度榜:熱度值高的排在最上面,這樣計算結(jié)果高的文章將顯示出來。
為你推薦:如果用戶是初次登錄,則根據(jù)用戶選擇的標(biāo)簽返回“為你推薦”的內(nèi)容;若用戶沒有選擇標(biāo)簽,則返回?zé)岫戎递^高的新聞作為“為你推薦”的內(nèi)容;如果用戶是在點擊瀏覽過新聞之后返回“為你推薦”模塊,則返回用戶有行為文章的相似文章,作為“為你推薦”的內(nèi)容。
從以表1可見,準(zhǔn)確率和流行度等評價指標(biāo), ItemCF算法都低于UserCF算法。
雖然基于協(xié)同過濾的新聞推薦算法比較常見,從人們熟悉的搜狐、網(wǎng)易等門戶網(wǎng)站中,可以看到新聞的數(shù)量龐大,而且更新很快,有時幾個小時就會更新一次,所以在使用時選擇更優(yōu)的推薦算法尤為重要。用戶的興趣愛好比較穩(wěn)定,例如有的人喜歡看歐美電影,有的人喜歡聽古典音樂,有的人喜歡看每日新聞等。新聞網(wǎng)站中使用UserCF算法比較多,原因如下:UserCF算法根據(jù)不同的用戶只要更新用戶相似性表即可,比較好實現(xiàn),但新聞的更新頻率太快,在ItemCF算法相當(dāng)于要不停更新item相關(guān)度表,實現(xiàn)起來要困難得多[5]。所以,新聞網(wǎng)站中更愿意采用UserCF算法。
參考文獻:
[1] 項亮.推薦系統(tǒng)實踐[M].北京:人民郵電出版社,2012.
[2] 董晨露,柯新生.基于用戶興趣變化和評論的協(xié)同過濾算法研究[J].計算機科學(xué),2018,45(3):215-219,248.
[3] 楊武,唐瑞,盧玲.基于內(nèi)容的推薦與協(xié)同過濾融合的新聞推薦方法[J].計算機應(yīng)用,2016,36(2):414-418.
[4] 黃賢英,熊李媛,李沁東.基于改進協(xié)同過濾算法的個性化新聞推薦技術(shù)[J].四川大學(xué)學(xué)報(自然科學(xué)版),2018,55(1):49-55.
[5] 高陽團.推薦系統(tǒng)開發(fā)實戰(zhàn)[M].北京:電子工業(yè)出版社,2019.
【通聯(lián)編輯:光文玲】