〔摘 要〕本文通過對個性化推薦技術涵義的敘述,提出基于個性化推薦技術中的協同過濾技術構筑個性化課程推薦系統平臺,并且對系統平臺的設計與實現過程進行了闡述。
〔關鍵詞〕協同過濾;個性化;推薦系統
〔中圖分類號〕TP39 〔文獻標識碼〕A 〔文章編號〕1008-0821(2009)05-0193-04
Research on Personalized Courses Recommendation System
Based on Collaborative Filtering TechnologyPan Wei
(Academic Affairs Office,Wuhan University of Technology,Wuhan 430070,China)
〔Abstract〕Based on the recommendation of personalized technical meaning of the narrative,put forward the recommendation of personalized technology in collaborative filtering technology to build personalized courses recommended system platform.Platform and the system design and implementation of the process were also discussed.
〔Keywords〕collaborative filtering;personalized;recommendation system
隨著計算機技術和互聯網技術的快速發展,網絡中的信息“超載”現象越來越嚴重,面對信息的“海洋”,用戶所用的信息只是滄海一粟。用戶為了找到適合自己的信息需要耗費大量的時間和精力。在網絡教育中也存在此問題,學習者不知道學習資源放在哪里,所有學習者的界面都是一樣的,在尋找自己需要的資源的過程中,學習者很容易“迷航”和產生迷茫不知所措的感覺。因此在網絡教育中需要運用個性化推薦技術來更好的促進學習者的自主學習。
要實現個性化推薦主要采用基于聚類分析技術向不同的學習者推薦不同課程。在網絡教育平臺中需要向學習者推薦不同的課程,要根據學習者對課程的感興趣程度不同,將學習者進行聚類分析,分成不同的簇,再在同一個簇中尋找與目標學習者相似度最大的學習者,利用該學習者對不同課程的興趣程度對目標學習者進行課程推薦。
1 個性化推薦技術的涵義及分類
1.1 個性化推薦技術的涵義
個性化推薦技術的原理是根據用戶模型尋找與其匹配的信息,或者尋找具有相近興趣的用戶群而后相互推薦瀏覽過的信息。它的實質是一種“信息找人”的服務模式,可以減少用戶尋找信息的時間,提高瀏覽效率。此項技術的研究己經取得了顯著成果,且有不少成果已應用到學術、商業領域。目前世界上比較有影響的個性化推薦系統有斯坦福大學的LIRA和Fab、麻省理工學院的LetiZia。此外,我國清華大學的OpenBookmark系統也采用了個性化推薦技術。個性化技術正在商業領域發揮越來越大的作用,相信該技術在我們網絡教育平臺中也會有越來越多的應用。
1.2 個性化推薦技術的分類
推薦技術是整個推薦系統中最核心、最關鍵的部分,很大程度上決定了推薦系統性能的優劣。目前,主要的推薦方法包括:基于內容推薦、協同過濾推薦、基于關聯規則推薦、基于效用推薦、基于知識推薦和組合推薦。本文主要介紹基于協同過濾技術的個性化課程推薦平臺。
2 基于協同過濾推薦技術的課程推薦平臺設計與實現
基于聚類分析的協同過濾推薦是指利用聚類分析技術可以按相似性原則將用戶劃分到不同的簇中,然后再對同一簇中的用戶評價信息對目標用戶進行協同推薦。因為在同一個簇中的用戶具有相似性,而不同簇中的用戶是不具有相似性的,所以在同一簇中尋找符合要求的用戶會有很高的效率。另外,由于同一簇中的用戶群有很大的相似性,用目標用戶所在簇中的其他用戶的評價信息對目標用戶的消費行為進行預測會有更高準確率;另外,由于聚類過程可以離線進行,因此聚類過程不影響推薦系統的響應速度。
2.1 基于聚類的協同過濾推薦系統流程
基于協同過濾課程推薦系統分為3個步驟:
2.1.1 數據收集與預處理
2.1.2 協同過濾
為了確定向目標學習者推薦哪些課程,需要按以下步驟完成協同過濾過程:
(1)識別目標學習者所在簇
如果目標學習者是老用戶,那么只需要根據學習者代碼就可以確定他所在的簇。如果是新用戶,那么需要學習者首先在線回答他對哪些課程感興趣,或者讓學習者自己選擇自己感興趣的課程,根據學習者回答或者選擇的結果分析目標學習者所在的簇,分析的方法是看目標學習者感興趣的課程集合與哪個簇的課程集合重合的比例最大。
(2)確定向目標學習者推薦的候選課程集合
2.1.3 依據用戶取向進行個性化推薦
利用協同過濾技術從候選課程集合中挑選出目標學習者最可能訂制的N門課程,向目標學習者進行推薦。兩個學習者屬于同一個簇表明他們關注的課程大部分是相同的,但這并不意味著他們對課程的興趣度也是相似的,例如,某學習者定制了某門課程,但學習后他對該課程的評價卻非常低,而另一個學習者可能正好相反。因此,我們還需要從簇中挑選與目標學習者的學習行為模式相似的學習者。令β為相似度的經驗閥值,我們利用某種相似度計算公式分別計算簇中每個學習者x與目標學習者y的愛好相似度,如果該相似度大于我們設定的用戶相似的經驗閥值β,那么,學習者x的信息可以用來對目標學習者進行預測,我們稱這樣的用戶為鄰居用戶。
我們可以分別預測目標學習者對候選課程集合中每門課程的評價,取評價值最高的前3門課程推薦給目標學習者。
2 獲取數據
每個課程在入庫的時候,系統會自動為該資源分配一個惟一的課程號(也稱課程的ID或者標識)。當學習者在我們的終身教育平臺上注冊成為會員時,系統也會自動為該學習者分配一個惟一的用戶號。當學習者登錄后,系統會自動把學習者與課程的交互情況記錄下來,系統記錄的是該學習者的用戶號、與其交互課程號以及此次交互的方式。交互方式有兩種:瀏覽、收藏和定制。在信息獲取階段,各種交互方式分別用不同的數字來表示,其中數字0表示用戶瀏覽了該課程,數字1表示學習者收藏了該課程,數字2表示學習者定制了該課程,同時不同的交互方式也代表了學習者對該課程的不同喜好程度,很顯然,按照瀏覽、收藏、定制的順序,學習者對該課程的喜好程度逐漸增強。
學習者對課程的評價可以是顯式的也可以是隱式的。顯式的評價通常是學習者以數值形式對某門課程進行評分,如果數值很高,表示學習者非常喜歡該課程,反之表示學習者不喜歡該課程。這種方式需要專門的進行問卷調查。如果學習者希望獲得推薦系統的幫助,首先需要向系統提交他對一些課程的評價信息。隱式的評價通常是從數據資源中派生出來的,例如分析學習者在各個網頁的瀏覽時間、分析網站的日志文件、或分析學習者的定制一記錄,通過分析這些隱式偏好信息,可以最終將這些信息映射為顯式評價信息。無論是顯式評價信息還是隱式評價信息,最終都可以映射為一張評價記錄表,表1是這種表格的一個簡化的示例。
表1中的數值代表學習者對課程的評分數值,數值越高,表示客戶越喜歡該課程。從表1中,會發現學習者E與學習者A的學習偏好基本是一致的,因此,我們可以判斷出學習者E也會喜歡課程5。
2.3 數據預處理
獲取了學習者與系統的交互信息以后,下一步工作就是對這些信息進行預處理,使其格式達到聚類算法的要求,然后存儲起來。信息預處理的過程就是將在信息獲取階段獲得的新信息,和以前獲取的舊信息結合起來,按照系統規定的格式存儲在一起的過程。
如果課程被學習者瀏覽,那么說明此學習者對該課程感興趣,要查看該課程的詳細信息,此時設權值為W1(W1為權值的最小值)。如果課程被學習者定制,那么說明此學習者對該課程非常感興趣,所以要設權值為W3(W3為權值的最大值)。
我們將W1、W2、W3代表能體現學習者對課程喜歡程度的數值,其中W1最小,W3最大;它們的具體取值還要在實驗過程中確定。當然,在權值調整后,要保證權值不大于最大值W3。據此可以給出權值調整算法描述。
算法Weight change(Info,Courseid,Mode)
/*Info表示學習者原有的交互信息,在系統中用字符串來表示;Course記表示此次學習者交互課程號;Mode表示此次交互的方式;該算法將根據課程號和Mode的值來改變Info*/
[當學習者瀏覽該課程時,進行的權值調整]
IF Mode=”1”THEN∥表示該課程被學習者瀏覽∥
(IF Info.indexOf(Courseid)=-1 THEN ∥表示該課程與此學習者以前沒交互∥
Info←Info+”U”+Courseid+”W”+W1.∥把此課程的課程編號和此次該學者的交互權值添加到Info的后面∥
ELSECHANGE(Info,Courseid,W1).) ∥修改Info中緊跟在學習者號后邊課程的交互權值,使之在原值的基礎上增加W1,且更改后的權值不超過W3。[當學習者收藏該課程時,進行的權值調整]
IF Mode=”2”THEN ∥表示該課程被學習者收藏∥
(IF Info.indexOf(Courseid)=-1 THEN ∥表示該課程與此學習者以前沒交互∥
Info←Info+”U”+Courseid+”W”+W2.∥把此課程的課程編號和此次該學習者的交互權值添加到Info的后面∥
ELSECHANGE(Info,Courseid,W2).) ∥修改Info中緊跟在學習者號后邊的課程的交互權值,使之在原值的基礎上增加W2,且更改后的權值不超過W3。[當學習者定制某課程時,進行的權值調整]
IF Mode=”3”THEN ∥表示該課程被學習者定制∥
(IF Info.indexOf(Courseid)=-1 THEN ∥表示該課程與此學習者以前沒交互∥
Info←Info+”U”+Courseid+”W”+W3.∥把此課程的課程編號和此次該學習者的交互權值添加到Info的后面∥
ELSECHANGE(Info,Courseid,W3).∥將Info中緊跟在學習者號后邊的課程的交互權值修改為W3。
對于W1、W2和W3的值,需要在大量實驗過程中確定。本系統取W1=1,W3=5。
舉一個簡單的例子,如果學習者原有的交互信息(Info)為:“UI0001W1U10002W5U10003W3”,此時,如果新獲取的信息是該學習者又瀏覽了10001號課程,那么經過權值調整之后該學習者的交互信息將會變為“U10001W2U10002W5U10003W3”,如果學習者定制了10003號課程,則經過權值調整后該學習者的交互信息將會變為“U10001W2U10002W5U10003W5”。
2.4 用戶聚類
因為系統中學習者的數目非常巨大,所以在所有學習者中逐個計算相似度來找某個學習者的近鄰是不現實的。為了縮小找近鄰的范圍,降低時間復雜性,系統在找近鄰之前先對所有學習者進行聚類。
聚類分析的目的是將具有相似行為模式的學習者聚集在一個簇中。交互數據庫中記載了學習者交互的課程,通常一個學習者可能與多個課程交互,因此,需要將一個學習者的多個交互記錄合并為一條記錄,用來反映該學習者的學習行為。經過合并后,將約簡后的數據集合提交給聚類分析模塊,將學習者群劃分為不同的簇。
運用k-means方法進行聚類,關鍵在于計算簇中心,以及k值選擇。合適的k值選擇是一個比較困難的問題。通常,用戶需要選擇若干k值實驗,以確定最恰當的簇的數目。
算法的大致過程描述如下:先從樣本中隨機撿取k個聚類中心,再根據歐幾里德距離把每個點分配到最接近其均值的聚類中,然后計算被分配到每個聚類的點的均值向量,并作為新的中心進行遞歸。
算法的代碼描述如下:
/*算法輸入:要分類的簇的數目k,要聚類的學習者交互信息的集合R,R={r1,r2,…,rn},其中每個元素包括該學習者的ID和其與m門課程交互的交互權值信息。
算法輸出:聚類結果Z,其中包括每個聚類中學習者的ID。
mProtoClusters表示簇中心,*/
FOR i=1,…,k
mProtoClusters[i]=r; ∥r為樣本中任一用戶,從樣本中隨機撿取k個用戶作為聚類中心;
REPEAT ∥開始循環
mProtoClusters[i].center=(wi,1+wi,2+…+wi,m)/m ∥計算簇中心對象的平均值
r(j).center==(wj,1+wj,2+…+Wj,m)/m (j|j∈m,j≠i) ∥計算其他各個對象的平均值
Dij=∑mp=iri,p-rj,p212∥計算其他各個對象到各個簇中心的歐式距離
Dij比較大小
r(j)=mProtoClusters[i] ∥將每個對象賦給最類似的簇,進行標記
mProtoClusters[i].center=(r(1).center+r(2).center+…r(j).center)/j. ∥r(1),r(2),…,r(j)為該簇內對象,更新簇的平均值
Until簇中心不在發生變化
2.5 計算相似度
一般情況下,兩個學習偏好完全相同的學習者是很少存在的,這時,更普遍的做法是定量地計算學習者E與其他用戶的偏好相似程度,取那些與目標學習者學習偏好比較接近的學習者作為鄰居客戶。
距離是聚類分析常用的分析統計量。對于有p個變量的樣品來說,n個樣品可以視為p維空間中的n個點,自然可以設想用點間距離度量樣品間的接近程度,常用dij表示第i個樣品與第j個樣品間的距離。距離相似度是用兩個對象之間的距離來表示它們之間的相似程度。兩個樣品間的距離在0→∞之間,距離越小,說明兩個樣品越接近,在聚類分析中常見的距離相似度有以下3種:
街區距離(Manhattan):
Dij=∑pk=1Xik-Xjk
歐式距離(Euclidean):
Dij=∑pk=1Xik-Xjk212
明氏距離(Minkonsky):
Dij(q)=∑pk=1Xik-Xjkq1q q>0
顯然,當q=1時,明氏距離會變成街區距離;當q=2時,明氏距離會變為歐式距離;因此,歐式距離和街區距離實際上就是明氏距離的特例。兩個對象之間的距離越小,表示兩個對象越相似;兩個對象之間的距離越大,表示兩個對象越不相似。
2.6 尋找近鄰
常用的找鄰居的方法基本上可以分為兩種:一種方法是基于中心的鄰居(Center-Based Neighboorhood),直接選出距離該對象最近的若干個鄰居即可。另一種方法是集合鄰居(Aggregate Neighborhood),第一步先選出距離該對象最近的鄰居,第二步求出目前鄰居集合的中心,然后選出距離鄰居集合中心最近的鄰居,重復執行第二步,直到為該對象選出足夠數目的鄰居。
在本例中,選用第一種方法,在前邊聚類的結果上,進行鄰居選擇:首先,明確所在的簇,明確所要求的鄰居數目;其次,計算簇中每個對象到該對象的歐式距離,用臨時變量標記下來。如果這個是最小的距離,并且該距離小于我們設定的某個經驗閥值,則把這個對象加到計算對象的鄰居數組中。
/*算法輸入,ri是待求鄰居的用戶,Num是需要求的鄰居數量。
si是該用戶所屬的簇,β為相似度的經驗閥值
算法輸出:按照相似度大小順序排列的鄰居列表Neighlist。*/
FOR r=1,2,…,n ∥對于所有用戶
IF rj#8226;si=s THEN ∥rj屬于這個簇
Temp(j)=∑mp=1ri,p-rj,p212∥計算rj和ri的歐式距離
IF Temp(j)<β THEN
Neighlist←rj ∥把rj按順序插入到鄰居列表Neighlist中,最后得到該用戶的鄰居列表,按照列表對用戶進行課程推薦。
本課程推薦系統在為學習者提供相關課程推薦的過程中,涉及到了數據庫中的多個表,其中最主要的一個表是:CourseRecomrnend。CourseRecomrnend表在課程推薦過程中用得最多,也是最重要的一個表,該表用來存儲課程推薦過程中所需用到的數據以及所產生的結果。
3 結束語
基于協同過濾的推薦系統可以說是從用戶的角度來進行相應推薦的,而且是自動的,即用戶獲得的推薦是系統從購買模式或瀏覽行為等隱式獲得的,不需要用戶努力地找到適合自己興趣的推薦信息。雖然協同過濾作為一種典型的推薦技術有其相當的應用,但協同過濾仍有許多的問題需要解決。最典型的問題有稀疏問題(Sparsity)和可擴展問題(Scalability),我相信這些問題在將來實際應用過程中可以逐步的完善解決。
參考文獻
[1]程巖,肖小云,吳潔倩.基于聚類分析的電子商務推薦系統[J].計算機工程與應用,2005,24:175-177.
[2]王輝,高利軍,王聽忠.個性化服務中基于用戶聚類的協同過濾推薦[J].計算機應用,2007,27(5).
[3]蔡勇,韓永國,劉自偉.數據挖掘技術在生源分析中的應用研究[J].計算機應用研究,2004,12:52-54.
[4]趙艷廠.數據挖掘中聚類算法研究與仿真[D].北京郵電大學博士論文,2003.