張萌, 紀(jì)佳琪
(河北民族師范學(xué)院, 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院, 河北, 承德 067000)
隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),日益增長(zhǎng)的數(shù)據(jù)信息使得人們?cè)陔娪熬W(wǎng)站獲取電影資源的效率變低,這就要求我們的網(wǎng)站盡可能根據(jù)用戶留下的信息去分析用戶可能感興趣的電影資源并推薦給用戶[1]。傳統(tǒng)的推薦算法有很多種,基于物品的推薦算法,基于用戶的推薦算法等,而近年來(lái)基于標(biāo)簽的推薦算法逐漸應(yīng)用于多個(gè)領(lǐng)域[2-3]。將基于標(biāo)簽的算法應(yīng)用于現(xiàn)實(shí)電影推薦系統(tǒng)中可以為用戶帶來(lái)很大的便利,也可間接地促進(jìn)電影產(chǎn)業(yè)的發(fā)展[4]。
推薦算法的目的是聯(lián)系用戶和物品,標(biāo)簽推薦算法中的標(biāo)簽是聯(lián)系用戶和物品的媒介。標(biāo)簽推薦算法的原理是進(jìn)行用戶興趣建模,需要根據(jù)訓(xùn)練數(shù)據(jù)構(gòu)建矩陣得出用戶對(duì)所有物品的喜好程度矩陣,在得到的計(jì)算結(jié)果中選取前K個(gè)推薦給用戶。
用戶對(duì)一個(gè)標(biāo)簽的認(rèn)可度可以使用二元關(guān)系來(lái)表示,這種關(guān)系只有“是”“否”兩種結(jié)果,實(shí)際上難以準(zhǔn)確地表達(dá)出用戶對(duì)物品的喜好程度。因此,我們可以用連續(xù)數(shù)值來(lái)表示用戶對(duì)物品的喜好程度,范圍在0~1之間,便于對(duì)喜好程度進(jìn)行區(qū)分和排序。
用戶對(duì)標(biāo)簽的喜好程度計(jì)算式為
(1)
式中,分子為用戶對(duì)物品的評(píng)分score與物品與標(biāo)簽的相關(guān)度rel乘積之和,分母為物品與標(biāo)簽相關(guān)度的和,u代表用戶,m代表電影,t代表標(biāo)簽。
下面對(duì)具體計(jì)算過(guò)程進(jìn)行說(shuō)明。
例如:有1位用戶、3部電影和3個(gè)標(biāo)簽。由圖1可得,用戶u對(duì)電影1、電影2和電影3的評(píng)分分別為4分、6分和8分(例子中最高設(shè)定為10分)。
圖1 用戶u對(duì)電影的評(píng)分score(u,m)
由圖2可以看出,電影1與標(biāo)簽a的相關(guān)度為0.5,與標(biāo)簽b的相關(guān)度為0.7,與標(biāo)簽c的相關(guān)度為0.4。由圖3可以看出,電影2與標(biāo)簽a的相關(guān)度為0.3,與標(biāo)簽b的相關(guān)度為0.6,與標(biāo)簽c的相關(guān)度為0.8。
圖2 電影1與標(biāo)簽的相關(guān)度rel(1,t)
圖3 電影2與標(biāo)簽的相關(guān)度rel(2,t)
由圖4可以看出,電影3與標(biāo)簽a的相關(guān)度為0.4,與標(biāo)簽b的相關(guān)度為0.7,與標(biāo)簽c的相關(guān)度為0.6。
圖4 電影3與標(biāo)簽的相關(guān)度rel(3,t)
根據(jù)式(1)得到用戶u對(duì)標(biāo)簽a的喜好程度ratio(u,a)為
(4×0.5+6×0.3+8×0.4)/(0.5+0.3+0.4)=5.83
用戶u對(duì)標(biāo)簽b的喜好程度ratio(u,b)為
(4×0.7+6×0.6+8×0.7)/(0.7+0.6+0.7)=6
用戶u對(duì)標(biāo)簽c的喜好程度ratio(u,c)為
(4×0.4+6×0.8+8×0.6)/(0.4+0.8+0.6)=6.22
式(1)適用于用戶評(píng)分行為較多的情況,假設(shè)一個(gè)用戶對(duì)標(biāo)簽的評(píng)分行為較少,那么用上面的公式就會(huì)導(dǎo)致推薦結(jié)果產(chǎn)生相對(duì)比較大的誤差。
比如當(dāng)用戶u只對(duì)電影1給出了評(píng)分時(shí),根據(jù)式(1)可計(jì)算得到:
用戶u對(duì)標(biāo)簽a的喜好程度為4×0.5/0.5=4
用戶u對(duì)標(biāo)簽b的喜好程度為4×0.7/0.7=4
用戶u對(duì)標(biāo)簽c的喜好程度為4×0.4/0.4=4
(2)
根據(jù)式(2)重新計(jì)算用戶對(duì)標(biāo)簽的喜好程度ratio(u,t),式(2)中加入的平滑因子k是一個(gè)不確定的值,在本節(jié)中將平滑因子k取1。由此可以得出:
用戶u對(duì)標(biāo)簽a的喜好程度ratio(u,a)為
(4×0.5+6×0.3+8×0.4+6×1)/(0.5+0.3+0.4+1)=5.91
用戶u對(duì)標(biāo)簽b的喜好程度ratio(u,b)為
(4×0.7+6×0.6+8×0.7+6×1)/(0.7+0.6+0.7+1)=6
用戶u對(duì)標(biāo)簽c的喜好程度ratio(u,c)為
(4×0.4+6×0.8+8×0.6+6×1)/(0.4+0.8+0.6+1)=6.14
假設(shè)用戶u只對(duì)電影1給出了評(píng)分時(shí),根據(jù)式(2)可計(jì)算出用戶u對(duì)標(biāo)簽a、b、c的喜好程度分別為5.18、5.33、5.43。優(yōu)化后即使用戶對(duì)物品評(píng)分行為較少的情況下誤差也縮小了很多。在評(píng)分信息正常的情況下,式(2)計(jì)算得到的用戶對(duì)標(biāo)簽的喜好程度順序沒(méi)有發(fā)生變化。
2.1和2.2計(jì)算的是用戶對(duì)標(biāo)簽的喜好程度,是從用戶的角度進(jìn)行分析。一個(gè)標(biāo)簽如果被用戶標(biāo)記的次數(shù)越多,則說(shuō)明該用戶對(duì)標(biāo)簽的依賴程度越大。因此本小節(jié)使用TF-IDF算法來(lái)計(jì)算每個(gè)標(biāo)簽的權(quán)重,用這個(gè)權(quán)重來(lái)表達(dá)用戶對(duì)標(biāo)簽的依賴程度。TF-IDF算法的中心思想是:如果某一個(gè)詞語(yǔ)在一篇文章中出現(xiàn)的頻率TF比較高,同時(shí)在其他文章中出現(xiàn)的頻率比較低,那么這個(gè)詞語(yǔ)就很可能反映了這篇文章的特性,TF為詞語(yǔ)出現(xiàn)的頻率,IDF為逆文檔頻率[5]。TF-IDF所表達(dá)的實(shí)際上是TF與IDF的乘積。
計(jì)算用戶u對(duì)標(biāo)簽t的依賴程度,首先計(jì)算TF值即用戶u使用標(biāo)簽t標(biāo)記的頻率:
(3)
式中,分子部分表示用戶u使用標(biāo)簽t標(biāo)記的次數(shù),分母部分表示用戶u使用所有標(biāo)簽標(biāo)記的次數(shù)之和。
計(jì)算IDF值:
(4)
最終,用戶對(duì)標(biāo)簽的依賴程度計(jì)算公式為
TF-IDF(u,t)=TF(u,t)×IDF(u,t)
(5)
用戶u對(duì)標(biāo)簽的興趣度Tu的計(jì)算公式為
Tu=ratio(u,t)×TF-IDF(u,t)
(6)
在標(biāo)簽系統(tǒng)中,每個(gè)物品都可以被看作與其相關(guān)的標(biāo)簽的集合。標(biāo)簽基因可用來(lái)表示標(biāo)簽與物品之間的關(guān)系,采用標(biāo)簽基因可以為每個(gè)物品計(jì)算出一個(gè)標(biāo)簽向量[6]。
例如2.1中電影1的標(biāo)簽基因?yàn)殡娪?分別與標(biāo)簽a、標(biāo)簽b和標(biāo)簽c的相關(guān)度組成的矩陣,即Ti=[0.5,0.3,0.4]。電影1、電影2和電影3的標(biāo)簽基因矩陣如表1所示。
表1 電影的標(biāo)簽基因矩陣Ti
根據(jù)訓(xùn)練數(shù)據(jù)可以構(gòu)建所有物品的標(biāo)簽基因矩陣Ti和用戶對(duì)標(biāo)簽的興趣度矩陣Tu。Tu的計(jì)算方式在2.3已經(jīng)給出說(shuō)明,按照上述計(jì)算方式構(gòu)建矩陣Tu。
計(jì)算標(biāo)簽基因矩陣Ti需首先計(jì)算用戶與標(biāo)簽的相關(guān)度。例如有3部電影A、B、C,3個(gè)標(biāo)簽a、b、c。有如下幾條數(shù)據(jù):用戶1為電影A評(píng)分,對(duì)應(yīng)標(biāo)簽為a;用戶2為電影A評(píng)分,對(duì)應(yīng)標(biāo)簽為a;用戶2為電影B評(píng)分,對(duì)應(yīng)標(biāo)簽為a;用戶3為電影A評(píng)分,對(duì)應(yīng)標(biāo)簽為b;用戶3為電影A評(píng)分,對(duì)應(yīng)標(biāo)簽為c。根據(jù)以上數(shù)據(jù)構(gòu)建,見(jiàn)表2電影、標(biāo)簽、用戶關(guān)系對(duì)應(yīng)表。進(jìn)而可以構(gòu)建,見(jiàn)表3電影與標(biāo)簽對(duì)應(yīng)關(guān)系矩陣,矩陣中的數(shù)字表示對(duì)某部電影評(píng)分同時(shí)賦予對(duì)應(yīng)標(biāo)簽的用戶數(shù)量(如表3矩陣中數(shù)字2表示對(duì)電影A評(píng)分,對(duì)應(yīng)標(biāo)簽為a的用戶數(shù)量為2)。
表2 電影、標(biāo)簽、用戶關(guān)系對(duì)應(yīng)表
表3 電影與標(biāo)簽對(duì)應(yīng)關(guān)系矩陣
計(jì)算電影A與標(biāo)簽a的相關(guān)度為2/(2+1+1)=0.5。同理,可以計(jì)算出所有電影與標(biāo)簽對(duì)應(yīng)的相關(guān)度。
根據(jù)物品與標(biāo)簽的相關(guān)度數(shù)據(jù)構(gòu)建物品的標(biāo)簽基因矩陣Ti,由于電影與標(biāo)簽數(shù)據(jù)過(guò)多,本文在計(jì)算電影與標(biāo)簽的相關(guān)度時(shí),只要電影有對(duì)應(yīng)的標(biāo)簽就將相關(guān)度標(biāo)記為1,否則標(biāo)記為0。
綜上,則用戶對(duì)物品的喜好程度矩陣T(u,i)計(jì)算公式為
(7)
第2部分介紹標(biāo)簽推薦算法的數(shù)學(xué)建模過(guò)程,本部分將標(biāo)簽推薦算法應(yīng)用于具體數(shù)據(jù)集中,為不同用戶推薦喜好程度較高的電影,同時(shí)得到推薦算法的準(zhǔn)確度。本實(shí)驗(yàn)將推薦準(zhǔn)確度作為算法評(píng)價(jià)指標(biāo)。
推薦準(zhǔn)確度的計(jì)算公式為
(8)
式中,|R(u)|表示推薦電影的個(gè)數(shù),|T(u)|表示在訓(xùn)練的數(shù)據(jù)集中用戶有過(guò)評(píng)分行為的電影個(gè)數(shù),|R(u)∩T(u)|表示推薦的電影與所有評(píng)過(guò)分的電影相交的個(gè)數(shù)。
本實(shí)驗(yàn)中使用的數(shù)據(jù)集是MovieLens中的ml-latest-small數(shù)據(jù)集,主要用到ratings.csv、tags.csv和tags1.csv三個(gè)數(shù)據(jù)。其中,包含了610位用戶對(duì)9 742部電影的100 836條評(píng)分記錄,用到3 683條標(biāo)簽數(shù)據(jù)。ratings.csv數(shù)據(jù)用到3列:用戶編號(hào)userID、電影編號(hào)movieID和用戶對(duì)電影的評(píng)分weight。tags.csv數(shù)據(jù)用到3列:用戶編號(hào)userID、藝術(shù)家編號(hào)artistID以及標(biāo)簽編號(hào)tagID。
由于實(shí)驗(yàn)中使用的是數(shù)值型的標(biāo)簽ID,因此對(duì)tags.csv中的tagID一列做數(shù)據(jù)處理。將字符串型tagID數(shù)據(jù)轉(zhuǎn)換為數(shù)值型數(shù)據(jù),同時(shí)要將artistID一列重命名為movieID,最終得到數(shù)據(jù)tags1.csv。表4展示了3個(gè)數(shù)據(jù)中每列數(shù)據(jù)分別包含的數(shù)量。
表4 用戶評(píng)分標(biāo)簽數(shù)據(jù)對(duì)應(yīng)數(shù)量
本節(jié)選取實(shí)驗(yàn)結(jié)果中289號(hào)用戶的推薦結(jié)果進(jìn)行說(shuō)明,其他用戶推薦結(jié)果原理相同。
表5為289號(hào)用戶推薦電影的結(jié)果。從表5可以看出,本次共為289號(hào)用戶推薦了5部電影,推薦結(jié)果為第一部是ID為3的電影,289號(hào)用戶對(duì)電影3的喜好程度為9.398 259 021 019 065。第二部是ID為1101的電影,289號(hào)用戶對(duì)電影1101的喜好程度為3.066 156 427 847 680 7。第三部是ID為34405的電影,289號(hào)用戶對(duì)電影34405的喜好程度為3.066 156 427 847 680 7。第四部是ID為82459的電影,289號(hào)用戶對(duì)電影82459的喜好程度為 3.066 156 427 847 680 7。第五部是ID為96861的電影,289號(hào)用戶對(duì)電影96861的喜好程度為3.066 156 427 847 680 7。通過(guò)數(shù)據(jù)觀察到用戶對(duì)電影的喜好程度是由高到低排序的,根據(jù)喜好程度優(yōu)先為用戶推薦相應(yīng)的電影。
表5 289號(hào)用戶推薦結(jié)果
本次推薦的準(zhǔn)確度為0.4,代表本次為289號(hào)用戶推薦的5部電影中有2部電影是用戶有過(guò)評(píng)分行為的。
3.3的結(jié)果展示是為任意一位用戶推薦電影的準(zhǔn)確度,整個(gè)實(shí)驗(yàn)的數(shù)據(jù)是對(duì)多位用戶進(jìn)行多次推薦。因此本節(jié)對(duì)不同K值下所有用戶的推薦準(zhǔn)確度取平均值進(jìn)行分析,K值取5到20。(保留三位小數(shù))
如圖5所示,K值取5時(shí)得到的推薦準(zhǔn)確度平均值為0.586,K值取20時(shí)得到的推薦準(zhǔn)確度平均值為0.372。K的取值在5到20區(qū)間時(shí),推薦數(shù)量K值越大,推薦準(zhǔn)確度越低。
圖5 K值與推薦準(zhǔn)確度關(guān)系圖
計(jì)算得到K的多個(gè)取值下推薦準(zhǔn)確度的值,最終將所有推薦準(zhǔn)確度的值求取平均值得到標(biāo)簽推薦算法的推薦準(zhǔn)確度為0.453。
本文首先對(duì)基于標(biāo)簽的推薦算法進(jìn)行了介紹,并闡述了標(biāo)簽推薦算法的計(jì)算過(guò)程,重點(diǎn)是根據(jù)用戶與標(biāo)簽的關(guān)系計(jì)算出用戶對(duì)電影的喜好程度,最終按照喜好程度的高低將前K部電影推薦給用戶。將標(biāo)簽推薦算法應(yīng)用于電影推薦系統(tǒng)可以優(yōu)化電影網(wǎng)站的推薦準(zhǔn)確度,為用戶帶來(lái)便利,提高用戶對(duì)電影網(wǎng)站的好感度。