周文樂,朱 明,陳天昊
(中國科學技術大學自動化系,合肥 230027)
互聯網為廣大用戶提供了海量的影視資源,但也給用戶獲取真正感興趣的資源帶來困難。個性化推薦系統有針對性地向用戶推薦,提升用戶使用感受,提高資源利用率,成為當今研究的熱點話題。主流推薦系統常用方法有基于內容的推薦、協同過濾推薦及2種組合的推薦等[1]。
基于內容的推薦技術是最早的推薦方法[2]。基于內容的推薦利用關鍵詞向用戶推薦歷史記錄的相似項目。這類方法是基于句法的,沒有考慮語義級別的含義。所以只能推薦與用戶歷史記錄包含的屬性值完全相同的項目,導致了基于內容的推薦技術過度專業化。推薦結果缺乏新穎性,不能給用戶帶來新的驚喜。協同過濾推薦技術[3]是目前應用非常廣泛的技術。基于內存的協同過濾用相似統計方法得到與目標用戶有相似興趣的鄰居用戶,并將最相似的用戶歷史點播作為推薦源,推薦目標用戶未看過的電影。基于模型的方法根據用戶歷史記錄得到一個模型,再用此模型進行預測。協同過濾存在評價稀疏,新資源或新用戶加入的冷啟動問題。且不同用戶可能因為相同選擇標準選擇不同電影,或出于不同目的選擇相同電影,沒考慮用戶的選擇偏好,所以準確率較低。以上方法結合的[4]思路是,先根據協同過濾得到相似用戶歷史記錄,再得到待推薦電影集。統計用戶感興趣的關鍵詞,利用關鍵詞過濾待推薦集,得到結果。這類方法準確度有所提高,但仍無法解決稀疏性、冷啟動、過度專業化等問題。為克服以上問題,本文提出一種基于網站聚合和語義知識的推薦方法,提高準確度,并用于實時推薦。
聚合是指通過人工或技術方式,將互聯網上的海量信息進行收集、挑選、分析、歸類,從而將相關鏈接內容分類聚合,為網民提供更具針對性的信息。
本體定義是“給出構成相關領域詞匯的基本術語和關系,以及利用這些術語和關系構成的規定這些詞匯外延的規則的定義”[5]。本體模型是概念化模型,目標是捕獲相關領域的知識構造領域概念模型,明確描述領域涉及的概念、概念的含義及概念之間的關系,為簡單的術語賦予明確的背景知識[6]。
為衡量結構性上下文相似性,基于“2個對象是相似的,如果與它們關聯對象相似”思想的SimRank算法被提出[7],例如圖1所示,有向箭頭表示網頁可鏈接至另一網頁。教授A、B都與Univ關聯,則兩者之間有一定的相似性。同理,StudentA、B也有一定相似性。文獻[7]給出相似度計算公式式(1)。在有向圖G中,節點A指向節點表示為Oi(A),節點B指向節點為Oj(B),C為衰減因子,一般取為0.8。

圖1 SimRank關聯示例圖

本文根據用戶歷史記錄,利用網站聚合,獲取用戶歷史項目中每部電影在其他網站上的所有相關推薦,作為待推薦集。本文利用網絡爬蟲采集數據,爬蟲基于Java庫HTMLParser Libraries,這種方式比直接利用正則表達式提取網頁信息有更強的復用性[8]。本 文 用 到 HTMLParser Libraries 中 的htmlparser.jar包。訪問節點的方法采用Filer模式,對不同的網站分別設置過濾條件,對每個節點進行過濾,返回符合規則的節點列表,從而解析得到所需要的電影的相關信息,其中包括每部電影的推薦電影。最后,將在各個網站采集到的信息,利用電影名和上映日期2項作為關鍵字進行去重,將去重的結果存儲到數據庫中。通過網站聚合建立源數據庫有以下優點:(1)整合資源。很多網站都會向用戶推薦電影,且推薦結果不盡相同。將每個網站推薦的資源匯總起來,可豐富源數據庫。(2)運算量少。聚合網站直接采集信息,相比協同過濾查找相似用戶的計算量大為減少,也克服了協同過濾中評價矩陣稀疏和系統啟動初期用戶數量較少的問題。(3)時效性強。可以根據被聚合網站的更新及時地將新電影信息更新至源數據庫。
基于本體論概念,抽象出用戶普遍關注的電影信息并進行描述,構建電影的本體模型。在傳統方法中,導演、演員等是不可分屬性,如果兩個演員不是同一個人,則相似度判斷為0。事實上,觀眾會認為某兩個導演或演員有一定相似性。進而兩部電影的導演或者主演之間有一定的相似性,則用戶可能會因為喜歡一部電影而對另一部電影產生興趣。本文分析觀眾對影人的相似度判斷規律,將影人的性別、年齡、國籍等信息,以及主要作品類型和共同合作過的影人作為相似度判斷標準。電影屬性本體如表1所示。

表1 電影屬性本體
在傳統推薦算法中,相似度計算主要有2種方式:(1)分別計算項目每個屬性的相似度,再對各個屬性相似度求算數平均數。(2)先將項目的信息進行向量化,即用一個向量表征某個項目。對于2部電影中所有出現過的屬性值,若某個項目含有此屬性值,則向量中相應元素置為1,否則為0。最后對表征2部影片的2個向量進行余弦相似度計算。但是,在實際應用中,考慮到不同的用戶對某一屬性的偏好,即用戶對某一屬性的重視程度是不同的,而這2種傳統方法存在的共同問題都是沒有考慮到用戶的偏好差異。
本文在計算2部電影之間的相似度時,考慮用戶不同的偏好。首先分別計算每個屬性的相似度,再對各個屬性相似度求加權算數平均數。例如某一個用戶在選擇電影時,首先選擇自己最喜歡的電影類型——動作片,則在計算相似度時,相應的TYPE屬性權重應該較大。而某個用戶最喜歡某個導演,他對這個導演或者跟這個導演風格相似的導演所拍攝的電影可能感興趣,則對于這個用戶,DCT屬性的權重應相應增大。以下討論相似度計算公式和各屬性權重的計算方法。
3.3.1 相似度計算公式
本文將 2部電影分別表示為 M1,M2,Mi={yeari,TYPEi,woni,loci,DCTi,ACTi,TAGi,rangei},i=1,2。用sim(propertyj)表示2部電影在第j個屬性上的相似度,wj,j=1,2,…,8 代表每個屬性的權重;sim(x1,x2)表示某個屬性上,2個屬性值之間的相似度。則兩部電影相似度計算公式為:

其中,每個屬性的相似度計算方法如下:
(1)某些用戶喜歡最新上映的電影,而一些用戶則偏愛老電影,所以電影上映時間也會成為用戶選擇的依據。設定如果2個電影年代相差不大(本文設定為不超過5年),則認為完全相似,否則相差越大,相似性越小。

(2)某些用戶在選擇電影時,其他用戶對該電影的評分可能會影響他們對電影的選擇,所以本文加入對評分相似度的計算。評分相似度sim(range)計算利用式(4):

(3)求取2部電影類型相似度sim(TYPE)或者標簽sim(TAG)的相似度,因為這2種屬性都為字符串集合,所以相似度計算利用文本相似度的計算方法。令屬性值集合分別為A,B,X=A∩B,Y=A∪B,則2個集合相似度計算公式為:

(4)求取2部電影是否都獲過國際獎項的相似度sim(won)或者制片國家的相似度sim(loc),令a,b為相應屬性值,則:

(5)2部電影的導演和演員的相似度sim(DIR),sim(ACT),利用 SimRank公式有:

其中,O(A),O(B)分別為2部電影的影人(導演或者演員)集合;Oi(A),Oi(B)為集合中的元素,C=0.8;s(Oi(A),Oi(B))為具體2個影人的相似度。計算規則如下:
通過統計電影人作品的類型和作品中涉及到的其他影人,可以得到這個電影人的擅長類型集合(CTYPE)以及合作2次以上的電影人集合(PTN)。年齡、獲獎情況、出生地以及主要作品的類型集合、合作人集合的相似度計算方法同電影的計算方法,最終得到公式:

最終,利用式(2)將以上各個屬性相似度綜合求取加權平均值,得到電影相似度。
3.3.2 權重計算方法
某用戶歷史記錄中某屬性的屬性值越聚集于某一值,則說明此用戶對該屬性的關注程度越高,該屬性所占權重越大;反之,某屬性的屬性值越發散、隨機性越大,則說明用戶對該屬性的關注程度越低,該屬性權重越低。假設用戶歷史記錄中有n個電影,電影共有p個屬性,某一個屬性共出現mp個屬性值,則對于第j個屬性的聚集程度由式(9)衡量,分子表示屬性j的第i個屬性值在歷史記錄中實際出現的次數,分母為點播電影總個數與屬性值的個數之比,表示每個屬性值平均出現的次數。再利用式(10)得到每個屬性權重。

根據實際應用場景,提出2種推薦策略。第1種是非實時推薦,當用戶登錄系統時,根據用戶以往的歷史記錄,向用戶推送推薦電影。第2種是實時推薦,當用戶點開某部電影時,向用戶推薦可能感興趣的相似電影。
3.4.1 場景 1
考慮到用戶的興趣漂移[10],用戶最近觀看過的電影能反映這個時間段的興趣特征。僅選取用戶最近觀看過的電影集 X={x1,x2,…,xn},通過網站聚合得到候選集 Y={y1,y2,…,ym},并將系統最新收錄的電影補充進去,利用式(10)得到用戶偏好,再利用式(2)將Y中每個項目分別與X中所有項目計算相似度。并利用式(11)求平均值,平均值越大,說明此部電影越符合用戶這段時間的興趣特征,依據相似度大小進行推薦。

3.4.2 場景 2
當用戶觀看某一部電影時,聚合得到此電影候選集,將候選集中每部電影都與此電影計算相似度,按相似度大小進行推薦。基于協同過濾的推薦方法在整個系統啟動的初始階段,由于用戶數量少、點播歷史記錄的缺乏,會出現冷啟動問題。而對于其他網站聚合,不需要本系統中的相似用戶。另外,針對新用戶加入做如下處理:用戶加入時,向用戶隨機推薦熱門電影,當用戶選擇某部電影時,向用戶隨機推薦網站聚合得到的相關電源,隨著觀看數量增加,更新對于每個屬性的偏好權重。這樣可在一定程度上解決新用戶問題。
本文實驗數據來自豆瓣電影網,用戶可以對看過的電影進行1~5的評分。本文電影信息數據庫采集豆瓣電影上的十萬部電影。被聚合的網站選取用戶數量較多、信息比較全面的熱門影視資料網站或者在線視頻播放網站,如百度影視寶庫、時光網、樂視網、電影網、愛奇藝等。
本實驗用于驗證算法在應用場景1時的有效性。隨機抽取豆瓣電影中100位用戶,用戶歷史記錄條目大于100。選取用戶評分大于2的電影,構成實驗數據集。每部電影通過聚合網站聚合可得到約30部~40部相關電影。隨機抽取數據集80%作為訓練集,20%作為測試集。在訓練集中分別抽取在時間上連續的α部電影構成某段時間觀看的電影集,按照3.4.1節所述策略計算相似度,依據相似度大小依次推薦10部電影。對照算法采用協同過濾及基于內容的推薦方法結合的算法,首先利用協同過濾得到15個相似用戶[11],相似用戶計算采用余弦相似度[12]。從而得到待推薦電影集,再選取以某個時間點開始的一段連續時間內用戶感興趣的α部電影進行基于內容的推薦。算法有效性利用推薦準確度來衡量:

在 α 取8 個不同值時(5,10,15,20,25,30,35,40),實驗結果如圖2所示。

圖2 推薦準確度對比
實驗結果顯示,比較基于協同過濾和內容的推薦,本文提出的方法平均準確度提高了10%以上。另外,從圖中可以看出:2種方法準確率都隨著α值的改變而變化,且都在α取20左右時,有較高的推薦準確度。這是因為,在α值較小時,用戶的觀看記錄較小,從統計學意義上講比較隨機,不能準確地表現出用戶某段時期的興趣特征,而當α值較高時,在這個時間段內,用戶可能已經產生了興趣漂移,推薦準確度會下降。
本實驗驗證推薦算法在應用場景2中的有效性。構建一個實時推薦的模擬系統,招募30位電影愛好者作為測試用戶。根據實驗1結果,系統首先令用戶輸入自己最近看過的、認為比較好的15部~25部電影。在得到用戶歷史記錄后,算出偏好權重。在此基礎上每當用戶點開一個電影,系統界面展示2組推薦結果,每組20部。第1組推薦結果由本文算法給出,第2組由協同過濾和基于內容的推薦算法給出。每當得到2組推薦,系統要求用戶分別對推薦結果的推薦質量做出評價,評價標準為是否相似且感興趣。質量等級分為好、一般、差。為每位用戶進行30次實時推薦后,統計得到如圖3所示的結果。結果顯示,本文方法在推薦質量上要優于基于協同過濾和內容的推薦方法。

圖3 實時推薦質量對比
本文提出一種基于網站聚合和知識的推薦方法。新系統在建立源數據庫時不依靠其他用戶群,而是聚合其他權威網站得到相關推薦項目。構建包含影人信息的領域本體模型,可防止過度專業化。并通過屬性的聚集程度得到用戶偏好差異。實驗結果表明,本文方法的推薦準確率和推薦質量較傳統方法有明顯提高,且可解決冷啟動、稀疏性等問題。下一步工作將深入挖掘電影領域本體,例如對電影社會化標簽、簡介關鍵詞等方面的語義關聯挖掘,以改善推薦效果。
[1]許海玲,吳 瀟,李曉東,等.互聯網推薦系統比較研究[J].軟件學報,2009,20(2):350-362.
[2]Zimmerm J,KurapatiK,Buczak A L,etal.TV Personalization System[D].Pittsburgh,USA:Carnegie Mellon University,2004.
[3]易 明.基于Web挖掘的個性化信息推薦[M].北京:科學出版社,2010.
[4]李忠俊,周啟海,帥青紅.一種基于內容和協同過濾同構化整合的推薦系統模型[J].計算機科學,2009,36(12):142-145.
[5]鄧志鴻,唐世渭,張 銘,等.Ontology研究綜述[J].北京大學學報:自然科學版,2002,38(5):730-738.
[6]李 寧,王子磊,吳 剛,等.個性化影片推薦系統中用戶模型研究[J].計算機應用與軟件,2010,27(12):51-54.
[7]Jeh G,Widom J.SimRank:A Measure of Structuralcontext Similarity[C]//Proc.of the 8th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.Edmonton,Canada:ACM Press,2002:538-543.
[8]邱 哲,符滔滔.開發自己的搜索引擎:Lucene 2.0+Heritrix[M].北京:人民郵電出版社,2007.
[9]楊卓俊.基于語義詞典的電子商務商品推薦系統研究[D].杭州:浙江工業大學,2012.
[10]涂金龍,涂風華.一種綜合標簽和時間因素的個性化推薦方法[J].計算機應用研究,2013,30(4):1044-1047.
[11]鄧愛林,朱揚勇,施伯樂.基于項目評分預測的協同過濾推薦算法[J].軟件學報,2003,14(9):1621-1628.
[12]徐 翔,王煦法.協同過濾算法中的相似度優化方法[J].計算機工程,2010,36(6):52-54.