花維
(西安外事學院,陜西西安 710077)
互聯(lián)網(wǎng)技術(shù)的普及與發(fā)展改變了人們的生活、生產(chǎn)方式,互聯(lián)網(wǎng)技術(shù)已經(jīng)滲透進了生活的各種場景,如購物、娛樂、社交通信等,人們充分享受著互聯(lián)網(wǎng)帶來的便利。但另一方面,互聯(lián)網(wǎng)上信息的極度豐富也使人們面臨著信息過剩的問題,大量沒有價值的不良信息占據(jù)著人們寶貴的接受信息時間。搜索引擎的出現(xiàn)使得人們可以根據(jù)其意愿進行信息篩選,限制用戶獲取信息的范圍,較大程度地緩解無用信息的干擾。近年來,推薦系統(tǒng)的出現(xiàn)更是使得互聯(lián)網(wǎng)可以根據(jù)用戶的興趣進行信息推送,大幅度提升了用戶獲取信息的效率與用戶體驗。推薦系統(tǒng)的本質(zhì)也是一個搜索系統(tǒng),在人們享受便利的同時也在互聯(lián)網(wǎng)上留下了自身的各種“活動軌跡”。通過這些軌跡提取用戶標簽,結(jié)合用戶信息構(gòu)建用戶畫像。然后,將不同用戶的不同畫像輸入到網(wǎng)頁的搜索框,即可獲得該用戶感興趣的信息,達到個性化匹配的目的[1-4]。
為了提升讀者獲取其感興趣圖書的效率并提升閱讀體驗,該文對圖書的推薦系統(tǒng)進行了研究。通過引入系統(tǒng)工程理論指導設(shè)計,梳理圖書推薦的主要流程,確定系統(tǒng)的軟件架構(gòu);引入Hadoop 大數(shù)據(jù)處理框架,基于MapReduce 編程模式,實現(xiàn)了推薦算法的并行化處理,提升推薦系統(tǒng)的計算效率。
圖書在線推薦系統(tǒng)的研究與設(shè)計是一項龐大的軟件工程任務(wù),為達到該目的,需要有科學的理論指導。在軟件工程理論中,系統(tǒng)的需求分析是軟件設(shè)計的第一步。通過需求分析可以明確系統(tǒng)設(shè)計的目標,同時在這一過程中將目標進行逐級拆解,轉(zhuǎn)換為計算機容易實現(xiàn)的功能模塊,逐步轉(zhuǎn)化為最終的軟件系統(tǒng)[5-9]。
圖書在線推薦系統(tǒng)可以實現(xiàn)高效、精準的書籍推薦。精準的推薦對于互聯(lián)網(wǎng)企業(yè)增加用戶粘性,提升電子商務(wù)網(wǎng)站的轉(zhuǎn)化率具有重要意義。高效性的特點,要求推薦系統(tǒng)必須具有較強的實時性,具體體現(xiàn)在當用戶特征、圖書信息等要素發(fā)生變化時,推薦的內(nèi)容也可以及時、快速地更新。精準性要求推薦的書籍對于用戶有較好的接受度,推薦書籍應(yīng)當具有一定的點擊率?;谝陨系哪康募跋嚓P(guān)分析,設(shè)計系統(tǒng)的相關(guān)功能模塊,如圖1 所示。
圖1 圖書推薦系統(tǒng)功能模型
在圖1中,圖書推薦系統(tǒng)包含圖書元數(shù)據(jù)庫、用戶特征庫、圖書挖掘子系統(tǒng)、行為監(jiān)控子系統(tǒng)、用戶特征子系統(tǒng)、搜索引擎子系統(tǒng)、頁面推薦子系統(tǒng)。從圖1 可以看出,推薦系統(tǒng)的設(shè)計與實現(xiàn)重點在于各項數(shù)據(jù)特征的搜集,其實質(zhì)在于讀者特征與圖書特征間的精準匹配。想要達到該目的,既需要通過搜集讀者的相關(guān)歷史數(shù)據(jù)建立精準的用戶畫像,也需要建立圖書的相關(guān)數(shù)據(jù)庫,然后找到二者間的聯(lián)系[10-15]。
對于用戶特征庫,主要依靠用戶注冊時的相關(guān)基礎(chǔ)信息,如性別、年齡、職業(yè)、興趣等作為推薦的冷啟動。當用戶有瀏覽記錄、收藏記錄時,逐步增加這些對于推薦的權(quán)重。
對于圖書元庫的建立,該文主要根據(jù)圖書類別進行分類,同時記錄相關(guān)的用戶瀏覽信息。
基于以上的系統(tǒng)功能分析,建立如圖2 所示的系統(tǒng)推薦流程[16]。
圖2 系統(tǒng)推薦流程
在圖2中,結(jié)合用戶的行為數(shù)據(jù)庫,從中提取特征行為,其次結(jié)合行為屬性形成特征向量。然后利用特征向量,從數(shù)據(jù)庫中篩選符合相關(guān)約束的圖書元作為初始的推薦結(jié)果。隨后,通過系統(tǒng)內(nèi)置的相關(guān)規(guī)則進行過濾,再結(jié)合用戶反饋以及書籍的自有屬性進行排名。最終附加上推薦的原因,給出推薦結(jié)果。
圖3 給出了系統(tǒng)的軟件架構(gòu),為了提升系統(tǒng)推薦的實時性,系統(tǒng)采用分層架構(gòu)。
圖3 圖書推薦系統(tǒng)的軟件架構(gòu)
通過分層,可以降低業(yè)務(wù)層、推薦算法層與存儲層間的耦合程度,每個層間只需給其余層次提供合適的軟件接口即可。該種設(shè)計使得系統(tǒng)的軟件結(jié)構(gòu)更清晰,提升了系統(tǒng)后期的可維護性。
對于推薦系統(tǒng)而言,其核心在于推薦算法的設(shè)計。文中推薦系統(tǒng)使用的算法主要包括基于內(nèi)容的推薦算法與系統(tǒng)過濾算法。
基于內(nèi)容的推薦算法,需要依靠內(nèi)容特征的提取,文中主要是對書籍特征的提取。由于該方法不需要用戶信息,適用于新用戶注冊時進行系統(tǒng)冷啟動。內(nèi)容推薦的關(guān)鍵在于對系統(tǒng)內(nèi)m本書建立p維的空間,然后基于用戶的愛好與興趣,利用用戶與書本間的鄰近度進行推薦。當基于內(nèi)容進行推薦時,系統(tǒng)鄰近度的計算方式如式(1)所示:
其中,i、j分別代表了用戶向量與書本向量,這兩個向量將書本、用戶的特征作為向量的元素。
當系統(tǒng)內(nèi)產(chǎn)生用戶的日志信息后,系統(tǒng)將使用過濾規(guī)則進行書籍的推薦。該規(guī)則采用與目標相似度較高的用戶或書籍進行推測,推斷出用戶對于某些書籍的潛在興趣。在推斷過程中,主要借助夾角的余弦值衡量該種相似性,其計算方法如式(2)所示:
由于圖書推薦系統(tǒng)的推薦涉及了大數(shù)據(jù)的處理與挖掘,因此,需要數(shù)據(jù)密集型分布式計算框架的支持。該文選取的計算框架為Hadoop,該框架可以通過多個基礎(chǔ)計算機集群的聯(lián)合獲得超高的計算能力,且具備良好的擴展性。在Hadoop 中包含了Pig、Chukwa、Hive 等多個項目結(jié)構(gòu),文中涉及的主要有分布式文件系統(tǒng)HDFS 與Hadoop 的編程模式MapReduce。對于HDFS,通過表1 的環(huán)境部署了七個節(jié)點的分布式存儲系統(tǒng)。其中,一個是Master 節(jié)點,六個是Slaver 節(jié)點。
表1 仿真環(huán)境
對于Hadoop 的編程模式,其實現(xiàn)了計算過程中動態(tài)的控制計算節(jié)點,保證了Hadoop 系統(tǒng)的靈活性與可擴展性。在編程中,MapReduce 只受數(shù)據(jù)當前行的影響,其過程包括Map 與Reduce 兩個節(jié)點。實現(xiàn)過程如式(3)所示:
圖書的推薦高度依賴于圖書度的統(tǒng)計,圖書度反映了圖書瀏覽或被購買的頻次,是圖書熱門程度的重要體現(xiàn),通過MapReduce 實現(xiàn)圖書度的統(tǒng)計方法如下文所述。
在該系統(tǒng)中,讀入用戶日志文件,基礎(chǔ)的存儲格式為:<用戶ID,商品ID,用戶評分,時間戳>。在圖4中,給出了用戶ID 為1、2、3 的用戶日志文件。經(jīng)過Map后,系統(tǒng)得到的結(jié)果為<商品ID,所有用戶的購買頻次>。隨后,利用Reduce 函數(shù)合并結(jié)果,以商品ID 為主鍵將相同商品的購買次數(shù)相加,最終得到<商品ID,商品度>作為MapReduce 的輸出結(jié)果。
圖4 MapReduce編程模式
通過引入MapReduce 編程模式,該系統(tǒng)可以靈活地定義Map 與Reduce 中的主鍵進行計算,統(tǒng)計各項數(shù)據(jù)作為系統(tǒng)的推薦依據(jù)。
為了評估文中推薦算法在Hadoop 上的部署效果,使用Amazon 的開放數(shù)據(jù)集。在該數(shù)據(jù)集中,包含了581 921 位用戶對于187 213 部圖書的共112 340 015 次的圖書打分記錄。
圖5 給出了算法在表1 Hadoop 集群上的運行時間。其中,橫軸代表Hadoop 集群中計算機的數(shù)量,縱軸代表算法的運算時間,圖例代表了一次性推薦不同數(shù)量的圖書M。可以看出,推薦算法的運行效率受到推薦圖書數(shù)量與Hadoop 節(jié)點數(shù)兩個方面的影響。值得注意的是,對于文中的推薦算法而言,當推薦的圖書種類數(shù)較少時(M為100 或200),集群大小對于算法計算時間的影響并不顯著。當推薦的圖書種類數(shù)較大時(M為3 000 或5 000),算法計算的時間隨著集群數(shù)量增加呈線性減小的趨勢。當M=5 000時,使用七個節(jié)點計算的時間約為890 s,而單節(jié)點的計算時間為4 400 s,時間約為單節(jié)點的1/5。因此對于Hadoop 平臺,需要初始化足夠數(shù)目的Mapper 文件才能充分發(fā)揮其大數(shù)據(jù)處理的優(yōu)勢。
圖5 基于Hadoop的算法運行效率
最終,結(jié)合圖3 給出的系統(tǒng)軟件框架實現(xiàn)系統(tǒng)功能。在實現(xiàn)過程中,用戶對于圖書的打分信息使用JSP 調(diào)用JDBC后,通過數(shù)據(jù)存儲模塊寫入數(shù)據(jù)庫。系統(tǒng)內(nèi)的推薦業(yè)務(wù)借助Hadoop 平臺,結(jié)合圖4的MapReduce 編程模式進行實現(xiàn)。在最終實現(xiàn)的系統(tǒng)個人主頁的界面中,共包含了四個功能模塊,系統(tǒng)界面通過JSP 調(diào)用相關(guān)的數(shù)據(jù)接口實現(xiàn)。個人主頁界面上展示了用戶的個人信息,且提供了搜索功能。系統(tǒng)會結(jié)合當前的讀書熱點給出“每日一薦”,根據(jù)用戶的歷史讀書行為以及用戶信息給出“猜你喜歡”的相關(guān)推薦。
文中對圖書推薦的相關(guān)方法進行了研究,通過Hadoop 部署了系統(tǒng)中用戶特征、用戶行為日志等特征庫,實現(xiàn)了用戶特征到圖書內(nèi)容特征的匹配。Hadoop 大數(shù)據(jù)計算框架的引入提升了系統(tǒng)的計算能力與數(shù)據(jù)存儲能力,對于系統(tǒng)后續(xù)的擴展、升級也具有較高的實用價值。