高 宇 廖聞劍
(1.武漢郵電科學(xué)研究院 武漢 430074)(2.南京烽火軟件科技有限公司 南京 210019)
21世紀(jì)以來(lái),互聯(lián)網(wǎng)給人們帶來(lái)了極大的便利,同時(shí)也產(chǎn)生了大量的信息,使得人們獲得又用的信息變得愈加困難,導(dǎo)致了所謂的信息過(guò)載(In?formation Overload)問(wèn)題。搜索引擎在很大程度上緩解了這個(gè)問(wèn)題,但是其提供的共性信息并不能滿足不同用戶的不同偏好。推薦系統(tǒng)的產(chǎn)生,旨在學(xué)習(xí)用戶的歷史行為數(shù)據(jù),獲取到用戶的偏好,為用戶產(chǎn)生個(gè)性化推薦。推薦系統(tǒng)算法主要有基于領(lǐng)域的算法,其中有基于用戶的協(xié)同過(guò)濾算法(User?CF)、基于物品(itemCF)的協(xié)同過(guò)濾算法、隱語(yǔ)義模型(LFM)及基于圖的模型協(xié)同過(guò)濾算法[1~2]。基于用戶(UserCF)的協(xié)同過(guò)濾算法是推薦系統(tǒng)中最古老的算法,可以說(shuō)這個(gè)算法標(biāo)志著推薦系統(tǒng)的誕生,一直以來(lái)都是推薦系統(tǒng)領(lǐng)域最著名的算法。在協(xié)同過(guò)濾算法中,確定目標(biāo)用戶的近鄰是整個(gè)算法的核心。傳統(tǒng)的利用用戶評(píng)分矩陣計(jì)算相似度的方法有余弦相似度、改進(jìn)的余弦相似度、Pearson相似度算法。通過(guò)協(xié)同過(guò)濾的思想可以看出,用戶的評(píng)分?jǐn)?shù)據(jù)越多,計(jì)算出的相似度也高,推薦算法的效果也就越好[3]。但是,在實(shí)際應(yīng)用中的推薦系統(tǒng)中,隨著電子商務(wù)規(guī)模的不斷擴(kuò)大,用戶的增加遠(yuǎn)遠(yuǎn)不及物品的增加,導(dǎo)致用戶的評(píng)分矩陣極度稀疏,為了減小數(shù)據(jù)稀疏性問(wèn)題對(duì)推薦算法效果的影響,趙長(zhǎng)偉等提出了基于混合因子矩陣分解的推薦算法,有效緩解了數(shù)據(jù)稀疏性的問(wèn)題[4];Li提出了一種基于用戶-標(biāo)簽-項(xiàng)目的通過(guò)語(yǔ)義挖掘的算法,基于圖模型和隨機(jī)游走為基礎(chǔ),達(dá)到了不錯(cuò)的推薦的效果,卻未使用到用戶的評(píng)分[5],一般的基于用戶的協(xié)同過(guò)濾算法僅僅使用用戶共同評(píng)價(jià)過(guò)的項(xiàng)目的評(píng)分,并未利用到用戶的全部評(píng)分,導(dǎo)致信息未得到充分的利用,影響了推薦算法的準(zhǔn)確度。同時(shí),由于用戶的興趣是隨時(shí)間而變化的,不同年齡,不同階段會(huì)有不同的興趣偏好,本文提出了一種融合項(xiàng)目的子信息,利用到用戶的全部評(píng)分?jǐn)?shù)據(jù),同時(shí)結(jié)合時(shí)間因素的協(xié)同過(guò)濾算法,實(shí)驗(yàn)結(jié)果顯示,改進(jìn)后的算法在精確度上較傳統(tǒng)的協(xié)同過(guò)濾算法及只考慮項(xiàng)目類(lèi)別的協(xié)同過(guò)濾算法上有明顯的提升。
傳統(tǒng)的User-based協(xié)同過(guò)濾算法過(guò)程主要如下。
步驟1):構(gòu)建用戶項(xiàng)目評(píng)分矩陣。將用戶集合U={u1,u2,…,um}對(duì)項(xiàng)目集合I={I1,I2,…,In}的評(píng)分?jǐn)?shù)據(jù)轉(zhuǎn)化為用戶項(xiàng)目評(píng)分矩陣R(m,n)中,如表1所示,rui表示用戶u對(duì)項(xiàng)目i的評(píng)分,評(píng)分值可以是若干等級(jí)評(píng)分如0~5,也可以是0~1表示用戶的某種行為如加入購(gòu)物車(chē)、瀏覽等[6~7]。
表1 用戶-項(xiàng)目評(píng)分矩陣
步驟2):計(jì)算用戶之間相似度并確定鄰居。根據(jù)用戶項(xiàng)目評(píng)分矩陣計(jì)算相似度,從而找到與某個(gè)用戶最相似的N個(gè)用戶。常見(jiàn)的計(jì)算相似度的算法如下。
余弦相似度:
改進(jìn)的余弦相似度[8]:
其中Iuv表示用戶u和用戶v共同評(píng)分過(guò)的項(xiàng)目,Rui表示用戶u對(duì)項(xiàng)目i的評(píng)分,Rvi表示用戶v對(duì)項(xiàng)目i的評(píng)分,表示用戶v評(píng)分過(guò)項(xiàng)目的平均評(píng)分。
步驟3):為目標(biāo)用戶產(chǎn)生推薦。獲取鄰居用戶v評(píng)分過(guò),而目標(biāo)用戶u未評(píng)分的項(xiàng)目i,預(yù)測(cè)用戶u對(duì)項(xiàng)目i的評(píng)分Pui。
采用的預(yù)測(cè)評(píng)分公式為
其中Nu為目標(biāo)用戶u的鄰居集合,sim(u,v)即為步驟2)中用戶u,v之間的相似度[9-10]。從傳統(tǒng)的基于用戶的協(xié)同過(guò)濾算法過(guò)程中可以看出,計(jì)算用戶之間的相似度是整個(gè)算法的核心,而在實(shí)際中,用戶間共同評(píng)分的項(xiàng)目很少,造成用戶項(xiàng)目評(píng)分矩陣稀疏,影響了計(jì)算出來(lái)的相似性的精度。傳統(tǒng)的協(xié)同過(guò)濾算法中只考慮了用戶間共同評(píng)分的項(xiàng)目,而用戶的其他項(xiàng)目的評(píng)分未得到使用,導(dǎo)致了用戶評(píng)分信息未得到充分的利用,同時(shí)用戶對(duì)每個(gè)項(xiàng)目評(píng)分時(shí)的時(shí)間、地點(diǎn)等上下文信息也沒(méi)有得到利用,而這兩個(gè)信息之間也是有緊密聯(lián)系的。
為了能充分利用用戶的評(píng)分信息,本文考慮將用戶評(píng)分的項(xiàng)目信息分解為更小的子信息,通過(guò)這些項(xiàng)目的子信息,充分挖掘用戶對(duì)子信息的興趣,發(fā)現(xiàn)用戶深層次的偏好,從而找到相似度更精準(zhǔn)的鄰居。同時(shí)項(xiàng)目子信息劃分必須保證項(xiàng)目子信息的種類(lèi)必須有限個(gè),同時(shí)能涵蓋所有的項(xiàng)目。例如,給用戶推薦計(jì)算機(jī)相關(guān)圖書(shū),根據(jù)圖書(shū)內(nèi)容信息,可將計(jì)算機(jī)圖書(shū)分為 Java、Python、Linux、數(shù)據(jù)挖掘、Spark、人工智能、軟件工程、大數(shù)據(jù)與云計(jì)算等有限個(gè)分類(lèi)。如《Spark快速大數(shù)據(jù)分析》,基于其內(nèi)容的子信息為Spark、大數(shù)據(jù)與云計(jì)算、人工智能等?;趦?nèi)容的內(nèi)部子信息可以更準(zhǔn)確地描述項(xiàng)目同時(shí)也更容易區(qū)分不同的項(xiàng)目。
假設(shè)項(xiàng)目子信息的分類(lèi)集合為A={A1,A2,…,Ai,…,An},項(xiàng)目集合為I={I1,I2,…,Ij,…,Im},每個(gè)項(xiàng)目的子屬性都包含在A中,所以推薦系統(tǒng)里面所有的項(xiàng)目特征信息可以用一個(gè)矩陣來(lái)表示,項(xiàng)目子信息矩陣表如表2所示,其中Cji表示項(xiàng)目j是否具備屬性i,如果項(xiàng)目j含有屬性i,Cji=1,如果項(xiàng)目j不含有屬性i則Cji=0。
表2 項(xiàng)目-項(xiàng)目子屬性矩陣
其中Puj表示用戶u對(duì)子屬性j的偏好程度,Pvj表示用戶v對(duì)子屬性j的偏好程度,表示用戶u對(duì)所有子屬性的平均喜好程度,表示用戶v對(duì)所有子屬性的平均喜好程度。
由于用戶的興趣隨著時(shí)間的變化而不斷在改變,所以用戶最近的評(píng)分更能反映用戶最近的興趣偏好,因此用戶的不同時(shí)間的評(píng)分對(duì)相似度計(jì)算的影響是不同的,最近的評(píng)分的影響因子更大,應(yīng)該被賦予更大的權(quán)重。根據(jù)用戶在不同時(shí)刻的評(píng)分分配不同的權(quán)重的方式主要是有模擬遺忘曲線和時(shí)間窗技術(shù)。
遺忘曲線由德國(guó)心理學(xué)家艾賓浩斯提出,研究發(fā)現(xiàn),遺忘在學(xué)習(xí)之后立即開(kāi)始,而且遺忘的過(guò)程是不均勻的。最初遺忘的速度很快,后面逐漸緩慢。
時(shí)間窗技術(shù)就是研究如何劃分有效的時(shí)間段來(lái)反映用戶在這段時(shí)間的興趣,因?yàn)槲覀兺ǔUJ(rèn)為用戶的興趣在一定時(shí)間段是穩(wěn)定的[11]。
考慮到用戶的興趣變化與記憶遺忘有很大的相似處,本文借鑒艾賓浩斯遺忘曲線來(lái)描述用戶的興趣變化,基于時(shí)間的用戶興趣度權(quán)重函數(shù)如式(7)所示:
其中Tmax為用戶評(píng)分的最晚時(shí)間,Tmin為用戶評(píng)分的最早時(shí)間,t為當(dāng)前評(píng)分時(shí)間,有e-1≤f(t)≤1。隨著時(shí)間t的增大,f(t)逐漸增大,表明如果離評(píng)分時(shí)間越近,其分配的權(quán)重也就越大,越能反映用戶的當(dāng)前興趣。
根據(jù)前面發(fā)現(xiàn)的用戶對(duì)項(xiàng)目子屬性的偏好,將時(shí)間權(quán)重引入基于項(xiàng)目子屬性的用戶相似度計(jì)算,發(fā)掘用戶對(duì)項(xiàng)目子屬性的興趣偏好,用戶u對(duì)項(xiàng)目子屬性j的興趣偏好為Puj如式(8)所示:
其中f(t)為時(shí)間遺忘函數(shù),Cij即為項(xiàng)目i是否具備子屬性j,Lui為用戶u對(duì)項(xiàng)目i的評(píng)分?;舅枷刖褪窃谟?jì)算用戶u對(duì)子屬性j的平均偏好程度時(shí),引入時(shí)間權(quán)重,將每次對(duì)子屬性的評(píng)分與對(duì)應(yīng)時(shí)間的時(shí)間權(quán)重相乘,得到改進(jìn)的用戶對(duì)子屬性的興趣偏好計(jì)算方法,此時(shí)用戶u、v的用戶-項(xiàng)目子屬性相似度計(jì)算公式為
傳統(tǒng)的計(jì)算用戶相似度的方法被廣泛證明是有效的,為了提高推薦的精確度,本文結(jié)合用戶-項(xiàng)目屬性相似度和用戶-項(xiàng)目子屬性隨時(shí)間變化的相似度,采用一個(gè)動(dòng)態(tài)平衡因子α來(lái)改進(jìn)用戶-項(xiàng)目子屬性相似度的計(jì)算,如式(10)所示:
融合用戶對(duì)項(xiàng)目子信息興趣變化的協(xié)同過(guò)濾算法流程如圖1所示。
輸入:數(shù)據(jù)集中一對(duì)訓(xùn)練集和測(cè)試集,平衡因子,最近鄰居數(shù)K
輸出:用戶u對(duì)項(xiàng)目j的預(yù)測(cè)評(píng)分
算法步驟:
Step1:根據(jù)訓(xùn)練集得到用戶-項(xiàng)目評(píng)分矩陣Rm×n;
Step2:采用Pearson相似度計(jì)算方法,計(jì)算基于項(xiàng)目評(píng)分的用戶間的相似度simPearson(u,v);
Step3:分析項(xiàng)目子屬性,確定子屬性類(lèi)別,構(gòu)建項(xiàng)目-項(xiàng)目子屬性矩陣Cmn;
Step4:引入時(shí)間權(quán)重f(t),計(jì)算用戶對(duì)各子屬性的對(duì)時(shí)間變化的偏好程度Puj(T);
Step5:計(jì)算基于項(xiàng)目子屬性的用戶興趣隨時(shí)間變化的用戶相似度;
Step6:引入平衡因子 α,綜合 simPearson(u,v)和simPT(u,v),得到改進(jìn)的用戶相似度 sim(u,v),并構(gòu)建相似度矩陣;
Step7:根據(jù)Step6得到的相似度矩陣來(lái)尋找與目標(biāo)用戶u最近的K個(gè)鄰居,選擇sim(u,v)最大的預(yù)先設(shè)定的K個(gè)用戶作為目標(biāo)用戶u的近鄰;
Step8:根據(jù)Step7中確定的目標(biāo)用戶的近鄰用戶集合V和用戶項(xiàng)目評(píng)分矩陣;
Rm×n,根據(jù)式預(yù)測(cè)目標(biāo)用戶u對(duì)項(xiàng)目j的評(píng)分;
算法結(jié)束。
為了驗(yàn)證本文提出的融合用戶對(duì)項(xiàng)目子信息興趣變化的協(xié)同過(guò)濾算法的效果,本文采用著名的MovieLens網(wǎng)站提供的數(shù)據(jù)集,該網(wǎng)站上用戶對(duì)觀看過(guò)的電影評(píng)分,評(píng)分制為1~5分,最低為1分,最高為5分,評(píng)分越高表示用戶對(duì)改電影越喜歡,同時(shí)電影分為恐怖,冒險(xiǎn),幻想,動(dòng)作,動(dòng)畫(huà),戲劇,喜劇,兒童,犯罪,紀(jì)錄片,黑色電影,音樂(lè)劇,愛(ài)情,懸疑,科幻,驚悚,戰(zhàn)爭(zhēng)和西方18個(gè)類(lèi)型[12],由于每個(gè)電影可以同時(shí)涵蓋幾種類(lèi)別,同時(shí)電影類(lèi)別也滿足我們提出的項(xiàng)目子屬性的要求,所以將電影類(lèi)別作為電影項(xiàng)目的子屬性,方便我們不用再去尋找隱藏的子屬性,更容易去驗(yàn)證本文提出的算法的效果。
本文選取MovieLens-1MB數(shù)據(jù)集,該數(shù)據(jù)集包含6040個(gè)用戶對(duì)3900部電影的1000209個(gè)評(píng)分,訓(xùn)練集合采用隨機(jī)選取的辦法,例如:訓(xùn)練集占整體數(shù)據(jù)集比重為X,則測(cè)試集占整體數(shù)據(jù)集的比重為1-X,當(dāng)X=0.8時(shí),訓(xùn)練集所占比重為80%,測(cè)試集占比為20%,此時(shí)數(shù)據(jù)稀疏度為95.53%。
由于推薦系統(tǒng)的應(yīng)用場(chǎng)景不同,所以推薦系統(tǒng)在不同方面有不同的評(píng)價(jià)指標(biāo),這些指標(biāo)有的可以定量計(jì)算,有些只能定性描述,有些可以通過(guò)離線實(shí)驗(yàn)計(jì)算,有些需要通過(guò)用戶調(diào)查獲得,還有些只能在線評(píng)測(cè)。對(duì)推薦效果的評(píng)價(jià)主要分為三種類(lèi)型:準(zhǔn)確性、多樣性、新穎性。
本文以準(zhǔn)確性為評(píng)價(jià)指標(biāo),根據(jù)平均絕對(duì)誤差(Mean Absolute Error,MAE)[13~14]來(lái)計(jì)算推薦系統(tǒng)產(chǎn)生的預(yù)測(cè)與用戶實(shí)際評(píng)分的誤差,以此來(lái)衡量推薦結(jié)果的準(zhǔn)確性,平均絕對(duì)誤差MAE公式為
對(duì)于測(cè)試集中的一個(gè)用戶u和物品i,令rui是用戶u對(duì)物品i的實(shí)際評(píng)分,而r?ui是推薦算法給出的預(yù)測(cè)評(píng)分。MAE越小,表示推薦的精度越高[15]。
實(shí)驗(yàn)1:選擇X=0.8,即數(shù)據(jù)集的80%作為訓(xùn)練集,20%作為測(cè)試集,首先根據(jù)傳統(tǒng)的推薦算法得到MAE值最小時(shí)的K值,從圖2可以看出當(dāng)K值為35時(shí),傳統(tǒng)算法下平均絕對(duì)誤差值最小,因此我們選擇K為35,以便接下來(lái)的研究。
圖2 不同平衡因子下的MAE
實(shí)驗(yàn)2:選擇K值為35,測(cè)試不同平衡因子對(duì)改進(jìn)的推薦算法的精準(zhǔn)度的影響,實(shí)驗(yàn)結(jié)果如圖3所示,當(dāng)平衡因子為為0.2時(shí),改進(jìn)的推薦算法下的平均絕對(duì)誤差最小。
圖3 不同K值下的MAE
實(shí)驗(yàn)3:此時(shí),選取平衡因子=0.2,對(duì)不同K值下的傳統(tǒng)推薦算法和本文提出的改進(jìn)的推薦算法的效果進(jìn)行比較。結(jié)果如圖4所示,實(shí)驗(yàn)結(jié)果顯示,改進(jìn)的推薦算法在不同K值下的預(yù)測(cè)評(píng)分精準(zhǔn)度均高于傳統(tǒng)的基于Pearson相似度計(jì)算的推薦算法,且本文提出的改進(jìn)算法在平衡因子為0.2,最近鄰居為30時(shí),評(píng)分預(yù)測(cè)的平均誤差最小,推薦的效果達(dá)到最優(yōu)。
圖4 不同K值下兩種算法下的MAE
本文通過(guò)試驗(yàn)設(shè)計(jì),探討了融合用戶對(duì)項(xiàng)目子信息興趣變化的協(xié)同過(guò)濾算法的推薦性能。介紹了從基于用戶-項(xiàng)目子屬性的隨時(shí)間變化的興趣偏好的設(shè)計(jì)思路以及實(shí)驗(yàn)步驟,直到確定了一些重要參數(shù)如平衡因子和最近鄰居數(shù)值K,最后將本文提出的改進(jìn)的推薦算法與傳統(tǒng)的算法效果進(jìn)行比較。研究發(fā)現(xiàn),當(dāng)平衡因子為0.2時(shí),融合用戶對(duì)項(xiàng)目子信息興趣變化的協(xié)同過(guò)濾算法推薦的效果最好,當(dāng)鄰居數(shù)小于30時(shí),該算法的推薦質(zhì)量隨著最近鄰居數(shù)的增大而增大,當(dāng)鄰居數(shù)大于30后,改算法的推薦質(zhì)量隨著最近鄰居數(shù)的增大而緩慢減小并趨于平穩(wěn)。在算法的整體精準(zhǔn)度的比較上,本文提出的推薦算法的MAE值都小于傳統(tǒng)的基于Pear?son相似度計(jì)算的推薦算法,在數(shù)據(jù)稀疏性問(wèn)題上,本文提出的改進(jìn)算法的推薦效果更好。