冼遠(yuǎn)清 張旭新
(廣東海洋大學(xué)數(shù)學(xué)與計算機學(xué)院 廣東省湛江市 524088)
隨著計算機技術(shù)和移動互聯(lián)網(wǎng)技術(shù)快速發(fā)展,數(shù)據(jù)日益增長,人們已經(jīng)處于一個信息爆炸的時代。信息過載,信息碎片化嚴(yán)重,是生活中不可避免的普遍現(xiàn)象。如何在短時間內(nèi),給用戶提供其感興趣的信息,推薦系統(tǒng)應(yīng)運而生。
推薦系統(tǒng)本質(zhì)上是一種信息過濾技術(shù),為用戶返回個性化的信息搜索服務(wù)。從信息過濾技術(shù)發(fā)展歷史來看,可以分為基于內(nèi)容的過濾技術(shù)和協(xié)同過濾技術(shù)兩大類?;趦?nèi)容的過濾規(guī)則一般采用匹配關(guān)鍵詞方式,選取匹配度高的內(nèi)容,屬于傳統(tǒng)的信息過濾技術(shù)。協(xié)調(diào)過濾則是目前推薦系統(tǒng)中應(yīng)用較多的技術(shù),皮爾遜相關(guān)系數(shù)、余弦相似度算法、最近鄰算法、貝葉斯算法、K-means聚類算法等都應(yīng)用到郵件過濾、電影推薦、電子商務(wù)、新聞推薦、文獻資料推薦、商場推薦、旅游推薦等相關(guān)領(lǐng)域中。推薦系統(tǒng)的核心是推薦算法,通過分析用戶的歷史數(shù)據(jù)信息,去預(yù)測用戶對未知項目信息的喜好程度。在商品推薦系統(tǒng)中,產(chǎn)品的屬性、客戶的興趣和偏好、同類客戶對產(chǎn)品的評價等三要素共同決定了客戶對產(chǎn)品的喜好程度,最終作為推薦系統(tǒng)考量的重要指標(biāo)。
針對圖書推薦特定場景,利用爬蟲技術(shù)爬取基礎(chǔ)圖書數(shù)據(jù),并進行數(shù)據(jù)清洗,采用Django框架技術(shù)進行Web應(yīng)用開發(fā),利用Vue框架實現(xiàn)前端展示,研究實現(xiàn)基于皮爾遜相關(guān)系數(shù)、余弦相似度算法的圖書推薦系統(tǒng),為人們選取圖書提供參考,具有一定的現(xiàn)實意義。
本系統(tǒng)實現(xiàn)為用戶推薦圖書信息,將實現(xiàn)數(shù)據(jù)爬取、用戶注冊、圖書推薦全過程功能,具體功能如圖1所示。
圖1:功能模塊設(shè)計
該系統(tǒng)將實現(xiàn)功能包括數(shù)據(jù)爬取與數(shù)據(jù)預(yù)處理,將得到信息進行分析,最后推薦給相關(guān)用戶。同時,需要實現(xiàn)用戶注冊模塊,用戶注冊時需選定相關(guān)標(biāo)簽,用于處理推薦系統(tǒng)的冷啟動問題。系統(tǒng)還提供了展示熱門圖書、展示最新圖書、圖書關(guān)鍵字搜索等相關(guān)功能。
根據(jù)業(yè)務(wù)邏輯,系統(tǒng)采用三層的架構(gòu)圖,分別是數(shù)據(jù)獲取層、業(yè)務(wù)邏輯處理層、表示層。
數(shù)據(jù)獲取層首先通過Crawler爬蟲,收集圖書的詳細(xì)信息數(shù)據(jù),包括書名、圖書概述、作者、作者信息、出版時間、圖書相關(guān)標(biāo)簽等,還有在用戶瀏覽系統(tǒng)時,得到用戶對圖書的行為數(shù)據(jù),如用戶對圖書的評分等數(shù)據(jù)。
業(yè)務(wù)邏輯處理層將通過數(shù)據(jù)獲取層得到的圖書數(shù)據(jù)和用戶數(shù)據(jù),采用皮爾遜相關(guān)系數(shù)算法和余弦相似度算法分別對用戶和圖書進行相似度計算,并對其進行分析,得出推薦給當(dāng)前用戶的推薦圖書列表。最后,將得到的推薦數(shù)據(jù)存入數(shù)據(jù)庫,并通過表示層展示給用戶。
2.3.1 Django框架技術(shù)
Django框架方便開發(fā)者創(chuàng)建高質(zhì)量、容易維護的應(yīng)用程序。Django框架強調(diào)代碼復(fù)用,同時有很多功能強大的第三方插件,可以導(dǎo)入多個插件品使用,開發(fā)者也可以自行開發(fā)新插件。
Django框架是一個遵循 MTV設(shè)計模式的Web開發(fā)框架。MTV表示Model-Template-View,其中,M 表示模型,負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫的映射;T代表模板,負(fù)責(zé)如何把頁面(html)展示給用戶;V表示視圖,負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)時候調(diào)用 Model和 Template。MTV本質(zhì)上實現(xiàn)與MVC模式(Model–view–controller)的軟件架構(gòu)模式相應(yīng)內(nèi)容。
2.3.2 推薦算法
(1)皮爾遜相關(guān)系數(shù)算法。
皮爾遜相關(guān)系數(shù)是用來度量兩兩變量之間的相關(guān)程度,相關(guān)程度表現(xiàn)出線性的特征。皮爾遜相關(guān)系數(shù)公式值域為[-1,1],值越靠近1,說明兩本圖書之間正向的線性關(guān)系就越來越強,也就是說這兩本圖書越相似,反之,兩個物品之間沒有偏好關(guān)系,其計算如公式(1)示。
得到偏好相似的用戶之后,就從偏好相似用戶已評分過的圖書進行篩選,去掉當(dāng)前用戶已經(jīng)看過的圖書,得到推薦給當(dāng)前用戶的圖書項集合。
(2)余弦相似度算法。
余弦相似度經(jīng)常應(yīng)用于電子商務(wù)銷售網(wǎng)站,用于計算商品之間的相似度程度。直接將余弦相似度引入圖書推薦,由于熱門圖書的用戶數(shù)大,會導(dǎo)致推薦出來的熱門圖書比例非常高,因此對原始的余弦相似度公式進行修正,如公式(2)示。
分子部分Num∩Num表示同時喜歡圖書i和圖書j的用戶數(shù),分母Num與Num則表示喜歡圖書i和圖書j的用戶數(shù)相乘的開方,cos-sim則表示圖書i和圖書j的余弦相似度(Cosine similarity)。通過將Num引入到分母中,將避免發(fā)生推薦熱門圖書過高的情況。在計算圖書余弦相似度前,需要遍歷用戶的評分值,針對每個用戶,建立共現(xiàn)矩陣。
圖書相似度計算完成之后,結(jié)合用戶對圖書的前期評價分,可以通過公式(3)計算得到用戶對某本圖書的喜好程度。
Book(u)表示用戶表達偏好的圖書集合,SimBook(j,K)表示和圖書j最相似的K本圖書集合,cos-sim則表示圖書i和圖書j的相似度,s表示用戶u對圖書i的興趣,本系統(tǒng)指用戶u對圖書i的評分,in-val就是用戶u對于圖書j的興趣值(interest value),最后根據(jù)興趣值由高到低把圖書推薦給用戶。
(3)冷啟動問題的處理。
針對冷啟動問題,本系統(tǒng)在新用戶注冊登錄后,系統(tǒng)提供圖書的標(biāo)簽,新用戶可以挑選感興趣的標(biāo)簽,然后在用戶沒有瀏覽過任何圖書的前提下,優(yōu)先推薦同一標(biāo)簽下的圖書,在新用戶瀏覽,評分過圖書之后,更新用戶的評分值,重新計算相似度,然后再次給用戶推薦相似度高的圖書。
針對圖書冷啟動問題和系統(tǒng)冷啟動問題,在給系統(tǒng)填充圖書數(shù)據(jù)時,先把圖書集按照標(biāo)簽進行分類,再把已經(jīng)分類好的圖書數(shù)據(jù)集寫入到系統(tǒng)的數(shù)據(jù)庫,系統(tǒng)就可以按照新用戶剛進入系統(tǒng)時選擇的標(biāo)簽,把同一標(biāo)簽下的圖書推薦給用戶。
2.3.3 Vue框架技術(shù)
Vue.js是一套構(gòu)建可視化用戶界面的漸進式框架。Vue關(guān)注視圖層,采用自底向上的增量開發(fā)模式的設(shè)計,而且易于與第三方庫集成。同時,Vue與現(xiàn)代工具箱和各種支持類庫相結(jié)合,還可以為復(fù)雜的應(yīng)用程序提供驅(qū)動程序。Vue的目標(biāo)是通過盡可能簡單的API實現(xiàn)響應(yīng)數(shù)據(jù)綁定和組合的視圖組件。
2.3.4 SQLite數(shù)據(jù)庫技術(shù)
SQLite是一個輕量級的關(guān)系型數(shù)據(jù)庫。它是一種嵌入式數(shù)據(jù)庫,只是一個.db格式的文件,無需安裝,配置和啟動。SQLite常見應(yīng)用場景包括中小型網(wǎng)站,嵌入式設(shè)備和應(yīng)用軟件,文件檔案管理和桌面程序文件數(shù)據(jù)庫。SQLite支持多種編程語言和多種操作系統(tǒng),具有很強的移植性。
采用關(guān)系型數(shù)據(jù)庫 SQLite作為后臺數(shù)據(jù)庫,并利用關(guān)系規(guī)范化理論對數(shù)據(jù)庫中的數(shù)據(jù)表進行優(yōu)化設(shè)計,消除了插入異常、刪除異常、更新異常、數(shù)據(jù)冗余等數(shù)據(jù)操作中的關(guān)鍵問題。
本系統(tǒng)數(shù)據(jù)庫主要包含用戶信息表、用戶評論表、用戶評分表、圖書信息表、用戶圖書收藏表、圖書標(biāo)簽表、新用戶標(biāo)簽愛好表等,其主要字段及表之間如關(guān)系圖2示。
圖2:數(shù)據(jù)庫表關(guān)系圖
系統(tǒng)的設(shè)計實現(xiàn)使用Pycharm 2021開發(fā)軟件在 Win10環(huán)境下進開發(fā)和測試,采用Python 3.7作為開發(fā)語言,采用Django 2.2.1作為Web開發(fā)框架,將SQLite作為數(shù)據(jù)庫,并使用了Django自帶的服務(wù)器。
3.2.1 項目開發(fā)文件
項目中,使用crawler.py和parse_data.py文件獲取網(wǎng)站的暢銷圖書信息,并存儲在db.sqlite3文件中。db.sqlite3還用于保存用戶名、用戶登錄密碼、用戶瀏覽行為等信息,具體核心文件如圖3示。
圖3:項目文件及核心代碼文件圖
3.2.2 核心代碼文件
recommend_methods.py是本項目一個核心文件,用于實現(xiàn)圖書的推薦功能,利用推薦算法,實現(xiàn)基于用戶和基于內(nèi)容的推薦。該文件包括recommendUserCF和goodsCF核心類,使用了面向?qū)ο笏枷?,定義了基于用戶推薦和內(nèi)容推薦的推薦算法,然后通過recommend_by_id()函數(shù)和recommend_by_goods_id()函數(shù)具體實現(xiàn)推薦流程,并將結(jié)果傳給展示頁面。
推薦系統(tǒng)使用Django simpleUI插件美化了Django原生后臺管理界面,同時使用Vue.js、CSS等實現(xiàn)界面包括用戶登錄、圖書展示、熱門圖書、搜索頁面、用戶喜好標(biāo)簽頁面等。
3.3.1 用戶推薦界面的實現(xiàn)
在基于用戶的推薦模塊中,系統(tǒng)會計算當(dāng)前用戶與系統(tǒng)中用戶的相似程度,得到最相似的幾個用戶,再從這些用戶的評分表中,找出評分最高的幾本圖書,加入到推薦列表中,若得到的圖書不夠15本,則在用戶剛進入系統(tǒng)時選的標(biāo)簽中,選擇對應(yīng)的圖書加入到推薦列表中,如圖4示。
圖4:用戶推薦界面
3.3.2 冷啟動問題處理界面
為解決冷啟動問題,新用戶第一次登錄系統(tǒng),用戶需要選擇自己一個或者多個感興趣的標(biāo)簽。提交后,系統(tǒng)會按照新用戶選擇的標(biāo)簽,從圖書標(biāo)簽表中篩選出標(biāo)簽對應(yīng)的圖書,得到推薦圖書列表。如圖5所示,新用戶選擇了“科幻”和“好書,這一讀”標(biāo)簽。
圖5:冷啟動處理界面
推薦系統(tǒng)首先利用了爬蟲技術(shù)獲取圖書網(wǎng)站暢銷書籍?dāng)?shù)據(jù)作為項目基礎(chǔ)數(shù)據(jù),利用了Django框架技術(shù)作為Web應(yīng)用框架,實現(xiàn)基于皮爾遜相關(guān)系數(shù)和余弦相似度算法的推薦流程,并應(yīng)用了VUE前端技術(shù)展示了系統(tǒng)用戶界面。經(jīng)測試,本系統(tǒng)運行流程,并能快速為用戶推薦相關(guān)圖書信息。
下一步,將改進推薦算法,提高推薦的準(zhǔn)確度,并將應(yīng)用推廣到音樂推薦、電影推薦、新聞推薦等領(lǐng)域。