張忠海,夏 宇,2*,楊舒波
(1. 江西師范大學(xué)地理與環(huán)境學(xué)院,330022,南昌;2. 鄱陽湖濕地與流域研究教育部重點(diǎn)實(shí)驗(yàn)室,330022,南昌)
信息過載使用戶難以快速地從現(xiàn)有信息中獲取感興趣的信息[1],推薦系統(tǒng)在極大程度上緩解了這個(gè)問題。現(xiàn)有研究表明,融合情景的推薦結(jié)果明顯優(yōu)于非情景信息的推薦結(jié)果[2-3]。移動(dòng)定位技術(shù)的發(fā)展,使得用戶的位置信息、身份信息、周圍的人以及這些信息的變化很容易獲取,并以位置為核心,這構(gòu)成了最初的情景信息[4]。Brown認(rèn)為時(shí)間、溫度和季節(jié)等也會(huì)對(duì)用戶產(chǎn)生影響[5],此后用戶的情緒[6]、用戶感興趣的對(duì)象[7]以及身體狀況[8]等被加入到情景信息。隨著情景維度的增多,不同用戶對(duì)同一項(xiàng)目的評(píng)價(jià)可能在2個(gè)完全不同的情景下完成,這種情況下直接使用經(jīng)典協(xié)同推薦很容易得到錯(cuò)誤的用戶相似度,低維的個(gè)性化推薦算法無法直接適用于高維的個(gè)性化推薦。為了解決這個(gè)問題,一些研究從情景預(yù)過濾的角度分析,主要在于進(jìn)一步提高用戶相似度的精度,如在情景相似的前提下,計(jì)算用戶相似度[9-10];對(duì)項(xiàng)目的內(nèi)容特征進(jìn)行聚類[11-12];或以不同的權(quán)重綜合考慮多種相似度[13-14]。這些研究在預(yù)過濾的前提下進(jìn)行協(xié)同推薦,使用戶的可用數(shù)據(jù)急劇下降,冷啟動(dòng)問題更加突出,對(duì)于用戶數(shù)據(jù)原本較少的領(lǐng)域,如旅游領(lǐng)域,算法難以適用,對(duì)用戶偏好的研究不足,無法動(dòng)態(tài)地適應(yīng)情景變化。近年來對(duì)情景建模的推薦算法研究逐漸增加,對(duì)語義分析和情景的影響考慮得更加細(xì)致,包括用戶情感方向和特殊情景下對(duì)用戶行為的抑制等[15],建模過程復(fù)雜,用戶偏好的改變或興趣漂移,會(huì)使算法成本顯著增加,情景建模需要大量文檔數(shù)據(jù),模型精度依賴于文本解析算法的精度,算法更適用于基于屬性的個(gè)性化推薦。基于上述分析,本文提出一種適應(yīng)情景變化的推薦算法,在經(jīng)典協(xié)同推薦的基礎(chǔ)上,通過計(jì)算用戶對(duì)情景的效用,以情景效用補(bǔ)償情景變化的影響,動(dòng)態(tài)地適應(yīng)情景變化,不用進(jìn)行復(fù)雜的建模和計(jì)算,不會(huì)降低數(shù)據(jù)的利用率,算法適用性強(qiáng)。
適應(yīng)情景變化的協(xié)同推薦算法分為情景效用評(píng)價(jià)和評(píng)分預(yù)測(cè)2個(gè)階段:情景效用評(píng)價(jià)發(fā)生在推薦前,對(duì)每一個(gè)具體用戶,計(jì)算用戶對(duì)情景的效用,量化用戶對(duì)情景的偏好;評(píng)分預(yù)測(cè)時(shí)比較當(dāng)前情景和歷史情景的差異,在經(jīng)典協(xié)同推薦算法[16]的基礎(chǔ)上,通過情景效用調(diào)整用戶在當(dāng)情景下對(duì)目標(biāo)項(xiàng)目的評(píng)分。本文引入用戶情景效用概念,給出計(jì)算情景效用的有效方法,并提出了一種適應(yīng)情景變化的協(xié)同推薦模型和算法。實(shí)驗(yàn)表明,本算法可以動(dòng)態(tài)地適應(yīng)情景變化,并能有效的提高推薦質(zhì)量。
行為學(xué)認(rèn)為,人自身的狀態(tài)和所處環(huán)境狀態(tài)的相關(guān)參數(shù)都被考慮在內(nèi)之后,人的行為具有相對(duì)穩(wěn)定的偏好[17]??梢酝ㄟ^對(duì)數(shù)據(jù)統(tǒng)計(jì)分析,定量研究影響用戶行為的因素,來把握用戶的行為[18-19],這說明用戶的行為是可以度量的[20-21],這種行為往往反應(yīng)用戶的偏好。經(jīng)典的協(xié)同推薦并不分析用戶偏好,僅在計(jì)算用戶相似度后,根據(jù)公式將滿足要求的用戶項(xiàng)目推薦給目標(biāo)用戶,但此時(shí)的情景與當(dāng)時(shí)的情景可能有很大不同,直接推薦可能并不符合用戶需求,需要根據(jù)情景差異進(jìn)行調(diào)整。事實(shí)上,經(jīng)典協(xié)同推薦只考慮了用戶對(duì)項(xiàng)目的興趣度,并沒有考慮情景變化對(duì)用戶的影響。
不同領(lǐng)域?qū)η榫叭狈y(tǒng)一的表達(dá),本文從現(xiàn)有研究中選擇項(xiàng)目情景、用戶情景、商業(yè)情景、社會(huì)情景、時(shí)間情景、物理情景和網(wǎng)絡(luò)情景等作為本文考慮的主要情景,并將每種情景劃分為不同的子情景,按層次樹結(jié)構(gòu)進(jìn)行組織,如圖1。情景層次化有助于情景的擴(kuò)展,能夠更好地適應(yīng)不斷變化的上下文環(huán)境。
圖1 情景層次樹模型
將情景(指子情景,下同)作為影響用戶評(píng)分的單位,同一情景的具體情況不同對(duì)用戶的影響也有差異,如當(dāng)一些游客選擇旅游景點(diǎn)時(shí),距離的遠(yuǎn)近可能對(duì)游客產(chǎn)生不同程度的影響??紤]要計(jì)算用戶對(duì)情景的效用,所選取的情景應(yīng)是具有一般性、穩(wěn)定性的主要情景,如項(xiàng)目的位置、價(jià)格和商業(yè)環(huán)境的服務(wù)、質(zhì)量等,進(jìn)一步將所考慮的情景細(xì)分為若干個(gè)類別,不同的類別對(duì)用戶的影響是不同的,對(duì)子情景進(jìn)行分類,如表1。對(duì)于每個(gè)用戶,從表中選取影響該用戶的若干個(gè)主要情景。
表1 子情景分類
本文引入經(jīng)濟(jì)學(xué)中的基數(shù)效用論,用效用度量用戶消費(fèi)的滿足程度。偏好的差異導(dǎo)致效用的差異,可以通過用戶效用來反映用戶偏好。在推薦領(lǐng)域,效用可以視為用戶對(duì)項(xiàng)目的評(píng)分,由項(xiàng)目和項(xiàng)目所處情景決定,用戶的最終評(píng)分表現(xiàn)為用戶對(duì)項(xiàng)目效用和對(duì)各情景效用的疊加,當(dāng)各分效用已知時(shí),就可以求出用戶對(duì)具體項(xiàng)目的總效用。
設(shè)項(xiàng)目i的所有情景分類為Ti={ti,1,ti,2,…,ti,j},ti,j= {0,1},用戶對(duì)所有情景下不同分類的效用為kj= {k1,k2, …,kj}。根據(jù)基數(shù)效用論,用戶對(duì)項(xiàng)目的效用可以用如下公式表示:
Si=∑nj=1kjti,j
(1)
式中:ti,j取值1或0,表示存在或不存在,同一時(shí)間一個(gè)情景下最多只能有一個(gè)分類存在;kj表示用戶對(duì)ti,j的效用,Si表示用戶對(duì)項(xiàng)目i的總效用,即評(píng)分。如用戶在選擇旅游景點(diǎn)時(shí)主要考慮距離和價(jià)格2個(gè)情景,并且用戶對(duì)距離的效用為近(2)、一般(1)、遠(yuǎn)(0),對(duì)價(jià)格的效用為低(3)、一般(2)、高(1),對(duì)其它情景效用為0,則用戶對(duì)距離近且價(jià)格一般的景點(diǎn)的總效用為:2×1+1×0+0×0+3×0+2×1+1×0+0×0+…=4。
當(dāng)i=1,2,3,…,m時(shí),與線性最小二乘法的基本公式一致:
∑nj=1Xi,jβj=yi
(2)
式中:m表示等式個(gè)數(shù),n表示未知數(shù)個(gè)數(shù),m>n,通過m個(gè)實(shí)測(cè)值可以求得使殘差平方和最小的β值,即可以根據(jù)m條用戶數(shù)據(jù)求得用戶對(duì)情景的效用。
本文在經(jīng)典協(xié)同推薦基礎(chǔ)上進(jìn)行改進(jìn),將算法分為預(yù)測(cè)階段和調(diào)整階段。預(yù)測(cè)階段使用經(jīng)典算法進(jìn)行預(yù)測(cè),首先根據(jù)所有用戶和項(xiàng)目構(gòu)建用戶項(xiàng)目-矩陣,然后根據(jù)用戶-項(xiàng)目矩陣計(jì)算用戶之間的相似度,最后根據(jù)公式(3)計(jì)算出用戶對(duì)項(xiàng)目的預(yù)測(cè)值,本文相似度計(jì)算采用皮爾遜相關(guān)系數(shù)。
用戶u對(duì)項(xiàng)目i的評(píng)分預(yù)測(cè)公式如下:
(3)
計(jì)算出用戶對(duì)項(xiàng)目的評(píng)分后,進(jìn)一步考慮當(dāng)前情景與歷史情景的差異,調(diào)整用戶對(duì)項(xiàng)目的評(píng)分。分析公式(1),對(duì)于相同項(xiàng)目i,不同的情景t和c有:
Si,c=Si,t+∑nj=1kj(cj-tj)
(4)
式中:Si,t表示情景t下用戶的總效用;Si,c表示情景c下用戶的總效用。
適應(yīng)情景變化的推薦算法:
輸入:目標(biāo)用戶數(shù)據(jù),其他用戶數(shù)據(jù);
輸出:目標(biāo)用戶的推薦集;
偽碼描述:
1: Input current user data (u,i,c);
2: forMitemi%M表示參與效用計(jì)算的數(shù)據(jù)量;
圖2 適應(yīng)情景變化的協(xié)同推薦
3: build I×C matrixC(i,c);%構(gòu)建項(xiàng)目-情景矩陣;
4:build U×I matrixR(u,i);%構(gòu)建用戶-項(xiàng)目矩陣;
5:for all itemsi;
6:User utility:k(u,j)=pinv(C(i,c))*R(u,i)';%j表示用戶效用的個(gè)數(shù);
7:for all neighbor usersb;
8:for common itemsi;
9:sim(a,b)=
10:forallitemsi;
11:ifsim(u,i)>δ%δ表示相似度閾值;
13:forallp(u,i);
14:S(u,i)=P(u,i)+∑j=1k(u,j)×(cj-tj);
15:returnTopN(S(u,i))。
實(shí)驗(yàn)的硬件環(huán)境為Inter(R) Core (TM) i5-7300HQ CPU @2.50GHz 2.50GHz,8G內(nèi)存。軟件環(huán)境為Windows10,Matlab2017a,算法使用Matlab腳本語言編寫。
算法通過解超定方程的方式來擬合用戶的情景效用,用戶數(shù)據(jù)必須大于所考慮的所有情景類別個(gè)數(shù)。采用模擬數(shù)據(jù)的方式進(jìn)行仿真實(shí)驗(yàn)[22-24]可用于評(píng)價(jià)復(fù)雜情景感知推薦算法[25],能避免實(shí)際數(shù)據(jù)中存在的稀疏性和冷啟動(dòng)等問題,更好地驗(yàn)證算法的有效性??紤]到一些領(lǐng)域用戶的歷史數(shù)據(jù)量相對(duì)較少,為了保證用戶有足夠的數(shù)據(jù),選取的主要子情景數(shù)量要適中。不同領(lǐng)域,用戶所關(guān)注的情景大不相同,故實(shí)驗(yàn)考慮5個(gè)較普遍的情景,每個(gè)情景分為3個(gè)類別,共15個(gè)效用值。每個(gè)用戶對(duì)情景的偏好和每個(gè)項(xiàng)目的情景類別用隨機(jī)數(shù)函數(shù)產(chǎn)生,不同的用戶所考慮的情景不同,為了能夠統(tǒng)一表達(dá),用戶偏好可以為0,如User={p1,p2,p3,p4,p5},pi的取值為[0,5],Item={l1,l2,l3,l4,l5},li的取值為[1,3],通過公式(3)計(jì)算用戶對(duì)項(xiàng)目的評(píng)分。共模擬1 000個(gè)用戶和1 000個(gè)項(xiàng)目,每個(gè)用戶從1 000條數(shù)據(jù)中隨機(jī)選擇40個(gè)項(xiàng)目進(jìn)行評(píng)分,部分?jǐn)?shù)據(jù)如表2、表3。文獻(xiàn)[12]指出,當(dāng)鄰居數(shù)達(dá)到20時(shí),推薦結(jié)果的精度,不會(huì)隨鄰居數(shù)量增加而提高,從模擬數(shù)據(jù)中抽取至少擁有20個(gè)鄰居的用戶進(jìn)行實(shí)驗(yàn)。
表2 用戶偏好
表3 項(xiàng)目情景類別
本文采用常用的平均絕對(duì)誤差(MAE)作為度量標(biāo)準(zhǔn),MAE值越小,準(zhǔn)確性越高,設(shè)預(yù)測(cè)的用戶評(píng)分集合表示為{p1,p2, …,pN},對(duì)應(yīng)的實(shí)際用戶評(píng)分集合為{q1,q2, …,qN},則平均絕對(duì)偏差MAE定義為:
(5)
對(duì)1 000個(gè)用戶的數(shù)據(jù)進(jìn)行分析,選取其中334個(gè)符合條件的用戶。對(duì)于每個(gè)用戶,模擬1個(gè)項(xiàng)目情景作為歷史情景,根據(jù)鄰居的評(píng)分使用經(jīng)典算法來預(yù)測(cè)目標(biāo)用戶的評(píng)分;模擬3個(gè)項(xiàng)目作為當(dāng)前情景,為表現(xiàn)與歷史情景的差異,設(shè)置1個(gè)項(xiàng)目情景與歷史情景完全相同,1個(gè)項(xiàng)目情景明顯優(yōu)于歷史情景,1個(gè)項(xiàng)目情景明顯低于歷史情景,計(jì)算用戶的實(shí)際評(píng)分,部分?jǐn)?shù)據(jù)如表4。
表4 當(dāng)前項(xiàng)目與部分歷史項(xiàng)目
首先使用經(jīng)典協(xié)同推薦算法求基礎(chǔ)預(yù)測(cè)值。分別計(jì)算3種情況的MAE,相同情景、不同情景1(優(yōu)于歷史情景)和不同情景2(低于歷史情景),重復(fù)實(shí)驗(yàn)10次,如圖3。實(shí)驗(yàn)發(fā)現(xiàn):當(dāng)歷史情景與當(dāng)前情景相同時(shí),經(jīng)典的協(xié)同推薦算法有較高的推薦質(zhì)量;當(dāng)歷史情景與當(dāng)前情景差異較大時(shí),經(jīng)典推薦方法精度極不穩(wěn)定,具有隨機(jī)性。原因是,經(jīng)典推薦方法假設(shè)歷史情景與當(dāng)前情景總是相同,但實(shí)際情況往往與此不同,而當(dāng)歷史情景與當(dāng)前情景差異很大時(shí),經(jīng)典方法可能會(huì)給出錯(cuò)誤的結(jié)果。圖中橫軸表示實(shí)驗(yàn)次數(shù),縱軸表示MAE。
圖3 經(jīng)典算法不同情況下的MAE
然后計(jì)算用戶對(duì)情景的效用。效用通過解方程求取,為了保證最終的推薦質(zhì)量,需要保證用戶對(duì)情景效用的精度。用M表示參與計(jì)算的用戶數(shù)據(jù)量,本文考慮15個(gè)效用,故M≥ 15,取M等于15、20、25、30、35、40進(jìn)行實(shí)驗(yàn),使用歷史數(shù)據(jù)的觀察值進(jìn)行調(diào)整,結(jié)果如表5和圖4。研究發(fā)現(xiàn),M越大時(shí),精度越高,當(dāng)M取40時(shí),有較高的精度,實(shí)驗(yàn)最終取M=40。
表5 某用戶不同M值下的情景效用
(a) 低于當(dāng)前情景
(b) 優(yōu)于當(dāng)前情景
最后對(duì)基礎(chǔ)預(yù)測(cè)值進(jìn)行調(diào)整。從圖3可以看出,當(dāng)歷史情景與當(dāng)前情景相差很大時(shí),傳統(tǒng)算法的推薦質(zhì)量很低,但當(dāng)歷史情景與當(dāng)前情景相同時(shí),傳統(tǒng)算法有較高的推薦質(zhì)量。對(duì)圖3中不同情景1和不同情景2的預(yù)測(cè)值根據(jù)情景效用進(jìn)行調(diào)整,如圖5。
圖5 預(yù)測(cè)值調(diào)整后的MAE
可以發(fā)現(xiàn),不同情景的預(yù)測(cè)值調(diào)整之后的精度與相同情景下的預(yù)測(cè)精度十分接近,具有較高的精度。為了進(jìn)一步證明本方法的有效性,取用戶對(duì)項(xiàng)目的實(shí)測(cè)值進(jìn)行調(diào)整,其中不同情景1的第1個(gè)項(xiàng)目不用調(diào)整,不同情景2的第2個(gè)項(xiàng)目不用調(diào)整,結(jié)果如圖6??梢园l(fā)現(xiàn),當(dāng)使用實(shí)測(cè)值進(jìn)行調(diào)整時(shí),預(yù)測(cè)精度進(jìn)一步提高。結(jié)果表明,基礎(chǔ)預(yù)測(cè)階段的精度越高,調(diào)整后的精度越高。
圖6 真實(shí)值調(diào)整后的MAE
與文獻(xiàn)[9]對(duì)比,當(dāng)歷史情景與當(dāng)前情景不同時(shí),本算法明顯有更好的推薦質(zhì)量,如圖7。原因在于文獻(xiàn)[9]使用平均值來表示用戶對(duì)情景戶偏好程度,這平滑了用戶對(duì)情景的偏好,連續(xù)進(jìn)行2次相似度計(jì)算,誤差被積累,此外2次相似度計(jì)算使得計(jì)算量大大增加,相似情景下進(jìn)行用戶相似度計(jì)算會(huì)降低數(shù)據(jù)地利用率,使冷啟動(dòng)問題更加突出。
本文重點(diǎn)研究預(yù)測(cè)值如何調(diào)整以動(dòng)態(tài)地適應(yīng)情景變化。實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)歷史情景與當(dāng)前情景相同時(shí),經(jīng)典協(xié)同推薦的預(yù)測(cè)值具有較高的精度。而實(shí)際生活中,歷史情景與當(dāng)前情景往往有所差異,因此考慮情景變化能夠有效地提高推薦質(zhì)量,可以發(fā)現(xiàn),本文所提出的方法能夠很好地適應(yīng)情景變化;此外研究還發(fā)現(xiàn),當(dāng)預(yù)測(cè)階段精度越高時(shí),調(diào)整之后的精度越高;用戶的情景效用計(jì)算只依賴用戶歷史數(shù)據(jù),可以離線完成,在線階段的時(shí)間復(fù)雜度增加O(N);經(jīng)典的推薦算法作為本算法獨(dú)立的一個(gè)步驟,增加經(jīng)典算法推薦質(zhì)量的改進(jìn)也可增加本算法的推薦質(zhì)量。
圖7 適應(yīng)情景變化的協(xié)同推薦算法與不同算法比較
經(jīng)典推薦算法及眾多改進(jìn)算法無法適應(yīng)情景的變化,很少考慮當(dāng)前情景與歷史情景間的差異,對(duì)所有用戶都按照統(tǒng)一的規(guī)則進(jìn)行分析?,F(xiàn)有的個(gè)性化推薦策略采用前置過濾的方式,提高了推薦質(zhì)量,卻降低了數(shù)據(jù)利用率,使冷啟動(dòng)問題更加突出,并且無法動(dòng)態(tài)地適應(yīng)情景變化。本文在經(jīng)典推薦的基礎(chǔ)上,提出一種適應(yīng)情景變化的推薦算法,將用戶偏好轉(zhuǎn)換為用戶對(duì)情景的效用,通過用戶對(duì)情景的效用來調(diào)整歷史情景與當(dāng)前情景不同時(shí)算法的預(yù)測(cè)值,使算法能動(dòng)態(tài)地適應(yīng)情景變化,在情景變化時(shí),能做出合理的調(diào)整。本文給出的算法使用用戶歷史數(shù)據(jù)計(jì)算用戶的情景效用,根據(jù)不同情景下的效用變化來調(diào)整預(yù)測(cè)值,理論上對(duì)不同的用戶考慮不同的情景,算法能正確運(yùn)行。實(shí)驗(yàn)表明了該算法的可行性和有效性,有助于提高推薦質(zhì)量。