張盼盼,劉凱凱
(運(yùn)城學(xué)院,山西 運(yùn)城 044000)
如今人們會(huì)在互聯(lián)網(wǎng)上進(jìn)行各種各樣的活動(dòng),如觀看電影、購(gòu)買商品、閱讀書(shū)籍等,但隨著互聯(lián)網(wǎng)上信息的越來(lái)越多,人們發(fā)現(xiàn)越來(lái)越難以從海量信息中找出最適合自己的那些信息。圖書(shū)推薦系統(tǒng)的出現(xiàn),可以解決“信息過(guò)載”[1]的困擾。圖書(shū)推薦系統(tǒng)通過(guò)數(shù)據(jù)挖掘等大數(shù)據(jù)技術(shù),預(yù)測(cè)用戶的閱讀需求并推薦給用戶其最可能愛(ài)看的圖書(shū),將人們從海量圖書(shū)的選擇困難中拯救出來(lái)。
本文研究了推薦算法的基本概念及其實(shí)際應(yīng)用;通過(guò)基于物品的協(xié)同過(guò)濾算法[2]對(duì)用戶和圖書(shū)相關(guān)數(shù)據(jù)進(jìn)行計(jì)算,得出推薦結(jié)果,將推薦圖書(shū)展示給用戶,完成圖書(shū)推薦,為讀者解決實(shí)際問(wèn)題。
本文基于協(xié)同過(guò)濾算法的圖書(shū)推薦系統(tǒng)采用MTV 架構(gòu),來(lái)實(shí)現(xiàn)“高內(nèi)聚低耦合”。圖書(shū)推薦系統(tǒng)整體架構(gòu)如圖1 所示。
圖1 圖書(shū)推薦系統(tǒng)架構(gòu)圖
圖1 中,表現(xiàn)層的功能主要是將動(dòng)態(tài)生成的網(wǎng)頁(yè)文件進(jìn)行輸出,使用戶可以直觀的看到信息;業(yè)務(wù)邏輯層將一些邏輯封裝,在前端和數(shù)據(jù)庫(kù)端之間充當(dāng)中間人,便捷的將數(shù)據(jù)在兩者之間傳遞;數(shù)據(jù)存取層實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn),通過(guò)數(shù)據(jù)庫(kù)命令執(zhí)行操作,例如查詢,插入,更新,刪除等;數(shù)據(jù)庫(kù)采用MySQL,存儲(chǔ)圖書(shū)、讀者、評(píng)分等用戶信息。
本文圖書(shū)推薦系統(tǒng)借助基于物品的協(xié)同過(guò)濾算法,在用戶搜索圖書(shū)的同時(shí)自動(dòng)為讀者推薦一批相似的圖書(shū),因此在功能模塊上主要包含后臺(tái)管理系統(tǒng)和圖書(shū)推薦系統(tǒng)兩大部分。
后臺(tái)系統(tǒng)管理模塊實(shí)現(xiàn)了對(duì)用戶信息進(jìn)行的刪除操作以及對(duì)圖書(shū)信息進(jìn)行的添加和刪除操作,包括用戶賬號(hào)管理、圖書(shū)管理兩個(gè)部分,該功能主要通過(guò)管理員角色操作。
圖書(shū)推薦系統(tǒng)模塊主要包含用戶個(gè)人信息管理、熱門(mén)書(shū)籍、基于物品的推薦模塊三部分。
⑴用戶管理模塊主要實(shí)現(xiàn)用戶對(duì)本人信息的查看和修改操作、對(duì)用戶歷史評(píng)分記錄進(jìn)行查看和刪除操作以及對(duì)喜歡書(shū)單內(nèi)圖書(shū)的信息進(jìn)行查看和刪除操作。
⑵熱門(mén)書(shū)籍模塊的功能是通過(guò)對(duì)用戶的歷史評(píng)分記錄進(jìn)行排行,得到熱門(mén)書(shū)籍。該功能是對(duì)所有用戶的評(píng)分記錄中圖書(shū)評(píng)分總和最高的圖書(shū)進(jìn)行排行,根據(jù)評(píng)分由高到低進(jìn)行排序,生成熱門(mén)圖書(shū)的排行榜。
⑶基于物品的推薦模塊是通過(guò)對(duì)圖書(shū)以及用戶評(píng)分記錄的分析,完成對(duì)用戶進(jìn)行圖書(shū)推薦的功能。
基于物品的協(xié)同過(guò)濾算法是本系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的源泉,本節(jié)敘述有關(guān)該算法的實(shí)現(xiàn)過(guò)程與設(shè)計(jì)思想。
用戶依據(jù)數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)的提取,通過(guò)推薦算法的分析、對(duì)用戶的行為分析[3]得出與自己所評(píng)的圖書(shū)相似的其他圖書(shū),其結(jié)果將通過(guò)SQL 語(yǔ)句傳遞到前端,然后展示在HTML 頁(yè)面上,完成基于物品的協(xié)同過(guò)濾算法推薦的全過(guò)程。算法的流程圖如圖2所示。
圖2 基于物品的推薦功能模塊圖
首先從文件中獲取所需的數(shù)據(jù)集,并且根據(jù)列進(jìn)行劃分得到所需的數(shù)據(jù),將其存入訓(xùn)練集train 中。本系統(tǒng)中使用的數(shù)據(jù)通過(guò)網(wǎng)絡(luò)爬取獲得,本系統(tǒng)側(cè)重點(diǎn)在于推薦系統(tǒng)的設(shè)計(jì),因此數(shù)據(jù)獲取不再詳細(xì)描述。
對(duì)所獲取的數(shù)據(jù),對(duì)每本圖書(shū)統(tǒng)計(jì)用戶數(shù)及評(píng)分,記入空字典中,例如創(chuàng)建一個(gè)空字典為Self.N={},N[i]表示對(duì)圖書(shū)i評(píng)分的用戶數(shù)。
然后建立物品相似度矩陣W[i][j],計(jì)算出圖書(shū)i與圖書(shū)j 之間的相似度,填入該矩陣。利用如公式⑴計(jì)算圖書(shū)之間的相似度[4]。W[i][j]標(biāo)識(shí)圖書(shū)i 和圖書(shū)j的相似度,N[i]則是喜歡圖書(shū)i的用戶數(shù),N[j]則是喜歡圖書(shū)j的用戶數(shù),除號(hào)上方表示同時(shí)喜歡圖書(shū)i和圖書(shū)j的用戶數(shù)。
部分相似度矩陣如圖3。
面向當(dāng)前用戶,搜尋和用戶歷史評(píng)分上的圖書(shū)最相似的圖書(shū)集合,為用戶進(jìn)行推薦。本文以用戶123為例,展示整個(gè)推薦過(guò)程:用戶123 對(duì)一本圖書(shū)進(jìn)行評(píng)分后,歷史評(píng)分如圖4所示。
圖4 用戶123歷史評(píng)分展示圖
接下來(lái)用戶123在首頁(yè)點(diǎn)擊與你喜歡的圖書(shū)類似按鈕,后臺(tái)運(yùn)行推薦算法:
首先創(chuàng)建字典self.train={},從本地?cái)?shù)據(jù)集中獲取數(shù)據(jù),存儲(chǔ)所有的用戶對(duì)圖書(shū)的評(píng)分?jǐn)?shù)據(jù);創(chuàng)建字典self.W,用來(lái)存儲(chǔ)圖書(shū)之間的相似度;創(chuàng)建self.N,用來(lái)存儲(chǔ)每本圖書(shū)被用戶評(píng)價(jià)過(guò)的次數(shù)。
然后通過(guò)3.2 節(jié)中的相似度公式計(jì)算圖書(shū)之間的相似度,生成圖書(shū)-圖書(shū)相似矩陣存入字典self.W 中。從得到的相似度矩陣中取出與用戶123 所評(píng)圖書(shū)最相似的其他圖書(shū)及其評(píng)分。所有用戶評(píng)價(jià)過(guò)的圖書(shū)信息存儲(chǔ)在self.train 中,由于當(dāng)前用戶名(user)為123,所以可以通過(guò)self.train[user]可獲取到用戶123 評(píng)價(jià)過(guò)的圖書(shū)信息。如表1所示。
表1 算法獲取到用戶123評(píng)價(jià)的圖書(shū)信息表
將用戶123 對(duì)每本圖書(shū)的評(píng)分與用戶123 評(píng)分過(guò)的每本圖書(shū)和其他圖書(shū)之間的相似度兩者之積進(jìn)行求和,得到推薦字典rank{},后對(duì)推薦字典進(jìn)行堆排序,用來(lái)判斷用戶123 對(duì)某一圖書(shū)的喜好程度[5,6]的高低,根據(jù)推薦分由高到低排列,將指定數(shù)量的圖書(shū)推薦給用戶123,排序之后推薦字典內(nèi)的部分推薦圖書(shū)如表2所示。
表2 推薦字典經(jīng)過(guò)排序之后的部分圖書(shū)表
排序后將推薦圖書(shū)展示在HTML 頁(yè)面,如圖5所示,完成本系統(tǒng)基于物品的推薦功能。
圖5 為用戶123推薦圖書(shū)展示圖
圖書(shū)推薦系統(tǒng)根據(jù)圖書(shū)、評(píng)分?jǐn)?shù)據(jù)集,通過(guò)圖書(shū)記錄與用戶評(píng)分記錄進(jìn)行推薦的軟件系統(tǒng)。本系統(tǒng)的圖書(shū)推薦模塊是由基于物品的協(xié)同推薦算法進(jìn)行的圖書(shū)推薦,本文設(shè)計(jì)的熱門(mén)書(shū)籍模塊將圖書(shū)評(píng)分排行榜展示出來(lái),使讀者對(duì)熱門(mén)書(shū)籍有一個(gè)直觀的感受,并且向沒(méi)有對(duì)圖書(shū)進(jìn)行評(píng)分的用戶提供一批大眾評(píng)分較高的書(shū)籍。在文中應(yīng)用的推薦算法中,仍存在推薦準(zhǔn)確性的問(wèn)題,下一步將在推薦算法上繼續(xù)討論研究,提高系統(tǒng)推薦圖書(shū)的推薦性能,使推薦結(jié)果更精準(zhǔn),更好地為讀者服務(wù)。