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