楊云 李文如
(陜西科技大學(xué)電子信息與人工智能學(xué)院, 西安 710021)
隨著計(jì)算機(jī)與網(wǎng)絡(luò)信息技術(shù)的快速發(fā)展,紙質(zhì)圖書明顯具有向電子化方向發(fā)展的趨勢,電子圖書逐漸流行。在這種情況下,如何便于大部分用戶在圖書資源中快速查找圖書,成為對(duì)圖書檢索能力的巨大挑戰(zhàn)[1-2]。為了使檢索系統(tǒng)更具便捷性和智能化,避免圖書資源的浪費(fèi),提高借閱管理效率,建議進(jìn)行用戶個(gè)性化推薦設(shè)計(jì)。本次設(shè)計(jì)的圖書檢索推薦系統(tǒng),將圖書檢索推薦系統(tǒng)總體功能分為圖書檢索排序模塊和圖書智能推薦模塊,能夠根據(jù)讀者的借閱習(xí)慣進(jìn)行圖書推薦,滿足不同讀者的借閱需求。
本系統(tǒng)中設(shè)計(jì)了智能圖書推薦模塊,可根據(jù)搜索信息分別提供圖書推薦。根據(jù)讀者檢索內(nèi)容,向讀者推薦相關(guān)圖書,或根據(jù)讀者借閱歷史推薦圖書。該系統(tǒng)的整體功能結(jié)構(gòu)如圖1所示。
用戶在圖書檢索界面輸入關(guān)鍵詞進(jìn)行檢索。如果檢索到的圖書數(shù)量大于1,則啟動(dòng)智能排序算法,對(duì)圖書進(jìn)行排序,并根據(jù)檢索結(jié)果調(diào)用圖書推薦模塊,將排序推薦結(jié)果反饋給用戶。若用戶輸入檢索結(jié)果為0,則啟動(dòng)圖書智能推薦模塊,根據(jù)用戶借閱歷史推薦相關(guān)圖書,將結(jié)果列表反饋給用戶[3-4]。系統(tǒng)的總體流程如圖2所示。
圖1 系統(tǒng)整體功能結(jié)構(gòu)
1.2.1 數(shù)據(jù)的預(yù)處理
圖書智能檢索系統(tǒng)的設(shè)計(jì)中運(yùn)用了2種算法,即多維度評(píng)分算法和檢索結(jié)果優(yōu)化算法。這2種算法中都需要以數(shù)據(jù)庫信息系統(tǒng)中的借閱記錄為基礎(chǔ),進(jìn)行數(shù)據(jù)挖掘。借閱記錄表中會(huì)存在一些無效數(shù)據(jù),必須將其剔除,以保證算法執(zhí)行結(jié)果的正確性[5]。此外,還需處理表中的噪聲值,保存最新的借閱數(shù)據(jù)。例如,有用戶在不同的時(shí)間借閱了同一本圖書,所造成的數(shù)據(jù)重復(fù)即噪聲,應(yīng)將其剔除,并保存最新數(shù)據(jù)。
圖2 系統(tǒng)總體流程
1.2.2 數(shù)據(jù)庫設(shè)計(jì)
在圖書智能檢索信息系統(tǒng)中,與智能檢索推薦模塊和結(jié)果優(yōu)化模塊相關(guān)的數(shù)據(jù)庫表有t_book(圖書基礎(chǔ)信息表)、t_bcatalog(圖書副本信息表)、t_blend(圖書借閱表)、t_reader(讀者信息表)。圖書基礎(chǔ)信息表主要包括圖書的簡要介紹,以及用于排序的偏好系數(shù)。圖書副本信息表主要包含圖書館中相關(guān)書籍副本的具體信息,圖書借閱表主要包括書籍借閱的具體信息。讀者信息表主要包含讀者的基本信息資料。這幾種數(shù)據(jù)庫表的關(guān)系如圖3所示。
檢索結(jié)果優(yōu)化算法,基于用戶的累計(jì)借閱數(shù)量計(jì)算得出,因此,需先處理數(shù)據(jù)庫中的借閱記錄數(shù)據(jù)。然后,借助相應(yīng)的算法計(jì)算出用戶對(duì)相應(yīng)圖書的偏好系數(shù)。最后,將對(duì)用戶檢索圖書的偏好系數(shù)進(jìn)行排序,推薦圖書,提高用戶的檢索效率[6-7]。優(yōu)化算法的具體處理步驟如下:
(1) 對(duì)借閱數(shù)據(jù)進(jìn)行預(yù)處理。對(duì)管理系統(tǒng)中的借閱記錄數(shù)據(jù)進(jìn)行預(yù)處理,去掉噪聲數(shù)據(jù),對(duì)不完整數(shù)據(jù)進(jìn)行修正和補(bǔ)充。
(2) 對(duì)偏好系數(shù)進(jìn)行計(jì)算?;诮栝啔v史數(shù)據(jù),利用檢索結(jié)果優(yōu)化算法計(jì)算用戶的偏好系數(shù),將偏好系數(shù)存入偏好系數(shù)數(shù)據(jù)表中[8]。
(3) 對(duì)檢索結(jié)果進(jìn)行優(yōu)化。用戶檢索圖書列表時(shí),系統(tǒng)會(huì)根據(jù)數(shù)據(jù)庫中計(jì)算保存好的偏好系數(shù)對(duì)檢索結(jié)果進(jìn)行優(yōu)化排序。
圖3 數(shù)據(jù)庫表的關(guān)系
借助多維度評(píng)分算法,匯總系統(tǒng)中的借閱記錄評(píng)分?jǐn)?shù)據(jù),形成協(xié)同過濾推薦算法所需的基礎(chǔ)數(shù)據(jù)。當(dāng)前常用的協(xié)同過濾算法(Distributed Item-Based Collaborative Filtering)都是借助于用戶評(píng)分?jǐn)?shù)據(jù)來實(shí)現(xiàn)數(shù)據(jù)推薦的[9]?;谟脩舻膮f(xié)同過濾推薦算法的原始數(shù)據(jù)為
2.2.1 算法實(shí)現(xiàn)過程
在Mahout中,協(xié)同過濾算法的實(shí)現(xiàn)共包含以下過程:
(1) 求出用戶矩陣。
(2) 求出項(xiàng)目矩陣。
(3) 求出項(xiàng)目矩陣的平方和。
(4) 根據(jù)項(xiàng)目矩陣平方和、項(xiàng)目矩陣計(jì)算得出項(xiàng)目相似度矩陣。
(5) 對(duì)項(xiàng)目相似度矩陣和用戶矩陣進(jìn)行整合,得到用戶-項(xiàng)目相似度矩陣。
(6) 根據(jù)上一過程中得到的用戶-項(xiàng)目相似度矩陣計(jì)算出用戶推薦矩陣。
以上過程中用了7個(gè)Job任務(wù)來進(jìn)行數(shù)據(jù)處理。其實(shí),第一個(gè)Job任務(wù)是進(jìn)行項(xiàng)目的數(shù)據(jù)格式轉(zhuǎn)換,即將項(xiàng)目的編號(hào)由長整形轉(zhuǎn)換為整形[10]。
2.2.2 數(shù)據(jù)量流程分析
(1) 用戶矩陣。用戶矩陣計(jì)算,就是對(duì)數(shù)據(jù)的抽取。針對(duì)用戶-項(xiàng)目-評(píng)分原始數(shù)據(jù),整合同一個(gè)用戶評(píng)價(jià)過的所有項(xiàng)目。借助表2中的原始數(shù)據(jù),通過數(shù)據(jù)抽取后得出用戶矩陣(見表3)。
表2 用戶-項(xiàng)目-評(píng)分原始數(shù)據(jù)表
表3 用戶矩陣表
在表3所示的用戶矩陣表中,itemID ∶prefValue表示向量,itemID是該向量的下標(biāo),prefValue是其取值。因此,對(duì)于用戶1來說,其用戶向量的實(shí)際表示應(yīng)該是[5.0,3.0,2.5,0,0,0,0] ,從下標(biāo)101開始,如果沒有數(shù)據(jù)則標(biāo)為0。Mahout中使用了一個(gè)Job任務(wù)來完成上面的數(shù)據(jù)處理,輸出的KeyValue對(duì)的格式是
(2) 項(xiàng)目矩陣。選取不同的抽取規(guī)則,可以得到相應(yīng)的項(xiàng)目矩陣。表4所示為可以抽取得到的項(xiàng)目矩陣。在Mahout中,使用了一個(gè)Job來完成,輸出的KeyValue格式是
表4 項(xiàng)目矩陣表
(3) 項(xiàng)目矩陣平方和。針對(duì)上述的項(xiàng)目矩陣,在Mahout中使用另外的Job任務(wù)來對(duì)其進(jìn)行處理,得到項(xiàng)目矩陣平方和[11-12],如表5所示。
表5 項(xiàng)目矩陣平方和表
其實(shí)項(xiàng)目矩陣平方和就是針對(duì)每個(gè)項(xiàng)目向量,求其所有項(xiàng)的平方和而已。比如,針對(duì)項(xiàng)目101,其項(xiàng)目向量為[5.0,2.0,2.5,4.0,5.0],然后求其平方和,得到其值為76.25。
(4) 項(xiàng)目相似度矩陣。在Mahout中,項(xiàng)目相似度矩陣式由2個(gè)Job任務(wù)共同處理完成的。第1個(gè)Job 是項(xiàng)目之間的相似度,按照升序?qū)?xiàng)目進(jìn)行排列。首先針對(duì)項(xiàng)目101進(jìn)行計(jì)算,緊接著對(duì)項(xiàng)目102進(jìn)行計(jì)算,按照順序往下類推[13]。由于在計(jì)算項(xiàng)目101時(shí)已經(jīng)對(duì)101和102的相似度進(jìn)行了計(jì)算,因此在計(jì)算102與其他項(xiàng)目的相似度時(shí)就不再考慮 101項(xiàng)目。第2個(gè)Job就是續(xù)接,即把沒有計(jì)算的項(xiàng)目也加入到其他項(xiàng)目中。如,在項(xiàng)目101中有101和102的相似度,但項(xiàng)目102中并沒有項(xiàng)目102和項(xiàng)目101的相似度;因此,可在102項(xiàng)目中續(xù)接101項(xiàng)目中的101與102相似度。按照此算法,最后輸出的項(xiàng)目相似度矩陣如表6所示。
表6 項(xiàng)目相似度矩陣表
項(xiàng)目相似度的計(jì)算公式為(1)和(2):
(1)
(2)
式中:PuiI1表示用戶ui對(duì)項(xiàng)目I1的評(píng)分;PuiI2表示用戶ui對(duì)項(xiàng)目I2的評(píng)分;normsI1表示norms中與I1相對(duì)應(yīng)的平方和。
假設(shè)有項(xiàng)目102和103,其中:
102矩陣=[5 ∶3.0,2 ∶2.5,1 ∶3.0]
103矩陣=[5 ∶2.0,4 ∶3.0,2 ∶5.0,1 ∶2.5]
可以得到dot102×103=26.00,norms102=24.25,norms103=44.25。帶入式(2),可以得到simi102×103=0.20。由此可見,計(jì)算得到的項(xiàng)目相似度與表6中的數(shù)據(jù)相同。
(5) 用戶-項(xiàng)目相似度矩陣。用戶-項(xiàng)目相似度矩陣,即將用戶和項(xiàng)目相似度矩陣進(jìn)行拼接得到的矩陣[14-16]。在Mahout中使用了一個(gè)Job來處理,輸出keyvalue對(duì)的格式〈VarlntWritabe,VectorAndPrefsWritable〉,即用戶對(duì)應(yīng)的輸出格式是VarlntWritabe,用戶-項(xiàng)目相似度矩陣的格式為VectorAndPrefsWritable,拼接后的用戶相似度矩陣見表7(表中僅僅展示用戶1)。
(6) 用戶推薦矩陣。在Mahout中使用了一個(gè)Job任務(wù)根據(jù)上述用戶-項(xiàng)目相似度矩陣來計(jì)算用戶推薦矩陣,最后得到的結(jié)果如表8所示。
表7 用戶-項(xiàng)目相似度矩陣表
表8 用戶推薦矩陣表
表8中的矩陣數(shù)據(jù)是通過式(3)采用表7數(shù)據(jù)計(jì)算而得:
(3)
式中:simiIm是Ui針對(duì)Im的相似度矩陣,prefIm是Ui針對(duì)Im的評(píng)分。
對(duì)所有的用戶而言,利用上面的公式,執(zhí)行完畢后就可以得出相應(yīng)用戶的推薦矩陣數(shù)據(jù)。
在基于Mahout的圖書智能檢索系統(tǒng)中,圖書檢索排序算法和圖書智能推薦功能,構(gòu)成系統(tǒng)的關(guān)鍵構(gòu)成部分。文中介紹了該系統(tǒng)的總體設(shè)計(jì)和工作流程,以及數(shù)據(jù)庫的詳細(xì)結(jié)構(gòu),重點(diǎn)闡述了圖書檢索排序算法及圖書智能推薦的實(shí)現(xiàn),以及Mahout中協(xié)同過濾算法的應(yīng)用。圖書檢索排序算法和圖書智能推薦的實(shí)現(xiàn)構(gòu)成了圖書智能檢索中最關(guān)鍵的部分,為整個(gè)系統(tǒng)提供主要的功能支持。