趙鵬博+韓憲忠+王克儉
摘要:針對(duì)高校用戶對(duì)圖書(shū)的個(gè)性化需求,運(yùn)用用戶對(duì)圖書(shū)的評(píng)分,構(gòu)建了基于Hadoop和Mahout的圖書(shū)推薦系統(tǒng)。通過(guò)Hadoop中分布式文件系統(tǒng)(HDFS)和Map/Reduce計(jì)算模型的應(yīng)用,發(fā)現(xiàn)當(dāng)Hadoop中節(jié)點(diǎn)數(shù)不斷增加時(shí),計(jì)算時(shí)間不斷減少,實(shí)時(shí)響應(yīng)效率得到了提高;通過(guò)對(duì)Mahout中傳統(tǒng)的Item-Based聚類協(xié)同過(guò)濾推薦算法進(jìn)行改進(jìn),利用MAE值對(duì)傳統(tǒng)和改進(jìn)后的協(xié)同過(guò)濾算法進(jìn)行比較,發(fā)現(xiàn)圖書(shū)推薦的精度進(jìn)一步提高??傮w來(lái)說(shuō),推薦系統(tǒng)改善了傳統(tǒng)單機(jī)運(yùn)行內(nèi)存嚴(yán)重不足和推薦結(jié)果不精確的問(wèn)題。
關(guān)鍵詞:高校圖書(shū)館;個(gè)性化推薦算法;協(xié)同過(guò)濾算法;大數(shù)據(jù)
中圖分類號(hào):G258.6+62 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):0439-8114(2017)06-1150-05
DOI:10.14088/j.cnki.issn0439-8114.2017.06.040
Abstract: For personalized book needs of users at colleges and universities, we build a book recommendation system based on Hadoop and Mahout using the scores given by users. Through the application of Hadoop distributed file system (HDFS) and Map/Reduce calculation model, we found that the calculation time is reduced while real-time response efficiency is improved with the increasing of the number of notes in the Hadoop. Through the improvement of traditional Item-Based collaborative filtering recommendation algorithm, which is based on item clustering in the Mahout, we compare the traditional collaborative filtering algorithms with the improved collaborative filtering algorithms by using MAE, and find that the precision of the recommendation is further improved. In general, this experiment improves the problem of out-of-memory for the running of traditional single machine and the inaccurate results of recommendation.
Key words: university library; personalized recommendation algorithm; collaborative filtering algorithm; big data
隨著圖書(shū)館事業(yè)的發(fā)展,用戶對(duì)圖書(shū)館資源的使用提出了越來(lái)越高的要求;為讀者提供有針對(duì)性的服務(wù),成為圖書(shū)館發(fā)展中所面臨的具體任務(wù)之一。在建設(shè)智慧圖書(shū)館中,國(guó)外個(gè)性化圖書(shū)推薦服務(wù)已經(jīng)比較成熟,但國(guó)內(nèi)個(gè)性化推薦系統(tǒng)尚不完善[1]。目前國(guó)內(nèi)大部分高校圖書(shū)館都是通過(guò)輸入關(guān)鍵詞進(jìn)行模糊搜索,然后列出只和關(guān)鍵詞相關(guān)的書(shū)籍,沒(méi)有達(dá)到智能以及個(gè)性化推薦的效果。在借閱圖書(shū)的過(guò)程中,用戶過(guò)去產(chǎn)生的行為分為顯式用戶反饋與隱式用戶反饋兩種,主要包括瀏覽頁(yè)面、搜索圖書(shū)、收藏圖書(shū)、借閱圖書(shū)、評(píng)論圖書(shū)、圖書(shū)評(píng)分等用戶行為[2]。本試驗(yàn)通過(guò)顯式用戶反饋中的圖書(shū)評(píng)分,推薦出在校學(xué)生和老師感興趣的書(shū),達(dá)到一個(gè)圖書(shū)個(gè)性化推薦的效果。河北農(nóng)業(yè)大學(xué)圖書(shū)館每天產(chǎn)生大量的數(shù)據(jù)信息,單機(jī)運(yùn)行無(wú)法滿足實(shí)時(shí)響應(yīng)的效率。在處理大規(guī)模海量數(shù)據(jù)時(shí),許多研究者將其設(shè)計(jì)的協(xié)同過(guò)濾算法部署于Hadoop并行化平臺(tái),以期在保證結(jié)果準(zhǔn)確的前提下,通過(guò)Hadoop提高協(xié)同過(guò)濾算法執(zhí)行的效率。Mahout提供了Hadoop并行化算法的接口,本試驗(yàn)將Mahout中提供的基于項(xiàng)目聚類協(xié)同過(guò)濾算法與Hadoop中Map/Reduce計(jì)算模型和分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)進(jìn)行結(jié)合,改進(jìn)原來(lái)的推薦算法,設(shè)計(jì)出河北農(nóng)業(yè)大學(xué)高校圖書(shū)推薦系統(tǒng)。該推薦系統(tǒng)由Application業(yè)務(wù)系統(tǒng)、Mahout計(jì)算框架、Hadoop集群組成,解決了海量數(shù)據(jù)環(huán)境下算法實(shí)施的效率及推薦的精準(zhǔn)性問(wèn)題。
1 圖書(shū)推薦系統(tǒng)環(huán)境
1.1 Hadoop 與Mahout
Hadoop包括HDFS和Map/Reduce 2個(gè)子項(xiàng)目。HDFS由1個(gè)名稱節(jié)點(diǎn)(Name Node)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)(Data Node)組成[3]。Name Node管理和維護(hù)著系統(tǒng)中所有文件的索引目錄,記錄每個(gè)數(shù)據(jù)塊節(jié)點(diǎn)的位置。Data Node存儲(chǔ)著用戶數(shù)據(jù),實(shí)時(shí)被Namenode調(diào)用,并且定時(shí)向Name Node發(fā)送更新的數(shù)據(jù)列表信息。Map/Reduce并行編程框架[4]用于處理大規(guī)模計(jì)算機(jī)集群上的海量數(shù)據(jù),該模型具有良好的擴(kuò)展性及高容錯(cuò)性;集群中的Map/Reduce框架是由運(yùn)行在主節(jié)點(diǎn)上的Job Tracker和運(yùn)行在每個(gè)集群從節(jié)點(diǎn)的Task Tracker共同組成的。當(dāng)一個(gè)Job被提交時(shí),Job Tracker接收到提交作業(yè)和配置信息之后,就會(huì)將配置信息等分發(fā)給Task Tracker,Task Tracker負(fù)責(zé)完成由Job Tracker指派的任務(wù)。一個(gè)Map/Reduce作業(yè)分為Map和Reduce 2個(gè)階段。HDFS在集群上將單機(jī)內(nèi)存算法通過(guò)Map/Reduce模型并行化部署在多臺(tái)電腦上,實(shí)現(xiàn)分布式文件系統(tǒng)高傳輸率訪問(wèn)數(shù)據(jù);Map/Reduce在集群上實(shí)現(xiàn)了大量數(shù)據(jù)的并行化計(jì)算。二者相互作用,共同組成了Hadoop分布式系統(tǒng)體系結(jié)構(gòu)的核心。
Mahout框架不僅提供了單機(jī)運(yùn)行的接口,同時(shí)還基于Hadoop進(jìn)行分布式運(yùn)算。Mahout推薦引擎主要由Data Model、User Similarity、Item Similarity、User Neighborhood、Recommender[5]等模塊組成。Taste是Apache Mahout提供的一個(gè)協(xié)同過(guò)濾算法的高效子系統(tǒng),它實(shí)現(xiàn)了最基本的基于用戶的協(xié)同過(guò)濾算法(User-based collaborative filtering)和基于物品的協(xié)同過(guò)濾算法(Item-based collaborative filtering)[6]。
1.2 環(huán)境配置
目前Hadoop有3種運(yùn)行模式,分別是本地運(yùn)行、偽分布運(yùn)行、完全分布式運(yùn)行[7];試驗(yàn)在2臺(tái)普通的電腦上進(jìn)行偽分布式模擬部署。試驗(yàn)的平臺(tái)硬件需要2臺(tái)4核的Intel普通電腦,其操作系統(tǒng)采用win7 64 bite,CPU的主頻為3.5 GHz,內(nèi)存的大小為8 G,硬盤空間為1 T。在物理硬件平臺(tái)上面部署的軟件為V Mvare Workstation 9.0、Cent OS 6.5、Open SSH、jdk-6u24-linux-i586、Hadoop 1.1.2、eclipse 10.0、maven 3.2.5、mahout 0.8、jdk-6u 45- Windows-x 64。
1.3 搭建集群
一個(gè)HDFS集群主要采用主/從式的邏輯結(jié)構(gòu),在搭建一個(gè)分布式集群時(shí),需要為Hadoop 指定一個(gè)節(jié)點(diǎn)作為主節(jié)點(diǎn),在該主節(jié)點(diǎn)上運(yùn)行Name Node 和Job Tracker 2個(gè)守護(hù)進(jìn)程,調(diào)度其他從節(jié)點(diǎn)的Data Node 和Task Tracker 2個(gè)守護(hù)進(jìn)程。
搭建Hadoo 集群,首先要關(guān)閉各個(gè)節(jié)點(diǎn)的防火墻,修改配置文件/etc/hosts,保證所有節(jié)點(diǎn)的IP與主機(jī)名映射。試驗(yàn)虛擬1臺(tái)主機(jī)當(dāng)主節(jié)點(diǎn),虛擬6臺(tái)主機(jī)當(dāng)從節(jié)點(diǎn)(需要保證各個(gè)節(jié)點(diǎn)之間SSH[8]能免密碼登錄)。其中主節(jié)點(diǎn)為(master,192.168.59.100),從節(jié)點(diǎn)為(slave1,192.168.59.101);(slave2,192.168.59.102)…….(slave6,192.168.59.106),具體見(jiàn)圖1。
2 基于項(xiàng)目聚類協(xié)同過(guò)濾推薦算法
2.1 項(xiàng)目聚類
為了提高實(shí)時(shí)響應(yīng)效率,首先調(diào)用Mahout中taste算法庫(kù)的Kmeans算法[9],對(duì)項(xiàng)目進(jìn)行聚類。通過(guò)聚類,項(xiàng)目之間相似性最高的歸到一個(gè)集合,項(xiàng)目的最近鄰居大部分分布在相似性最高的若干個(gè)聚類中,因此不需要在整個(gè)項(xiàng)目空間上進(jìn)行搜索,而只需要在與目標(biāo)項(xiàng)目相似性最高的若干集合中進(jìn)行查詢即可。
項(xiàng)目聚類過(guò)程如下:
建立用戶-評(píng)分矩陣m×n。其中m為用戶,n為項(xiàng)目,Ri,k為用戶i對(duì)項(xiàng)目k的評(píng)分。試驗(yàn)采用的數(shù)據(jù)集評(píng)分設(shè)定在0到10,評(píng)分越高,表明該項(xiàng)目受用戶喜愛(ài)的程度越高。評(píng)分矩陣如表1所示:
輸入:項(xiàng)目集I={i1,i2,……in},用戶評(píng)分矩陣Rm×n,
輸出:聚類項(xiàng)目集C={c1,c2,……ck},
任意選擇k個(gè)項(xiàng)目,將其用戶評(píng)分作為初始聚類中心,為CC={w1,w2,……wk};
聚類集合C={c1,c2,……ck}初始化為空;
Repeat
For項(xiàng)目in(in∈I)do
For聚類中心wk(wk∈CC)do計(jì)算sim(in,wk);
sim(in,wk)=min{sim(in,w1),sim(in,w2),…… sim(in,wk)};
聚類ck=ck∪in;
For聚類ck(ck∈C)do
更新聚類中心wk=■∑■■in;
計(jì)算誤差函數(shù)E=■■|in-ck|2;
Until E不再改變,生成的k個(gè)聚類項(xiàng)目集{c1,c2,……ck},有如下性質(zhì):
c1∪c2∪…∪ck=I;
ci∩cj=(i≠j,對(duì)任意的1≤i≤k,1≤j≤k)。
2.2 傳統(tǒng)協(xié)同過(guò)濾算法
隨著用戶數(shù)據(jù)量不斷增加,運(yùn)算用戶興趣相似度矩陣的時(shí)間和空間復(fù)雜度近似于平方關(guān)系增長(zhǎng),User CF很難做到實(shí)時(shí)計(jì)算預(yù)測(cè)值,試驗(yàn)采取的Item CF的協(xié)同過(guò)濾算法正好彌補(bǔ)了這樣的缺陷。在構(gòu)建圖書(shū)推薦系統(tǒng)中Item CF算法利用用戶的評(píng)分,離線分析計(jì)算物品之間的相似度,經(jīng)過(guò)得到的用戶對(duì)未評(píng)分項(xiàng)目的預(yù)測(cè)評(píng)分,快速推薦出高度相關(guān)的相似項(xiàng)目。
Mahout傳統(tǒng)協(xié)同過(guò)濾算法中常以Euclidean Distance Similarity[10]系數(shù)計(jì)算項(xiàng)目之間的相似度。設(shè)Uij表示用戶U對(duì)項(xiàng)目i和項(xiàng)目j共同評(píng)分的集合,項(xiàng)目i和項(xiàng)目j之間的相似性為:
sim(i,j)=■,
其中,Ru,i和Ru,j分別表示用戶U對(duì)項(xiàng)目i和j的評(píng)分。
2.3 基于項(xiàng)目聚類改進(jìn)的協(xié)同過(guò)濾推薦算法
在高校用戶對(duì)圖書(shū)進(jìn)行評(píng)分時(shí),由于用戶的主觀性,有些用戶評(píng)分高,而有些用戶評(píng)分相對(duì)低,傳統(tǒng)的Euclidean Distance Similarity系數(shù)沒(méi)有考慮用戶的評(píng)分尺度,無(wú)法消除用戶評(píng)分的主觀性。試驗(yàn)采用的Adjusted Cosin Similarity系數(shù)將每個(gè)項(xiàng)目的評(píng)分減去該項(xiàng)目所有用戶評(píng)分的均值,消除了用戶的主觀性評(píng)分,同時(shí)首先通過(guò)項(xiàng)目聚類將高度相似的項(xiàng)目聚集到若干個(gè)集合中。
2個(gè)項(xiàng)目的相似度常用余弦相似性來(lái)計(jì)算,即2個(gè)向量之間的夾角余弦值。余弦值的范圍在[-1,1]之間(值越趨近于1,相應(yīng)的相似度也越高)。
Cosin Similarity系數(shù)相似性計(jì)算公式為:
sim(i,j)=cos(i,j)=■=
■,
其中Ui和Uj分別表示用戶U對(duì)項(xiàng)目i和項(xiàng)目j評(píng)分過(guò)的集合。
Adjusted Cosin Similarity系數(shù)相似性計(jì)算公式為:
sim(i,j)=■,
其中■u表示用戶U對(duì)所有項(xiàng)目的平均評(píng)分。
為了驗(yàn)證算法的有效性,聚類數(shù)用k1表示,試驗(yàn)選擇聚類數(shù)為30。在項(xiàng)目i的前k個(gè)聚類(c1,c2,……ck)中找到項(xiàng)目的最近鄰數(shù)k2,試驗(yàn)選擇近鄰數(shù)為20。調(diào)用Mahout提供的Recommonder Job算法,以項(xiàng)目相似度作為權(quán)重,進(jìn)行配置與調(diào)優(yōu),計(jì)算出用戶U對(duì)任意項(xiàng)目i的預(yù)測(cè)評(píng)分值。選取前Top N個(gè)項(xiàng)目推薦給用戶U。計(jì)算用戶對(duì)項(xiàng)目的評(píng)分,用戶U對(duì)項(xiàng)目i的評(píng)分:
Pu,i=■
其中,j為k個(gè)項(xiàng)目評(píng)分組成的集合,Ru,j為用戶U對(duì)項(xiàng)目j的評(píng)分。
3 結(jié)果與分析
3.1 數(shù)據(jù)獲取
為了驗(yàn)證Hadoop的性能,測(cè)試采用河北農(nóng)業(yè)大學(xué)東、西校區(qū)圖書(shū)館近幾年收集的信息,形成Book-Crossing數(shù)據(jù)集,并將用戶對(duì)圖書(shū)的評(píng)分信息形成BX-Books-Ratings數(shù)據(jù)集。同時(shí)為了驗(yàn)證改進(jìn)的算法精確性,選取了河北農(nóng)業(yè)大學(xué)圖書(shū)館計(jì)算機(jī)系的10 000本書(shū),通過(guò)計(jì)算機(jī)系1 000名學(xué)生對(duì)10 000本書(shū)的評(píng)分,形成數(shù)據(jù)集Books-Library-Ratings。由于Mahout下處理的文件為Sequence File格式,因此需要將上述文件轉(zhuǎn)換成Sequence File格式。
3.2 推薦算法效果評(píng)估
推薦算法的效果評(píng)估主要分為兩個(gè)方面,一是性能評(píng)估,二是推薦質(zhì)量評(píng)估。
3.2.1 性能評(píng)估 為了驗(yàn)證基于Hadoop中HDFS分布式文件系統(tǒng)和Map/Reduce計(jì)算模型的云平臺(tái)能夠提升協(xié)同過(guò)濾推薦算法的執(zhí)行效率,試驗(yàn)用BX-Books-Ratings數(shù)據(jù)集進(jìn)行測(cè)試。通過(guò)原始的Mahout 協(xié)同過(guò)濾推薦算法,采用Top10的方式對(duì)圖書(shū)館中所有用戶推薦排名前10的書(shū)目;逐步增加偽分布式集群的節(jié)點(diǎn)數(shù)量,記錄下相應(yīng)節(jié)點(diǎn)數(shù)消耗的時(shí)間,結(jié)果見(jiàn)圖2。由圖2可以看出,隨著Map/Reduce模型節(jié)點(diǎn)數(shù)量的增加,計(jì)算時(shí)間相應(yīng)減少,但遞減的幅度也在不斷減少。因?yàn)殡S著節(jié)點(diǎn)的數(shù)量不斷增加,Map/Reduce 操作需要的時(shí)間也越來(lái)越長(zhǎng);同時(shí)試驗(yàn)部署的偽分布式Hadoop 集群是在2臺(tái)物理機(jī)上虛擬出的PC 集群,硬件總體的性能是一定的,節(jié)點(diǎn)的增加只是資源利用率的提高。如果采用多臺(tái)物理機(jī)部署Hadoop 完全分布式集群,計(jì)算效率則會(huì)顯著提升。
3.2.2 推薦質(zhì)量評(píng)估 平均絕對(duì)誤差MAE(Mean absolute error)方法通過(guò)比較得到的預(yù)測(cè)值和用戶的實(shí)際評(píng)分值之間的偏差來(lái)計(jì)算結(jié)果的準(zhǔn)確性,MAE值越小,表明推薦的越精確,質(zhì)量越好。設(shè)預(yù)測(cè)的用戶評(píng)分集合表示為{p1,p2,…,pn},對(duì)應(yīng)的實(shí)際用戶評(píng)分集合為{q1,q2,……qn},其計(jì)算公式為:
MAE=■。
Mahout算法庫(kù)中Recommender Evaluator就是利用MAE來(lái)測(cè)試推薦的精確性?,F(xiàn)將數(shù)據(jù)集Books-Library-Ratings劃分成兩個(gè)部分:訓(xùn)練集與測(cè)試集。從用戶評(píng)分表Books-Library-Ratings中隨機(jī)選20個(gè)用戶,分別用原始推薦引擎Original Recommender和改進(jìn)后的Improved Recommender推薦引擎計(jì)算出Top10列表及其預(yù)測(cè)值,在此基礎(chǔ)上,使用Recommender Evaluator Runner算法評(píng)估器分別計(jì)算出20個(gè)用戶的MAE值,以作推薦效果測(cè)試和比較。如運(yùn)行傳統(tǒng)協(xié)同過(guò)濾推薦算法得到用戶56的推薦列表(Top10)及對(duì)應(yīng)預(yù)測(cè)評(píng)分值,可從實(shí)際評(píng)分表獲取用戶56 實(shí)際的評(píng)分值,利用Recommender Evaluator計(jì)算出傳統(tǒng)推薦算法下用戶56的MAE值=1.46。利用改進(jìn)基于項(xiàng)目聚類協(xié)同過(guò)濾推薦算法計(jì)算出用戶56的推薦列表(Top10)及對(duì)應(yīng)預(yù)測(cè)評(píng)分值,從實(shí)際評(píng)分表獲取用戶56實(shí)際的評(píng)分值,再利用Recommender Evaluator計(jì)算出改進(jìn)推薦算法下用戶56的MAE值=1.13。對(duì)用戶56而言,推薦的準(zhǔn)確率提高了(1.46-1.13)/1.46×100%=22.6%。
其他19個(gè)最近鄰用戶MAE的計(jì)算過(guò)程與此相同,依次進(jìn)行計(jì)算,利用Recommender Evaluator Runner評(píng)估器分別依次基于原始推薦算法下和改進(jìn)推薦算法,計(jì)算出其他19個(gè)用戶的MAE值,結(jié)果見(jiàn)圖3。對(duì)MAE值結(jié)果進(jìn)行比較,可以看出改進(jìn)算法的MAE值總體上比原始的協(xié)同過(guò)濾算法的MAE值要更低,這表明改進(jìn)的基于項(xiàng)目聚類的協(xié)同過(guò)濾算法的整體推薦準(zhǔn)確率要比原始的協(xié)同過(guò)濾推薦算法更高,平均提高了19.4%。同時(shí)也表明用戶評(píng)分的主觀性對(duì)推薦結(jié)果的準(zhǔn)確性有較大的影響。
4 小結(jié)
試驗(yàn)結(jié)果表明,基于Hadoop分布式計(jì)算框架的河北農(nóng)業(yè)大學(xué)圖書(shū)推薦系統(tǒng)引擎通過(guò)搭建分布式計(jì)算平臺(tái),利用集群計(jì)算與存儲(chǔ)能力,有效且快速的完成了個(gè)性化的圖書(shū)推薦,性能有了明顯提高。
Mahout是一個(gè)很強(qiáng)大的數(shù)據(jù)挖掘工具,通過(guò)試驗(yàn)中提出的改進(jìn)的基于項(xiàng)目聚類的協(xié)同過(guò)濾推薦算法,計(jì)算所得的預(yù)測(cè)評(píng)分更加接近于用戶的實(shí)際評(píng)分;雖然有個(gè)別用戶改進(jìn)后的協(xié)同過(guò)濾推薦算法的MAE值要大于原始協(xié)同過(guò)濾推薦算法的MAE值,即改進(jìn)后的協(xié)同過(guò)濾算法推薦的準(zhǔn)確率下降了,但整體有了提高。下一步要對(duì)Mahout中推薦算法進(jìn)行改進(jìn),參數(shù)還要調(diào)優(yōu),同時(shí)研究用戶的其他行為,不斷提高推薦效率和精確程度。
參考文獻(xiàn):
[1] 華小琴.我國(guó)高校數(shù)字圖書(shū)館個(gè)性化服務(wù)探究[J].圖書(shū)館理論與實(shí)踐,2014(5):85-88.
[2] 項(xiàng) 亮.推薦系統(tǒng)實(shí)踐[M].北京:人民郵電出版社,2014.58-61.
[3] TOM W. Hadoop:The Definitive Guide[M].USA:O′Reilly Media,Inc,2015.166-178.
[4] DANIL Z,SUDHEESH N. Hadoop Cluster Deployment,Securing Hadoop[M].USA:Packt Publishing,2013.64-76.
[5] 樊 哲.Mahout算法解析與案例實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2014.24-32.
[6] JANNACH D,ZANKER M,F(xiàn)ELFERNIG A.Recommender Systems:An Introduction[M].Cambridge,UK:Cambridge University Press,2012.8-14.
[7] 奉國(guó)和,黃家興.基于Hadoop與Mahout的協(xié)同過(guò)濾圖書(shū)推薦研究[J].圖書(shū)情報(bào)工作,2013,57(18):116-121.
[8] 李龍飛.基于Hadoop+Mahout的智能終端云應(yīng)用推薦引擎的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2013.
[9] 余 暉.基于Mahout的聚類算法研究[D].上海:上海師范大學(xué),2014.
[10] 馬 寧.基于Mahout的推薦系統(tǒng)研究與實(shí)現(xiàn)[D].蘭州:蘭州大學(xué),2013.