張文澤
(長(zhǎng)江大學(xué)電子信息學(xué)院,湖北 荊州434000)
隨著當(dāng)今互聯(lián)網(wǎng)的快速發(fā)展,每天會(huì)有海量信息產(chǎn)生,互聯(lián)網(wǎng)用戶容易迷失在信息海洋中無(wú)法找到目標(biāo)內(nèi)容。為了解決這種問(wèn)題,推薦系統(tǒng)孕育而生。推薦系統(tǒng)是解決在“信息過(guò)載”下,用戶如何高效獲得自己感興趣目標(biāo)信息的問(wèn)題。從工程的角度來(lái)推薦系統(tǒng)可以分為兩大部分:數(shù)據(jù)部分和模型部分。數(shù)據(jù)部分主要指推薦系統(tǒng)所需數(shù)據(jù)流的工程實(shí)現(xiàn)。大數(shù)據(jù)優(yōu)于好算法是指基于小數(shù)據(jù)的推薦效果不如擁有大量可用數(shù)據(jù)的推薦效果理想。而模型部分指的是推薦模型的相關(guān)工程實(shí)現(xiàn),根據(jù)應(yīng)用階段的不同,可進(jìn)一步劃分。
Hadoop是能夠?qū)A繑?shù)據(jù)進(jìn)行分布式計(jì)算處理的框架,它的核心是分布式文件系統(tǒng)(HDFS)和MapReduce。HDFS支持處理超大規(guī)模的文件,采用了主從結(jié)構(gòu)模型,通常一個(gè)HDFS集群包括一個(gè)名稱節(jié)點(diǎn)和若干個(gè)數(shù)據(jù)節(jié)點(diǎn)。名稱節(jié)點(diǎn)它負(fù)責(zé)管理文件系統(tǒng)的命名空間以及客戶端的訪問(wèn)請(qǐng)求。而數(shù)據(jù)節(jié)點(diǎn)它負(fù)責(zé)處理文件系統(tǒng)客戶端的讀寫請(qǐng)求。MapReduce它將復(fù)雜的并行計(jì)算的過(guò)程抽象到兩個(gè)函數(shù):Map和Reduce。通過(guò)Map對(duì)數(shù)據(jù)進(jìn)行分割,然后shuffle過(guò)程會(huì)對(duì)Map的輸出進(jìn)行排序和合并,最后交給Reduce處理。
批處理大數(shù)據(jù)架構(gòu)采用了分布式文件處理系統(tǒng),MapReduce代替了原來(lái)傳統(tǒng)文件系統(tǒng)和數(shù)據(jù)庫(kù)的存儲(chǔ)和處理方式,批處理大數(shù)據(jù)架構(gòu)示意圖如圖1所示。
圖1 批處理大數(shù)據(jù)架構(gòu)示意圖
推薦系統(tǒng)在獲知“用戶信息”“物品信息”“場(chǎng)景信息”的基礎(chǔ)上,通過(guò)構(gòu)建好的函數(shù)模型,預(yù)測(cè)用戶對(duì)候選物品的喜好程度,再根據(jù)喜好程度對(duì)候選物品進(jìn)行排序生成TOP-N列表。圖2是根據(jù)推薦系統(tǒng)的定義,抽象得到的邏輯框架圖。
圖2 推薦系統(tǒng)邏輯框架圖
協(xié)同過(guò)濾是協(xié)同所有的反饋對(duì)海量的信息進(jìn)行過(guò)濾,從中篩選出目標(biāo)用戶可能感興趣信息的推薦過(guò)程。按照推薦內(nèi)容劃分,主要有基于用戶的協(xié)同過(guò)濾(UserCF)和基于物品的協(xié)同過(guò)濾(ItemCF)。UserCF主要是用戶相似度的計(jì)算,目標(biāo)用戶的相似用戶對(duì)目標(biāo)物品的評(píng)價(jià)是正面的,則可以預(yù)測(cè)目標(biāo)用戶對(duì)物品的評(píng)價(jià)也是正面的。而ItemCF主要是計(jì)算物品的相似度,找到目標(biāo)用戶的歷史正反饋的物品,通過(guò)與正反饋物品相似度進(jìn)一步排序和推薦。兩者應(yīng)用場(chǎng)景也有不同,UserCF具有社交特效,不會(huì)集中在固定的內(nèi)容范圍。因此適用于新聞推薦等場(chǎng)景。ItemCF更適用于興趣變化較為穩(wěn)定的推薦場(chǎng)景,因此用它來(lái)推薦視頻是更好的選擇。
ItemCF是通過(guò)計(jì)算共現(xiàn)矩陣中物品向量的相似度得到相似矩陣,再通過(guò)與歷史正反饋物品的相似度,進(jìn)一步得到推薦物品的列表。具體步驟如下所示:
(1)根據(jù)用戶的所有歷史數(shù)據(jù),構(gòu)建用戶為行坐標(biāo),物品為列坐標(biāo)的共現(xiàn)矩陣。
(2)計(jì)算共現(xiàn)矩陣兩兩列向量的相似性,構(gòu)建n*n維的物品相似性矩陣。
兩個(gè)向量之間通常采用的相似度計(jì)算是余弦相似度來(lái)衡量,計(jì)算兩個(gè)物品向量之間的夾角大小,夾角越小,余弦相似度越大,兩個(gè)用戶越相似。
但是對(duì)于式(1)來(lái)說(shuō),為了消除熱門因素帶來(lái)的影響,使用平均分因素對(duì)各評(píng)分進(jìn)行修正,減小了用戶評(píng)分偏置的影響,采用皮爾遜相關(guān)系數(shù)對(duì)其修改完善。
其中,Ri,p代表用戶i對(duì)物品p的評(píng)分。Ri代表用戶i對(duì)所有物品的平均評(píng)分,P代表所有物品的集合。
僅僅針對(duì)用戶評(píng)分進(jìn)行相似度計(jì)算,而忽視了實(shí)際當(dāng)中每個(gè)人打分習(xí)慣的不同,通過(guò)引入物品平均分的方式,減少評(píng)分偏執(zhí)的影響,如式(3)所式。
其中,Rp代表物品p得到所有評(píng)分的平均分。
推薦算法的評(píng)價(jià)指標(biāo)主要分為在線評(píng)價(jià)和離線評(píng)價(jià),在線評(píng)價(jià)是通過(guò)實(shí)時(shí)點(diǎn)擊率得到推薦算法的性能衡量。但是在線評(píng)價(jià)不利于實(shí)驗(yàn)的開展,因此我們采用離線的方式。離線的方式是將訓(xùn)練集的信息作為算法的輸入進(jìn)行推薦,再將最后推薦的結(jié)果與測(cè)試集的結(jié)果作為對(duì)比。
在離線實(shí)驗(yàn)中,在對(duì)單個(gè)物品的評(píng)分預(yù)測(cè)任務(wù)中,我們一般會(huì)采用計(jì)算預(yù)測(cè)評(píng)分與真實(shí)評(píng)分之間的絕對(duì)誤差(MAE)或者均方根誤差(RMSE)進(jìn)行評(píng)估。
其中ri是第i個(gè)樣本點(diǎn)的真實(shí)值,ri是第i個(gè)樣本點(diǎn)的預(yù)測(cè)值,s是樣本點(diǎn)的個(gè)數(shù)。
本文使用的數(shù)據(jù)集是Netflix比賽的,整個(gè)數(shù)據(jù)集只有600MB,而實(shí)際的業(yè)務(wù)會(huì)達(dá)到GB,TB。數(shù)據(jù)集每行包含三個(gè)標(biāo)簽字段,分別是用戶的ID,電影的ID,用戶對(duì)電影的評(píng)分。
本文集群搭建是利用VMware搭建的,有一個(gè)Master節(jié)點(diǎn)和兩個(gè)Slave節(jié)點(diǎn)。系統(tǒng)使用的環(huán)境是Linux CentOS 7.0 ,配置如表1所示。
表1 分布式集群配置表
(1)測(cè)試MapReduce的運(yùn)行速度(圖3)
圖3 Ha doop平臺(tái)運(yùn)行效率
結(jié)果表明,MapReduce會(huì)把一個(gè)存儲(chǔ)在HDFS中的數(shù)據(jù)集切分成許多獨(dú)立的小數(shù)據(jù)塊處理,節(jié)點(diǎn)的個(gè)數(shù)越多,運(yùn)行效率會(huì)越高。
(2)為驗(yàn)證算法的有效性,與傳統(tǒng)的協(xié)同過(guò)濾進(jìn)行比較,使用相同數(shù)據(jù)集,在相同節(jié)點(diǎn)下進(jìn)行RMSE值對(duì)比實(shí)驗(yàn),所得結(jié)果如表2所示。
表2 對(duì)比實(shí)驗(yàn)結(jié)果
結(jié)果可以看出,在減少打分偏置和減低個(gè)人打分習(xí)慣因素下,基于物品的協(xié)同過(guò)濾比基于余弦相似度的協(xié)同過(guò)濾具有較低的RMSE值,RMSE值反映了預(yù)測(cè)值與真實(shí)值的偏離程度,即改進(jìn)后推薦效果更加理想。
借助大數(shù)據(jù)技術(shù)的推薦系統(tǒng)能很好地排除了用戶不需要的冗余信息的干擾,改善了用戶平時(shí)觀看視頻的體驗(yàn),推薦系統(tǒng)的研究是一個(gè)重要的研究方向,未來(lái)在該領(lǐng)域內(nèi)擁有更加廣闊的空間。