丁 恒, 黃全舟
(西安石油大學 計算機學院, 西安 710065)
當今正處在信息時代,每天都有各式各樣的信息不斷涌來,信息過載問題日益嚴重。目前,個性化推薦技術[1]是解決這一問題的有力工具。個性化推薦技術是建立在大量的用戶行為數據之上的,有了用戶行為數據的強力依托,其身影遍布于互聯網各類網站中,并已在電影、電子商務、圖書、音樂等領域取得了顯著的成效。推薦算法種類繁多,其中協同過濾推薦算法在個性化推薦中得到了更為廣泛的應用[2]。
近年來,隨著旅游產業規模日漸龐大,大量旅游信息相繼產生,研究學界即已開始將個性化推薦技術應用于旅游行業。如何從海量數據中挖據出高質量的旅游信息提供給用戶?協同過濾算法將是一個不錯的選擇。本文在傳統協同過濾算法的基礎上,考慮了項目屬性對相似度計算的影響,提出了一種基于屬性特征的協同過濾算法,并將其應用于個性化旅游推薦中,以提升旅游推薦的質量。
協同過濾算法通過其它用戶的偏好,找出與目標用戶興趣相似的用戶所喜好的物品,然后進行推薦。協同過濾算法有基于記憶(內存)的協同過濾和基于模型的協同過濾兩大類。
研究可知,基于記憶的協同過濾算法可分為:基于用戶的協同過濾算法和基于項目的協同過濾算法。本節也將對這2種協同過濾算法進行概述分析。
(1)基于用戶的協同過濾算法。作為最基本的推薦算法,基于用戶的協同過濾算法最先被應用于推薦系統中[3]。基于用戶的協同過濾算法由用戶的興趣產生推薦,其基本思想是依據用戶對物品的偏好找出與其興趣相似的鄰居用戶,再將鄰居用戶偏愛的、且目標用戶不曾涉及到的物品推薦給目標用戶。
(2)基于項目的協同過濾算法。該算法目前在互聯網行業的應用很普及,Amazon、YouTube、Hulu的推薦算法都是由此演化而來。算法是依據項目之間的共性來進行協同過濾,其基本思想是分析用戶的歷史偏好,將用戶以往所喜歡物品的相似物品推薦給用戶。
(1)精確性問題。擁有高精確性的推薦算法能為用戶提供更加精準的推薦,提升用戶滿意度。可靠的推薦結果是一個推薦系統賴以生存的關鍵。顯然,如果一個推薦系統不能產生優質的推薦,就會失去大量的用戶。
(2)數據稀疏性問題。相似度的計算依賴于用戶-項目評分矩陣,然而用戶只是對少量的項目進行了評分,相對比例僅為1% ~ 2%[4]。這就造成評分矩陣過于稀疏,用戶尋找相似鄰居成為難題,大大降低了推薦的質量。
(3)冷啟動問題。隨著新用戶、新項目的不斷加入,但在此之前并沒有任何有關新加入用戶或是新加入項目的記錄,從而導致系統無法進行推薦。
協同過濾算法所涉及的數據為用戶對項目的歷史評分數據,可以將這些數據用m×n的評分矩陣R來表示,其中,m表示用戶數,n表示項目數,u表示用戶,i表示項目,rij表示用戶ui對項目ij的評分值,評分值一般用整數1~5來表示(0表示用戶未對該項目進行評價),評分越高則用戶越喜歡。研究中給出了一個用戶-項目評分矩陣的樣例見表1。

表1 用戶-項目評分矩陣
最近鄰的選取是協同過濾算法中至關重要的一部分,并直接影響著預測的準確度,下面,將基于用戶的協同過濾算法作為例子,對最近鄰集合的產生過程進行論述。首先,通過有關公式計算出不同用戶與目標用戶u的相似性,由此找出與u最為相似的k個最近鄰所組成的最近鄰集合Ku={u1,u2,...,uk}。常見的相似度計算方法有:余弦相似性、歐幾里得距離、Pearson相關相似性。本文僅選取同等條件下性能相對優越的Pearson相關相似性進行說明[5],Pearson相關相似性的數學定義即如式(1)所示:
(1)

在得到k最近鄰集合后,可根據集合中相似用戶的數據對目標用戶未評分的項目進行評分預測,并將預測評分從高到低進行排序,從而生成top-N推薦給目標用戶進行選擇。具體計算如表達式(2)所示:

(2)
其中,sim(x,u)是通過相似度計算公式所得出的兩用戶之間的相似性,ku表示用戶u的最近鄰集合。
基于項目的協同過濾算法預測和推薦過程與此基本類似,這里,僅詳細探討闡述了基于用戶的協同過濾算法研究。
傳統的協同過濾算法基于項目整體評分進行相似度的計算,并沒有衡量項目各屬性對推薦結果的影響,這樣的推薦往往不夠準確。結合屬性特征從多個維度進行分析計算能提升整個算法的精度,使推薦的結果更能符合用戶需求。同時,結合屬性特征能夠很好地解釋用戶為什么喜歡這些項目,體現不同用戶所重視的不同方面,從而進行個性化的推薦。
下面將結合旅游這一領域,通過2個具體的例子來進行說明,內容表述詳見如下。
假設有3個用戶(u1,u2,u3)和4個景點(i1,i2,i3,i4),其中有些景點評分已知,由此預測用戶u1對景點i4的評分。傳統協同過濾算法用戶-景點評分見表2。 通過表2中的數據進行相似性計算發現u1和u2是相似用戶,從而得出用戶u1對景點i4的預測評分為5分。
在表2的基礎上,研究給出對各個景點的總體評分(總體評分為各屬性評分和的平均值)以及景點分別在美麗、人文、休閑、刺激、特色、浪漫六個屬性上的評分,評分結果見表3。其中,括號內為各屬性的評分值。
表2 傳統協同過濾算法用戶-景點評分表
Tab. 2 Traditional collaborative filtering algorithm user-site rating table

UserItemi1i2i3i4u1543?u25435u32413

表3 多屬性用戶-景點評分表
由表3可知,根據以往單個評分的計算來看,用戶u1和用戶u3最為相似。但在引入多屬性的評分準則后,則需要從多維度進行考慮,從而找出相似用戶。這樣不僅體現了用戶不同的偏好,而且所得出的推薦結果會更加令人滿意。顯然,用戶u1和用戶u3在各屬性的評分值上存在較大偏差,用戶u2和用戶u3各屬性值更為相似,因此u2和u3為最相似用戶。總體評分的預測也應該依據u2來決定。
由上述兩個例子可以看出,雖然總體的評分在一定程度上表達了用戶的喜愛程度,但多屬性的評分更能體現用戶對不同方面的偏好,很好地解釋了用戶喜愛的理由,使得推薦結果更加精確。因此,本文將采用基于屬性特征的方式來對傳統協同過濾算法進行改進,以求能夠提升推薦的質量,得到更多用戶的滿意評價。
在合理評分的前提下,景點的總體評分與各屬性評分之間存在一定的關聯性。總體評分的高低是用戶對各屬性特征滿意程度的體現,如果用戶對各個方面都不是很滿意,那么對于整體印象就會大打折扣,評分就會較低。只有在各方面都滿意的前提下,整體才會得到高分。因此,研究通過景點的多屬性特征評分來代替傳統單一的總體評分計算各用戶之間的相似度,最終使得最近鄰集合更加準確,提高推薦算法的精度。

(3)
假設用戶u和用戶v共同評分過的景點數目表示為I(u,v),則可用如下公式計算兩用戶間的總體距離,其數學公式可表示為:

(4)
距離和相似度之間存在反比關系,因此在使用距離來代表用戶間的相似性時,擬用以下公式進行轉換,其數學公式可表示為:

(5)
上述方法基于屬性特征,用多屬性評分的方式來代替傳統單一的總體評分,從而改變了傳統協同過濾算法在相似度方面的計算方式。在下一節,將通過旅評網上的評分數據進行實驗分析,來評估這種改進方式是否能對傳統協同過濾算法在計算精度上有所提高,提升推薦的質量。
基于屬性特征的協同過濾算法的流程描述如下。
輸入:多屬性用戶-景點評分矩陣R,最近鄰個數k
輸出:用戶u所對應的Top-N推薦列表
(1)利用構建好的多屬性用戶-景點評分矩陣R,依據公式(3)~(5)計算出用戶間的相似度sim(u,v) ,并取最為相似的k個用戶組成最近鄰集合Ku={u1,u2,...,uk}。
(2)根據最近鄰ku集合中相似用戶的數據,利用公式(2)計算出用戶u未評分景點i的預測評分值pu,i。
(3)將預測評分值進行降序排列后,產生Top-N推薦列表給用戶進行選擇。
實驗中的數據取自“旅評網”。該網站用戶量充足,可提供足夠多的景點評分數據。對于景點的評定,用戶可分別從“美麗”、“人文”、“休閑”、“刺激”、“特色”、“浪漫”六個屬性特征進行評分,評分值區間為1-5分。采用網絡爬蟲技術采集了5 216名注冊用戶對3 260個景點的23 563條評分數據,將數據分為訓練集和測試集兩部分,其中80%為訓練集,其余20%為測試集。用戶評分的數據片段見表4。
對表4中數據進行預處理后,構建多屬性特征用戶-景點評分矩陣。

表4 用戶評分數據片段
本文采用平均絕對誤差MAE作為評判推薦結果優劣的標準[6]。MAE值越小,表示該推薦算法的推薦質量就越高,相應的計算公式為:

(6)
其中,pi是用戶真實的評分值;qi為該算法所預測的評分值;N為預測評分的總條目數。
為了檢驗本文所提出算法的實際推薦效果,將其與傳統協同過濾算法在同一數據集上進行了比較,結果如圖1所示。

圖1 推薦算法精度比較圖
由圖1可知,本文算法在相同鄰居數目的條件下有著更小的MAE值,推薦性能顯著優于傳統方法。
本文針對傳統協同過濾算法采用單一評分,導致相似度計算存在偏差,影響整個算法的精確性。提出了一種基于屬性特征的協同過濾算法并應用于個性化旅游推薦中,以景點多屬性評分代替單一評分來計算用戶間的相似性。實驗結果表明,本文算法能夠解決推薦精確度的問題,使推薦的質量得到了一定程度的提升。