劉 宇朱文浩
(1.武漢郵電科學(xué)研究院 武漢 430070)(2.南京烽火星空通信發(fā)展有限公司 南京 210019)
信息和互聯(lián)網(wǎng)技術(shù)發(fā)展至今,人們逐漸從找不到自己所需信息的信息匱乏時代發(fā)展到現(xiàn)在的信息過載的時代,因此從大量的信息中找到自己感興趣的信息就變成了一件非常困難的事。推薦系統(tǒng)正是為了解決這一問題而出現(xiàn)的,它是可以主動從大量的信息中獲取用戶感興趣的信息,進而推薦給用戶的系統(tǒng),一方面幫助用戶發(fā)現(xiàn)對自己有價值的信息,另一方面讓信息能夠展示在對它感興趣的用戶面前[1]。近年來,推薦系統(tǒng)已經(jīng)被廣泛的運用到電子商務(wù)、電影和視頻網(wǎng)站、個性化音樂網(wǎng)絡(luò)電臺、社交網(wǎng)絡(luò)、個性化閱讀和個性化郵件等各個領(lǐng)域[2],分別將這些不同物品的信息根據(jù)用戶的興趣推薦給用戶。
目前基本的推薦算法主要包括基于協(xié)同過濾的算法、基于內(nèi)容的推薦算法和基于標簽的推薦算法[3]。
基于協(xié)同過濾的推薦算法又可以分為基于用戶的協(xié)同過濾算法和基于內(nèi)容的協(xié)同過濾算法。基于用戶的協(xié)同過濾利用和用戶興趣相似的其他用戶,給用戶推薦那些和他們興趣愛好相似的用戶喜歡的物品;基于物品的協(xié)同過濾即利用用戶喜歡過的物品,給用戶推薦與他喜歡的物品相似的物品[4]。協(xié)同過濾可以增加推薦的新穎性,但是當(dāng)用戶對物品的評價信息較少時,推薦效果則不是很好,即協(xié)同過濾算法存在冷啟動問題[5]。此外,協(xié)同過濾推薦算法由于是利用的歷史行為和喜好,在給用戶推薦物品時就無法給出令人信服的理由,因此在可解釋性問題上也存在缺陷。
基于內(nèi)容的推薦算法與協(xié)同過濾算法不同,它利用的是物品的內(nèi)容信息,通過抽取物品的內(nèi)容信息來描述物品來形成物品的特征屬性,從而得到物品之間的相似度,進而根據(jù)用戶過去對物品的喜好,給用戶推薦與其喜好相似的物品[6]。而目前,在音樂、電影等物品的推薦系統(tǒng)中,由于其內(nèi)容抽取比較困難,所以基于內(nèi)容的推薦算法不能得到有效的利用,因而通常被用于基于文本的物品,此時,物品的內(nèi)容可以通過向量空間模型表示,將物品表示成一個關(guān)鍵詞向量,而文本形式的內(nèi)容則需要經(jīng)過分詞、提取和內(nèi)容特征的處理等過程[7],從而生成關(guān)鍵詞向量,過程也極為復(fù)雜。所以基于內(nèi)容的推薦算法沒有得到廣泛的應(yīng)用。
標簽是用戶用來描述物品信息的關(guān)鍵詞,是用戶對物品信息的高度概括。在基于標簽的推薦系統(tǒng)中,標簽是聯(lián)系用戶和物品之間的紐帶。帶有用戶的主觀性,因此通過標簽得到的物品之間的相似度比基于分詞和內(nèi)容抽取的物品信息更能代表用戶的興趣。基于標簽的推薦系統(tǒng)通過分析物品的標簽信息和用戶對標簽的使用偏好之間的相似行形成三元組(用戶、物品、標簽)[8]?;跇撕灥耐扑]系系統(tǒng)同樣依賴用戶的歷史行為,因此也存在冷啟動的問題。
上述的三種推薦算法雖然在推薦系統(tǒng)中應(yīng)用得較多,但是它們各自都缺點,如基于內(nèi)容的推薦算法無法處理音頻、視頻等多媒體非結(jié)構(gòu)化數(shù)據(jù)[9];協(xié)同過濾和基于標簽的推薦算法則分別存在可解釋性問題和冷啟動問題。結(jié)合基于標簽的推薦算法和基于內(nèi)容的推薦算法二者的優(yōu)點,同時引入標簽權(quán)重來提高推薦系統(tǒng)的準確率,本文提出了一種基于標簽權(quán)重的內(nèi)容推薦算法(TW-ContentItem)。
在第二節(jié)中提到基于內(nèi)容的推薦算法大多用于文本的推薦,而從文本中得到到關(guān)鍵詞向量需要經(jīng)過分詞、實體檢測、關(guān)鍵詞排名等一系列階段,使用起來較為復(fù)雜,而且在非文本的推薦系統(tǒng)中,物品的關(guān)鍵詞信息提取很難提取[10]。因此可以結(jié)合標簽,以用戶給物品打的標簽作為電影、音樂等的關(guān)鍵詞,形成關(guān)鍵詞向量,從而可以更方便地計算物品之間的相似度,而不需要經(jīng)歷上述復(fù)雜的提取和內(nèi)容特征的處理過程。
傳統(tǒng)的標簽系統(tǒng)在描述物品時給出標簽特征,而對不同物品的描述,不同標簽對物品特征體現(xiàn)的程度可能不同,所以標簽權(quán)重在這個基礎(chǔ)上做出了擴展,在給出標簽特征的同時還會給出該標簽在描述物品時對應(yīng)的權(quán)重。
在應(yīng)用標簽權(quán)重時,首先假設(shè)用戶在為相似的物品打標時會用相同的標簽[11],則根據(jù)用戶與標簽的關(guān)系及物品和標簽的關(guān)系可以分別利用兩種標簽權(quán)重:物品標簽權(quán)重和用戶標簽權(quán)重。對于不同的物品,標簽可以看成是物品的內(nèi)容屬性,那么可以理解為標簽對物品的重要性與物品打上標簽的次數(shù)有關(guān),同一標簽打得越多,對物品來說越是重要,這就是物品標簽權(quán)重;用戶標簽權(quán)重則與用戶使用某一標簽的頻率有關(guān),標簽使用越頻繁則權(quán)重越大[12]。
為了用實現(xiàn)用標簽表示物品的內(nèi)容屬性得到物品的標簽權(quán)重,對于物品d,其內(nèi)容表示成一個關(guān)鍵詞向量為
其中t為標簽,w為標簽對應(yīng)的權(quán)重。
物品標簽權(quán)重可以用TF-IDF公式來計算得到:
在計算物品權(quán)重時,可以將每一個物品視為一個文檔ti,令D={d1,d2,d3,…,dj,…}表示一個文檔的集合,而T={t1,t2,t3,…,tj,…}表示詞典,即物品被打上的所有標簽的集合,也就是視為在文檔集里面的標簽集合[10]。由此便可以利用式(2)計算出標簽的權(quán)重。
與物品標簽權(quán)重類似,用戶標簽權(quán)重也可以用式(2)計算,這時詞典T表示的是用戶使用的所有標簽的集合。由于本文主要用到物品標簽權(quán)重,這里不再贅述。
在基于內(nèi)容的推薦算法中,由于部分標簽的流行的較高,所以被使用的頻率較高,因此次標簽對物品來說區(qū)分度較低,因此該標簽的權(quán)重較低[13],為了減少這類標簽的影響,引入標簽權(quán)重,在生成關(guān)鍵詞向量時加入標簽的權(quán)重,另外,即使同一個標簽,對不同的物品的重要性也可能并不相同[14],因此引入不同物品的標簽權(quán)重從很大程度上能夠提高推薦系統(tǒng)的準確率。
引入標簽權(quán)重的另一個優(yōu)點是對冷啟動問題不敏感,因為當(dāng)一個新的物品加入時,會有帶有一些有關(guān)物品基本信息的標簽,總會有其他的物品包含這些標簽,那么該物品就能夠在更多人的推薦列表中出現(xiàn),從而使物品能夠擴散開來。也正是標簽帶有物品的基本信息[15]。
在可解釋性方面,基于內(nèi)容的推薦算法本身就有很好的可解釋性,因為就是根據(jù)物品的內(nèi)容屬性來推薦的,同樣的引入的標簽,讓用戶根據(jù)他自己的興趣選擇相關(guān)的標簽,得到推薦結(jié)果,使用戶更容易覺得系統(tǒng)的推薦有道理。
在第二章通過標簽權(quán)重得到物品的標簽權(quán)重向量之后,就可以通過向量之間的余弦相似度公式得到物品之間兩兩的相似度。
計算物品di和dj之間的相似度公式為
即向量之間的余弦相似度,式中wti和wtj為標簽t的權(quán)值,T為兩個物品之間共有標簽的集合。在推薦系統(tǒng)中計算物品之間的相似度矩陣最簡單的方法是對任意兩兩物品都用上述的公式計算相似度[16]。
雖然運用式(3)來計算物品兩兩之間的相似度實現(xiàn)起來較為簡單,但是可以看到當(dāng)有N個物品,每個物品平均由m個標簽表示,那么用上面簡單方法的復(fù)雜度為O(N2m),這個時間復(fù)雜度是非常高的。不僅如此,實際上很多物品相互之間并沒有被打上相同的標簽。而系統(tǒng)中若兩兩之間計算相似度會將很多時間浪費在計算這種沒有共同標簽的物品的相似度上[4]。
因此在實際應(yīng)用中為了減少時間復(fù)雜度,可以利用物品-標簽倒排表如圖1、圖2所示,對于每個標簽都保存使用過該標簽的物品列表。建立標簽-物品倒排表之后,建立一個相似度矩陣W[18],如圖3所示。當(dāng)兩個物品同時打上一個標簽時W[u][v]的值加1,如A、C同時打上了標簽a、b則W[A][C]=2。依此類推,掃描完所有標簽之后,就可以得到最終的物品相似度矩陣W,矩陣中的w是余弦相似度中的分子部分,將其除以分母就可以得到最終的余弦相似度。
圖1 物品-標簽
圖2 標簽-物品倒排
圖3 相似度矩陣分子
實際中由于添加了標簽權(quán)重,需要對倒排進行改進,即W[u][v]的值應(yīng)該是u、v兩個物品共同標簽對應(yīng)的權(quán)重的乘積之和。令wui和wvi分別為標簽i在物品u和物品v標簽列表中對應(yīng)的權(quán)重,T為u、v物品所共有標簽的集合,du、dv分別為u、v的相似度向量。則用倒排序的方法得出物品u、v之間的相似度為
通過這種方法來計算相似度能夠很大程度上減少計算量,并且改進之后加入標簽權(quán)重的影響,使其準確率有很大的提高。
得到物品的推薦列表主要有以下兩個步驟:
1)計算物品之間的相似度;
2)根據(jù)物品相似度和用戶歷史行為及給用戶生成推薦列表。
在4.2節(jié)中已經(jīng)可以得到物品之間的相似度列表,下面是得到用戶對物品的興趣度及推薦列表的具體方法。
計算用戶u對物品j的興趣公式:
這里的N(u)是用戶喜歡物品的集合(在本寫系統(tǒng)中指的是用戶打過標簽的物品),S(j,k)是和物品j最相似的k個物品的集合(與j之間兩兩相似度最高的k個物品),wij是物品j和i的相似度,rui(對于隱反饋數(shù)據(jù)集,如果用戶u對物品i有過行為,即可令rui=1[4])是用戶u對物品i的興趣,則當(dāng)rui=1時用戶u對物品j的興趣就是對i、j之間的相似度wji。對求得的興趣進行排序取前N個物品就是所求的Top-N排序。
式(5)在理論上是可行的,但是數(shù)據(jù)量過大時,要得到用戶u對所有物品的興趣并排序,其時間復(fù)雜度極高,且用戶對大部分的物品的興趣度可能接近0。為此在使用式(5)之前,可以先對數(shù)據(jù)進行預(yù)處理,即確定鄰近值k后,先根據(jù)用戶u的興趣列表J(u)(假設(shè)列表個數(shù)為m),分別找到與列表中物品相似的k個物品,然后對這m*k個物品使用式(5)得到推薦列表可以減小時間復(fù)雜度。
Delilious是最早應(yīng)用標簽系統(tǒng)的,它允許用戶給互聯(lián)網(wǎng)上的每個網(wǎng)頁打標簽,從而能夠從各個方面準確的描述網(wǎng)頁這個“物品”[19],而本文需要的也是用標簽來描述物品的內(nèi)容屬性,所以該數(shù)據(jù)集滿足算法的需求。在本文中運用了該數(shù)據(jù)集的兩組數(shù)據(jù):
1)bookmark_tags.dat:{用戶id,標簽id,標簽權(quán)重};
2)user_taggedbookmarks-timestamps.dat:{用戶id,物品id,標簽id}。
從數(shù)據(jù)集的上述兩個文件中可以得到計算用戶偏好的四元組:
M={用戶id,物品id,標簽id,標簽權(quán)重}
推薦的目的就是給用戶推薦其最感興趣的物品,因此本文得到物品的相似度之后采用的是topN推薦,而測評指標則是準確率(Precision),通過選取不同長度N的推薦列表可以全面測評實驗算法的準確率[20]。
對用戶u推薦的N個物品(記為R(u)),令用戶u在測試集上喜歡的物品集合為T(u),則準確率可以表示為
對比的另外兩種算法為基于內(nèi)容的推薦算法和基于標簽的推薦算法。
本文將標簽與基于內(nèi)容的推薦算法相結(jié)合,并利用標簽權(quán)重來提高推薦算法的準確率,利用倒排及預(yù)處理來降低算法的時間復(fù)雜度。
基于內(nèi)容的推薦算法中,選取的鄰近值k是一個很關(guān)鍵的參數(shù)。表1為不同k值下得到的推薦系統(tǒng)的準確率。
表1 TW-ContentItem推薦算法在不同k值下的準確率
從表1可以發(fā)現(xiàn)當(dāng)k=10時系統(tǒng)的準確率明顯高于其他的值。
選取基于物品的協(xié)同過濾算法(ItemCF)和基于標簽的推薦算法(ItemTags)來進行對照。以準確率為測評指標,取k=10,通過選取不同長度N的推薦列表,與本文的推薦算法(TW-ContentItem)進行對比,實驗結(jié)果如圖4所示。
圖4 不同算法準確率比較
從圖4中可以看到,在選取的物品鄰近數(shù)k都取相同的值時,本文提出的算法在選取不同的N值時的準確率明顯高于其他兩種。
本文結(jié)合傳統(tǒng)的基于內(nèi)容的推薦算法和基于標簽的推薦算法,并引入標簽權(quán)重,提出了一種基于內(nèi)容和標簽權(quán)重的混合推薦算法。提高了推薦系統(tǒng)的準確率,并且省去了基于內(nèi)容的推薦算法在音樂、電影等推薦系統(tǒng)中應(yīng)用時繁雜的內(nèi)容提取過程。同時,由于基于內(nèi)容的推薦算法是基于物品自身的內(nèi)容屬性推薦的,結(jié)合標簽權(quán)重之后,對冷啟動問題也不會很敏感,此外,基于內(nèi)容和標簽的推薦算法二者分別利用了物品的內(nèi)容屬性和特征,在可解釋性方面也優(yōu)與其他的推薦算法。