陳海龍,閆五岳,孫海嬌,程 苗
(哈爾濱理工大學(xué)計算機科學(xué)與技術(shù)學(xué)院,黑龍江 哈爾濱 150080)
隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,互聯(lián)網(wǎng)人口快速增長,隨之導(dǎo)致網(wǎng)上數(shù)據(jù)呈指數(shù)級增長態(tài)勢,從而導(dǎo)致了嚴(yán)重的信息過載。為了使用戶能夠快速準(zhǔn)確地獲取自己感興趣的物品,推薦系統(tǒng)應(yīng)運而生。推薦系統(tǒng)能夠分析系統(tǒng)中的用戶數(shù)據(jù),根據(jù)用戶的喜好為用戶推薦商品或服務(wù),能夠有效地解決信息過載帶來的問題。目前,成熟的推薦算法有很多,如基于內(nèi)容的推薦[1]、協(xié)同過濾推薦[2]和基于關(guān)聯(lián)規(guī)則的推薦[3]等。
在有關(guān)的推薦算法中,協(xié)同過濾推薦算法應(yīng)用最為廣泛。但是,協(xié)同過濾模型的一大問題是數(shù)據(jù)稀疏,該問題影響了推薦算法的推薦質(zhì)量。為了緩解數(shù)據(jù)稀疏對推薦算法的影響,研究人員進行了許多嘗試。例如Cui等[4]為解決個性化興趣點POI(Point-Of-Interest)推薦數(shù)據(jù)稀疏問題,從多角度來擴展協(xié)同過濾模型。Guan[5]提出了一種三維協(xié)同過濾框架,通過使用用戶和項目的特征進行相似度計算來處理數(shù)據(jù)稀疏性問題。除此之外,為了實現(xiàn)推薦算法的高效性,將深度學(xué)習(xí)融入推薦算法成為了熱點。Mohammad等[6]在推薦系統(tǒng)框架下集成深度神經(jīng)網(wǎng)絡(luò)和矩陣分解并使用顯示反饋進行協(xié)同過濾。Huang等[7]利用基于多注意深度神經(jīng)網(wǎng)絡(luò)實現(xiàn)準(zhǔn)確的組推薦,采用多注意網(wǎng)絡(luò)捕獲內(nèi)部社交特征,采用神經(jīng)注意機制來描述每個組和成員之間的偏好交互。另外,Huang等[8]還提出了一種基于多模式表示學(xué)習(xí)模型,通過項目的多峰特征和用戶的全局特征來計算用戶對項目的偏好。Fu等[9]提出了一種基于深度學(xué)習(xí)的智能推薦,通過學(xué)習(xí)用戶和項目的相應(yīng)低維向量采用前饋神經(jīng)網(wǎng)絡(luò)模擬用戶和物品之間的交互。Zhao等[10]提出了一種預(yù)測協(xié)同過濾方法,利用部分觀察到的用戶-項目矩陣和基于項目的輔助信息來產(chǎn)生推薦。
近年來,標(biāo)簽[11]的應(yīng)用越來越廣泛。標(biāo)簽是一種無層次化結(jié)構(gòu)的、用來描述信息的關(guān)鍵詞[12],它可以用來描述物品的語義。根據(jù)給物品標(biāo)注標(biāo)簽的人的不同,標(biāo)簽應(yīng)用一般分為2種:一種是專家給物品標(biāo)注標(biāo)簽,一種是普通用戶給物品標(biāo)注標(biāo)簽,也就是UGC(User Generated Content)。UGC的標(biāo)簽系統(tǒng)可以用來表示用戶興趣和物品語義。社會化標(biāo)簽[13]可以看作用戶與物品之間的紐帶,將原本不相關(guān)的項目聯(lián)系起來,既表達了用戶自身的興趣愛好,又反映了物品的主題。
基于標(biāo)簽的推薦系統(tǒng)一般應(yīng)用在音樂網(wǎng)站、視頻網(wǎng)站和電影書籍評論網(wǎng)站中,最具代表性的網(wǎng)站有Delicious、Last.fm和豆瓣等。標(biāo)簽系統(tǒng)的最大優(yōu)勢是可以發(fā)揮群體智能,獲取對物品內(nèi)容信息比較準(zhǔn)確的關(guān)鍵詞描述,而準(zhǔn)確的內(nèi)容信息是提升個性化推薦系統(tǒng)性能的重要資源[14]。
基于標(biāo)簽的推薦算法通常使用用戶標(biāo)注項目的頻率反映用戶的興趣,用戶使用標(biāo)簽的次數(shù)越多,則代表該用戶越喜歡標(biāo)簽代表的特定項目類別。Ignatov等[15]將標(biāo)簽頻率分析應(yīng)用于標(biāo)簽推薦算法中,用來發(fā)現(xiàn)用戶的興趣。Gedikli等[16]認(rèn)為應(yīng)該在項目的上下文中考慮標(biāo)簽偏好,并提出了一種在推薦過程中利用上下文的標(biāo)簽偏好的推薦方案。但是以上研究沒有考慮到由于用戶標(biāo)注標(biāo)簽的隨意性導(dǎo)致的標(biāo)簽信息稀疏問題。由于用戶個體不同,用戶對相同項目的理解不同,導(dǎo)致不同的用戶對相同的項目標(biāo)記的標(biāo)簽會有所不同,從而導(dǎo)致標(biāo)簽信息的稀疏性。因此,僅通過用戶-標(biāo)簽和項目-標(biāo)簽的匹配程度來衡量用戶相似度和項目相似度是不準(zhǔn)確的。趙宇峰等[17]通過標(biāo)簽聚類降低標(biāo)簽稀疏度,進而提高推薦精度。除此之外還存在以下現(xiàn)象:用戶給物品標(biāo)注的標(biāo)簽不同,但是在語義上可能相近。針對這種現(xiàn)象需要對標(biāo)簽進行語義分析。在語義分析方面,可以利用基于WordNet詞典的方法。顏偉等[18]提出了一種基于WordNet的英語詞語相似度計算方法,從WordNet中提取同義詞并采取向量空間方法計算英語詞語的相似度。
在上述研究的基礎(chǔ)上,本文提出了一種標(biāo)簽擴展的協(xié)同過濾推薦算法。本文通過擴展標(biāo)簽來緩解標(biāo)簽信息稀疏問題,提高算法推薦精度。利用標(biāo)簽相似度進行標(biāo)簽擴展,計算標(biāo)簽相似度的方法有2種:一種是基于用戶標(biāo)注標(biāo)簽的行為進行計算,另一種是根據(jù)標(biāo)簽的語義進行計算?,F(xiàn)有的標(biāo)簽擴展方法多數(shù)是根據(jù)標(biāo)簽共現(xiàn)計算基于用戶行為的標(biāo)簽相似度實現(xiàn)的,未充分考慮標(biāo)簽的語義相似度。因此,本文從用戶行為和標(biāo)簽語義2方面考慮,分別運用標(biāo)簽共現(xiàn)和WordNet詞典計算標(biāo)簽相似度。通過結(jié)合基于用戶行為的標(biāo)簽相似度和基于標(biāo)簽語義的標(biāo)簽相似度,進一步提升標(biāo)簽擴展的效果,進而提升推薦算法的性能。
傳統(tǒng)基于標(biāo)簽的推薦算法,利用標(biāo)簽頻率反映用戶的興趣。但是,用戶標(biāo)注標(biāo)簽的隨意性,可能會導(dǎo)致出現(xiàn)以下2種情況:
(1)標(biāo)簽t1被用于標(biāo)注項目ij,標(biāo)簽t2也被用于標(biāo)注項目ij,相同的項目ij被用戶標(biāo)注了不同的標(biāo)簽t1和t2。
(2)用戶u1為項目ij標(biāo)注了標(biāo)簽t1,用戶u2為項目ij標(biāo)注了標(biāo)簽t2,用戶為項目ij標(biāo)注了不同的標(biāo)簽t1和t2,雖然標(biāo)簽t1和t2不相同,但在語義層面表達了相近的意思。
上述問題導(dǎo)致了在利用標(biāo)簽進行推薦時,與標(biāo)簽相關(guān)的用戶-標(biāo)簽和項目-標(biāo)簽矩陣稀疏,從而導(dǎo)致推薦精度下降。
為了降低矩陣稀疏度,提高推薦算法的精度,本文提出了標(biāo)簽擴展的思想。在進行標(biāo)簽擴展時,需要先進行標(biāo)簽相似度計算。在計算標(biāo)簽相似度時,根據(jù)情況(1)和情況(2)的描述,本文從用戶行為和標(biāo)簽語義2方面進行標(biāo)簽相似度計算。
用戶為相同的項目標(biāo)注了不同的標(biāo)簽,根據(jù)用戶的行為,本文利用標(biāo)簽共現(xiàn)的思想計算標(biāo)簽相似度。利用標(biāo)簽共現(xiàn)來表示標(biāo)簽相似度的基本思想是:如果2個標(biāo)簽在項目中同時出現(xiàn)的次數(shù)越多,則這2個標(biāo)簽的相似度就越高。
用戶為項目標(biāo)注了不同的標(biāo)簽,但標(biāo)簽在語義上相同,根據(jù)標(biāo)簽語義,本文利用語義分析的思想計算標(biāo)簽相似度。利用語義分析計算標(biāo)簽相似度的基本思想是:判斷詞語之間的相似度。本文利用WordNet語義詞典在信息處理方面的優(yōu)勢,將WordNet應(yīng)用到標(biāo)簽的語義分析中,用于計算標(biāo)簽相似度。
綜上所述,本文提出了一種標(biāo)簽擴展的協(xié)同過濾推薦算法。該算法的流程如下所示:
(1)根據(jù)數(shù)據(jù)集構(gòu)建項目-標(biāo)簽矩陣,并創(chuàng)建標(biāo)簽集合。
(2)利用標(biāo)簽共現(xiàn)信息,計算標(biāo)簽共現(xiàn)矩陣,得到基于用戶行為的標(biāo)簽相似度矩陣。
(3)根據(jù)標(biāo)簽集合并利用WordNet語義詞典計算基于標(biāo)簽語義的標(biāo)簽相似度矩陣。
(4)結(jié)合基于用戶行為和標(biāo)簽語義的標(biāo)簽相似度矩陣,并利用標(biāo)簽相似度矩陣進行標(biāo)簽擴展,重構(gòu)項目-標(biāo)簽矩陣。
(5)利用重構(gòu)后的項目-標(biāo)簽矩陣計算項目相似度,并通過基于項目的協(xié)同過濾方法進行推薦。
本文所用的數(shù)據(jù)集示例如表1所示。正如前面提到的,用戶個體不同會導(dǎo)致不同用戶對相同項目標(biāo)注的標(biāo)簽不同,因此本文根據(jù)用戶標(biāo)注標(biāo)簽的行為,通過標(biāo)簽共現(xiàn)思想來整合標(biāo)簽之間的相似度。標(biāo)簽共現(xiàn)就是指用2個標(biāo)簽標(biāo)注同一個項目,如標(biāo)簽t1和t2共同標(biāo)注了某一個項目,則稱標(biāo)簽t1和t2共現(xiàn)。
不同用戶可能為相同項目標(biāo)注不同的標(biāo)簽。正如表1所示,用戶20對電影1 747所標(biāo)注的標(biāo)簽為politics和satire,而用戶49對電影1 747 所標(biāo)記的標(biāo)簽為Robert De Niro。
網(wǎng)站中的用戶組成了用戶集合U= {u1,…,um},網(wǎng)站中的商品組成了商品(項目)集合I={i1,…,in},用戶對商品標(biāo)注的標(biāo)簽組成了標(biāo)簽集
Table 1 Data format
合T= {t1,…,tk}。根據(jù)以上信息構(gòu)建標(biāo)注矩陣K,K的大小為n*k,n為項目個數(shù),k為標(biāo)簽個數(shù),矩陣中的元素kpj表示標(biāo)簽tp標(biāo)注商品ij的次數(shù)。根據(jù)矩陣K構(gòu)建共現(xiàn)矩陣C,C的大小為k*k,k為標(biāo)簽個數(shù),矩陣中的元素cpq表示標(biāo)簽tp與標(biāo)簽tq標(biāo)注同一個商品的頻率。本文通過余弦相似度來評估每2個標(biāo)簽的共現(xiàn)分布,即:
(1)
其中,nti,ij表示標(biāo)簽tp標(biāo)注項目ij的數(shù)目,ntq,ij表示標(biāo)簽tq標(biāo)注項目ij的數(shù)目。N(tp)表示標(biāo)簽tp標(biāo)注的項目集合,N(tq)表示標(biāo)簽tq標(biāo)注的項目集合。N(tp)∩N(tq)表示標(biāo)簽tp和標(biāo)簽tq共同標(biāo)注的項目集合。p(tp,tq)在[0,1],且p(tp,tq)越接近1,tp和tq越相似。
通過式(1)得到標(biāo)簽共現(xiàn)矩陣,本文將標(biāo)簽共現(xiàn)矩陣作為基于用戶行為的標(biāo)簽相似度矩陣?;谟脩粜袨榈臉?biāo)簽相似度矩陣C的表達形式如式(2)所示:
(2)
由于用戶個體不同,導(dǎo)致用戶為項目標(biāo)注的標(biāo)簽可能不同,但某些標(biāo)簽可能在語義上相近。本文利用WordNet語義詞典在信息處理方面的優(yōu)勢,將WordNet應(yīng)用到標(biāo)簽的語義分析中,計算標(biāo)簽的相似度。利用WordNet計算標(biāo)簽t1和t2的相似度的過程如下所示:
(1)利用Stanford CoreNLP和Lemmatization對標(biāo)簽進行預(yù)處理。
(2)利用WordNet分別生成(t1,t2)的同義詞集(s1,s2)。
(3)對每個同義詞集檢索注釋并利用文本預(yù)處理方法(拆分、刪除停用詞、詞性標(biāo)注、詞形還原)為s1和s2提取注釋G1和G2。
(4)基于集合之間相同的詞匯數(shù)量越多,相似度越高的思想,根據(jù)s1和s2、G1和G2計算標(biāo)簽t1和t2之間的語義相似度。
具體的流程如圖1所示。
Figure 1 Calculation flow chart of tag similarity圖1 標(biāo)簽相似度計算流程圖
利用s1和s2、G1和G2計算標(biāo)簽相似度的公式如式(3)所示:
(3)
通過上述方法計算出2個標(biāo)簽的語義相似度,得到基于語義的標(biāo)簽相似度矩陣N。N的表示形式如式(4)所示:
(4)
將得到的基于用戶行為的標(biāo)簽相似度矩陣C和基于標(biāo)簽語義的標(biāo)簽相似度矩陣N進行合并,合并公式如式(5)所示:
sim(ti,tj)=α*p(ti,tj)+
(1-α)simT(ti,tj)
(5)
其中,系數(shù)α是用于調(diào)節(jié)的合并權(quán)重。經(jīng)過式(5)得到合并后的標(biāo)簽相似度矩陣M。M的表達形式如式(6)所示:
(6)
在得到標(biāo)簽相似度矩陣M后,利用M進行標(biāo)簽擴展。
大多數(shù)使用標(biāo)簽的推薦算法都會考慮到用戶-標(biāo)簽和項目-標(biāo)簽之間的關(guān)系。但是,由于用戶為項目標(biāo)注標(biāo)簽的隨意性,會導(dǎo)致標(biāo)簽信息稀疏;由于標(biāo)簽的多樣性,會導(dǎo)致標(biāo)簽信息稀疏,因此,利用項目-標(biāo)簽衡量項目相似度是不準(zhǔn)確的。所以,本文提出了一種擴展標(biāo)簽的方法,通過利用標(biāo)簽相似度矩陣產(chǎn)生的標(biāo)簽之間的關(guān)聯(lián),評估用戶未使用的標(biāo)簽的可能頻率來進行標(biāo)簽擴展,從而降低標(biāo)簽信息的稀疏度。
對于已經(jīng)標(biāo)注項目ij但沒有標(biāo)注項目ii的標(biāo)簽tz,根據(jù)標(biāo)簽tz與標(biāo)注到項目ii上的所有標(biāo)簽共現(xiàn)分布,估計標(biāo)簽tz標(biāo)注到項目ii上的可能概率。概率估計公式如式(7)所示:
(7)
(8)
其中,Ni表示標(biāo)注項目ii的標(biāo)簽總數(shù),nt,i表示標(biāo)簽tt標(biāo)注項目ii的次數(shù)。
通過上述方法,本文對項目-標(biāo)簽矩陣進行了標(biāo)簽擴展,重建了項目-標(biāo)簽矩陣,降低了該矩陣的稀疏度。
在得到重建后的項目-標(biāo)簽矩陣R后,利用余弦相似度計算項目之間的相似度得到項目相似度矩陣S。項目相似度的計算公式如式(9)所示:
(9)
其中,Ti,j表示在矩陣R中項目ii和項目ij共有的標(biāo)簽集合。Ti表示標(biāo)記項目ii的標(biāo)簽集合,Tj表示標(biāo)記項目ij的標(biāo)簽集合。simiz表示標(biāo)簽tz標(biāo)記項目ii的概率,simjz表示標(biāo)簽tz標(biāo)記項目ij的概率。在得到項目相似度矩陣之后,利用基于項目的協(xié)同過濾算法為用戶生成推薦。
實驗采用MovieLens數(shù)據(jù)集,該數(shù)據(jù)集含有電影的標(biāo)簽數(shù)據(jù)。為了驗證本文算法的效率,在2個基準(zhǔn)數(shù)據(jù)集上進行實驗。較小的數(shù)據(jù)集為ml-latest-small,該數(shù)據(jù)集由164 979部電影和671個用戶組成,含有1 296個標(biāo)簽記錄。較大的數(shù)據(jù)集為ml-10M100K,該數(shù)據(jù)集由71 567個用戶和10 681部電影組成,含有95 580個標(biāo)簽。本文按照8∶2的比例將數(shù)據(jù)集分成訓(xùn)練集和測試集。
準(zhǔn)確率(Precision),其值表示的是在產(chǎn)生的推薦結(jié)果中,正確推薦給用戶的項目數(shù)在推薦給用戶的項目總數(shù)中的占比,如式(10)所示:
(10)
召回率(Recall),其值表示的是在產(chǎn)生的推薦結(jié)果中,正確推薦給用戶的項目數(shù)在用戶實際評價過的項目總數(shù)中的占比,如式(11)所示:
(11)
其中,R(u)是用戶u推薦的項目集合,T(u)是測試集中用戶u評分過的項目集合。
3.3.1α的選擇
在式(5)中系數(shù)α用于調(diào)節(jié)相似度權(quán)重,用來調(diào)節(jié)標(biāo)簽相似度權(quán)重變化對于推薦算法的推薦準(zhǔn)確率的影響,其取值在[0,1],每次增加0.1比較Precision的變化,實驗結(jié)果如圖2所示。
Figure 2 Effect of α on Precision圖2 α對準(zhǔn)確率的影響
由圖2可知,當(dāng)α的取值為0.3時,Precision值最大,推薦的準(zhǔn)確率最高。本文實驗中,α取值為0.3。
3.3.2 算法性能比較
為了驗證標(biāo)簽相似度的改變對于推薦算法的推薦精度的影響,本文將通過標(biāo)簽共現(xiàn)進行標(biāo)簽擴展的協(xié)同過濾CTCF(Collaborative Filtering of tag extension based on Tag Co-occurrence)和結(jié)合標(biāo)簽共現(xiàn)與WordNet進行標(biāo)簽擴展的協(xié)同過濾CWTCF(Collaborative Filtering of tag extension based on Tag Co-occurrence and WordNet)進行比較分析。實驗結(jié)果如圖3和圖4所示。
Figure 3 Performance of CTCF and CWTCF on ml-latest-small圖3 CTCF和CWTCF在ml-latest-small上的性能
Figure 4 Performance of CTCF and CWTCF on ml-10M100K圖4 CTCF和CWTCF在ml-10M100K上的性能
由圖3和圖4可知,相較于只使用標(biāo)簽共現(xiàn)進行標(biāo)簽擴展的協(xié)同過濾或只使用WordNet進行標(biāo)簽擴展的協(xié)同過濾而言,將標(biāo)簽共現(xiàn)和WordNet進行結(jié)合再利用標(biāo)簽擴展進行協(xié)同過濾的推薦算法的Precision有所提高。由此可知,在利用標(biāo)簽相似度進行標(biāo)簽擴展時,應(yīng)從用戶行為和標(biāo)簽語義這2方面考慮,本文通過標(biāo)簽共現(xiàn)思想得到基于用戶行為的標(biāo)簽相似度矩陣,通過標(biāo)簽語義得到基于語義相似度的標(biāo)簽相似度矩陣,將2個相似度矩陣進行融合,并在此基礎(chǔ)上進行標(biāo)簽擴展,降低數(shù)據(jù)稀疏度,進行協(xié)同過濾,提高了推薦精度。
接著為了驗證本文提出算法的性能,本文選取3種算法與本文算法進行比較。
算法1:傳統(tǒng)的基于項目的協(xié)同過濾推薦ItemCF(Item Collaborative Filtering)算法。
算法2:Guan[5]提出的3DCF(3-Dimension Collaborative Filtering)算法,利用用戶和項目的特征進行相似度計算來處理數(shù)據(jù)稀疏問題。
算法3:Gedikli等[16]提出的Item-specific算法,在項目上下文中考慮標(biāo)簽偏好對推薦的影響。
不同算法性能比較如表2~表5所示。
由表2~表5可知,相較于傳統(tǒng)的ItemCF算法,其他3種算法的性能更高,因為這3種算法都在ItemCF基礎(chǔ)上進行了一定程度的改進。另外,可以觀測到,Item-specific算法的性能比3DCF的更高,可能的原因是Item-specific算法將標(biāo)簽應(yīng)用到了以協(xié)同過濾為基礎(chǔ)的推薦算法之中,可以更好地反映用戶的興趣。除此之外,本文算法的性能相較于其他3種算法都高,相較于3DCF在降低數(shù)據(jù)稀疏度時僅僅考慮用戶和項目特征,本文在降低數(shù)據(jù)稀疏度時充分考慮了標(biāo)簽數(shù)的作用,相較于Item-specific僅僅在項目上下文中考慮標(biāo)簽偏好,本文算法利用標(biāo)簽數(shù)據(jù)降低了數(shù)據(jù)稀疏度,綜上本文算法的性能更好,推薦精度更高。
Table 2 Precision of four algorithms on ml-latest-small
Table 3 Recall of four algorithms on ml-latest-small
Table 4 Precision of four algorithms on ml-10M100K
Table 5 Recall of four algorithms on ml-10M100K
大多數(shù)利用用戶、項目與標(biāo)簽之間的關(guān)系進行推薦的算法,都會面臨著用戶個體不同導(dǎo)致的標(biāo)簽信息稀疏問題,因此,本文進行標(biāo)簽擴展,重構(gòu)項目-標(biāo)簽矩陣,進行協(xié)同推薦,在進行標(biāo)簽擴展時從用戶行為和標(biāo)簽語義2方面進行考慮。最終的實驗結(jié)果表明,本文提出的推薦算法相較于傳統(tǒng)的協(xié)同過濾算法的推薦效果更好。