羅新
(韓山師范學院計算機與信息工程學院,潮州521041)
隨著網(wǎng)絡(luò)信息量的不斷增長,人們從互聯(lián)網(wǎng)獲取自己感興趣信息變得越來越困難。于是各種個性化推薦系統(tǒng)相繼產(chǎn)生。但是對于傳統(tǒng)的運行于單機模式的推薦算法,在面臨海量用戶數(shù)據(jù)的時候,在可行性、效率上都變得越來越不適應(yīng)。所以必須開發(fā)出能對大數(shù)據(jù)進行并行計算處理的個性化推薦平臺[1-2]。
Hadoop[3]作為開源的并行計算機平臺,提供了HDFS和MapReduce兩大核心功能。HDFS是分布式存儲系統(tǒng),可以冗余存儲海量的數(shù)據(jù)。而MapReduce則是構(gòu)建在HDFS上的分布式并行計算架構(gòu)。
本文在開發(fā)的陶瓷信息網(wǎng)站的基礎(chǔ)上,根據(jù)用戶對網(wǎng)站的訪問日志,對產(chǎn)品的關(guān)注度、評分,以及發(fā)布的產(chǎn)品供需等信息,對它們進行預(yù)處理后,得到一個用戶對產(chǎn)品的興趣度文件,然后在Hadoop平臺上運行推薦算法進行計算,最后得出一個產(chǎn)品推薦列表。
陶瓷信息聚合平臺網(wǎng)站是一個前端采用BootStrap框架,應(yīng)用HTML5、AJAX、jQuery等相關(guān)技術(shù),后臺采用Struts+Hiberate+Spring框架技術(shù)的網(wǎng)站。系統(tǒng)的功能包括:用戶注冊與管理,陶瓷產(chǎn)品的上架與展示,供求信息的發(fā)布,各類信息的搜索等功能。網(wǎng)站的布局如圖1所示。
圖1 陶瓷信息聚合平臺網(wǎng)站界面
為了獲取用戶對產(chǎn)品的興趣度文件,可以對幾種數(shù)據(jù)源進行處理。一種是用戶訪問日志文件,另一種是保存在數(shù)據(jù)庫中的用戶對產(chǎn)品的評分、用戶發(fā)布的供需信息等。
為了更深入的了解網(wǎng)站訪客的使用習慣,可以對網(wǎng)站的訪問日志進行分析。例如下面一條是Tomcat服務(wù)器上記錄的訪問日志的信息。
127.0.0.1--[01/Nov/2017:13:37:09+0800]"GET/cz_ceramics/images/product/no-photo.jpg HTTP/1.1"200 77537 http://localhost:8080/cz_ceramics/chances_findAll.action?page=1 Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/61.0.3163.100 Safari/537.36,其表達的信息如表1所示。
表1 日志字段信息
通過日志分析,可以統(tǒng)計出一個用戶的對某個產(chǎn)品頁面的訪問頻度。而用戶對某種產(chǎn)品的評分或者是否進行了評論,可以從另一個側(cè)面反映了用戶對該產(chǎn)品的興趣度。用戶如果對某件產(chǎn)品發(fā)布了供貨或者需求信息,這足以證明用戶對該產(chǎn)品具有高興趣度。最后綜合這三個方面,給每一個維度一個權(quán)值,綜合計算出一個用戶對某件產(chǎn)品的興趣度。興趣度的值由0至5,以0.5相隔,即分為11個等級。用戶興趣度文件是由格式為
在Hadoop平臺根據(jù)用戶興趣度文件計算推薦列表,需要進行如下五步。
Step1:生成用戶興趣度向量,它的格式是
Step2:計算產(chǎn)品與產(chǎn)品之間的相似度。根據(jù)第一步的輸出的評分矩陣,對Item與Item之間相似度進行計算。這里我們采用余弦相似度計算公式,公式如下:
Itemi表示所有用戶對ID為i的產(chǎn)品的評分向量,其形式為
Step3:對第一步生成的用戶興趣度矩陣進行轉(zhuǎn)置,得到矩陣的行向量的形式為
Step4:用第二步輸出的Item相似度矩陣乘以第三步輸出的用戶興趣度矩陣。就可以得到用戶對于那些并未評分產(chǎn)品的推薦度。原理就是用戶已經(jīng)對某些產(chǎn)品進行評分,而其它沒有評分的項目可以根據(jù)與那些已經(jīng)評分的產(chǎn)品的相似度,得到一個推薦的分值。
Step5:對第四步產(chǎn)生的推薦矩陣與第三步的輸出矩陣進行對比,對那些用戶已經(jīng)評分的Item,在對應(yīng)的矩陣位置0,然后再對Item按分值按從高到低進行排序,就可以為用戶生成對應(yīng)的推薦產(chǎn)品Top n列表。
以上的每一步都可以用一個MapReduce作業(yè)來實現(xiàn)。例如第一步的輸入是一個用戶評分文件,Map/Reduce的流程可表示如下:
Map:
Reduce:
下面是第二步實現(xiàn)的Map過程的核心代碼:try
{
String row_matrix1=value.toString().split(" ")[0];
String[]column_value_array_matrix1=value.toString().split(" ")[1].split(",");
double denominator1=0;
for(String column_value:column_value_array_matrix1)
{
String score=column_value.split("_")[1];
denominator1+=Double.valueOf(score)*Double.valueOf(score);
}
denominator1=Math.sqrt(denominator1);
for(String line:cacheList)
{
String row_matrix2=line.toString().split(" ")[0];
String[]column_value_array_matrix2=line.toString().split(" ")[1].split(",");
for(String column_value:column_value_array_matrix2)
{
String score=column_value.split("_")[1];
denominator2+=Double.valueOf(score)*Double.valueOf(score);
}
denominator2=Math.sqrt(denominator2);
double numerator=0;
for(String column_value_matrix1:column_value_array_matrix1)
{
根據(jù)形勢任務(wù)的需要,結(jié)合轄區(qū)地理位置和氣候條件,密切關(guān)注轄區(qū)社會動態(tài),按照“組織健全,訓練有素,規(guī)模適當,反應(yīng)迅速”的要求,建立民兵應(yīng)急隊伍,提升應(yīng)急分隊“平時服務(wù)、急時應(yīng)急、戰(zhàn)時應(yīng)戰(zhàn)”的能力。針對“人員分散集中難、外出務(wù)工在位少、崗位職責協(xié)調(diào)難”等現(xiàn)實問題,按照“專業(yè)對口、因地制宜、就地取材、就近支援”的原則,及時調(diào)整優(yōu)化結(jié)構(gòu),確保配齊建強應(yīng)急隊伍。
String column_matrix1=column_value_matrix1.split("_")[0];
Stringvalue_matrix1=column_value_matrix1.split("_")[1];
for(String column_value_matrix2:column_value_array_matrix2)
{
if(column_value_matrix2.startsWith(column_matrix1+"_"))
{
String value_matrix2=column_value_matrix2.split("_")[1];
numerator+=Double.valueOf(value_matrix1)*Double.valueOf(value_matrix2);
}
}
}
double cos=numerator/(denominator1*denominator2);
if(cos==0)
{
continue;
}
outKey.set(row_matrix1);
outValue.set(row_matrix2+"_"+df.format(cos));context.write(outKey,outValue);
在主函數(shù)中,首先把第一步的輸出添加到HDFS的cache上,然后在Mapper類的setup方法中,把cache文件上的數(shù)據(jù)讀入到ArrayList類型變量cacheList中。而第二步的Job的Map過程的Input文件也是第一步的輸出。通過計算兩個矩陣每一行之間的余弦相似度,最終得到Item相似度矩陣。
為了證明推薦算法的可行性,我們架設(shè)了一個具有1個NameNode,5個DataNode的Hadoop完全分布式平臺。其中DataNode的硬件配置為Intel Core i7 4790,內(nèi)存5G。Hadoop平臺版本為2.5.4。經(jīng)過數(shù)據(jù)預(yù)處理后,生成用戶興趣度文件,其行格式為
表2 算法各個階段的運行狀況
通過分析表2的數(shù)據(jù),我們可以看出對于一個較小的輸入數(shù)據(jù)集,算法最終會都會產(chǎn)生一個較大的數(shù)據(jù)輸出。尤其是在Step4中,是計算用戶對各個Item的興趣度,它的輸入是Step2及Step3的輸出,這是相當于兩個維度分別為[89649,11589]的矩陣相乘,所以輸入數(shù)據(jù)集大小為22.6M,輸出卻為1.4G。從運行過程來看,小數(shù)據(jù)集并且算法運算密集度大的作業(yè)運行在Hadoop平臺上并無優(yōu)勢。因為涉及到數(shù)據(jù)分片、容器分配的問題,Hadoop平臺運行小數(shù)據(jù)集,并不能發(fā)揮集群的最佳性能。對于Step5的運算,它把Step1和Step4的輸出作來輸入,對用戶的興趣度進行篩選,去除用戶已經(jīng)評分過的項目,剩下的就是用戶以前沒有評分過的Item的推薦度。因為Step5運算的輸入是較大的數(shù)據(jù)集(1.4G),這時Hadoop平臺會對數(shù)據(jù)自動分片,一共創(chuàng)建11個Container。通過觀察各個數(shù)據(jù)結(jié)點CPU、內(nèi)存、文件I/O的占用率,可以看到集群運算能力的利用率得到了很大的提高。這說明應(yīng)用Hadoop平臺運行推薦算法處理大數(shù)據(jù)集是具有可行性的,而且能發(fā)揮性能上優(yōu)勢。
本文在開發(fā)的陶瓷信息網(wǎng)站的基礎(chǔ)上,通過用戶訪問日志、用戶發(fā)布的相關(guān)信息的基礎(chǔ)上,整理出用戶對產(chǎn)品的興趣度文件,然后在Hadoop平臺上運行推薦算法,得到為用戶推薦的產(chǎn)品列表。為了更好利用Hadoop平臺進行推薦算法的運算,應(yīng)該在Hadoop平臺參數(shù)調(diào)優(yōu),推薦算法的改進等方面進行加強,這是下一步的努力方向。
[1]肖強,朱慶華.Hadoop環(huán)境下的分布式協(xié)同過濾算法設(shè)計與實現(xiàn)[J].現(xiàn)代圖書情報技術(shù),2013(1):83-89.
[2]魏曉航.大數(shù)據(jù)平臺下的互聯(lián)網(wǎng)廣告點擊率預(yù)估模型[J].計算機工程與設(shè)計,2017,38(9):2504-2508.
[3]Tom White.Hadoop權(quán)威指南[M].華東師范大學數(shù)據(jù)科學與工程學院.譯.北京:清華大學出版社