邱煜炎 吳福生
(蚌埠醫(yī)學院圖文信息中心 蚌埠233000)
大數(shù)據(jù)環(huán)境下醫(yī)學文獻數(shù)字化迅速推進,文獻總量急劇增長[1]。為滿足讀者對文獻高效查找、精準推薦和快速響應的需求,專業(yè)化推薦系統(tǒng)應運而生。推薦系統(tǒng)[2]幫助用戶評估其所有未看過的產品,通過分析用戶的基本信息、興趣愛好和歷史行為主動推薦符合喜好的項目。目前推薦系統(tǒng)已在電子商務、電影、音樂網(wǎng)站領域取得顯著成績。
傳統(tǒng)單機環(huán)境下的推薦系統(tǒng)無法滿足大數(shù)據(jù)規(guī)模資源的存儲與計算需求,Hadoop平臺能夠處理海量數(shù)據(jù)。對于推薦內容的計算,大量的學者將推薦系統(tǒng)和Hadoop進行集成,肖強[3]等改進傳統(tǒng)的協(xié)同過濾算法,使之適應Hadoop平臺上的分布式計算;李文海[4]等基于MapReduce模型實現(xiàn)關聯(lián)規(guī)則算法,構建分布式電子商務系統(tǒng);奉國和[5]等采用Hadoop平臺以及Mahout引擎技術改進協(xié)同過濾算法,提高推薦系統(tǒng)的準確率。Hadoop平臺解決海量數(shù)據(jù)計算的問題,但其還存在諸多缺陷,最主要的是MapReduce[6]計算模型延遲過高,無法滿足實時、快速計算的需求,因而只適用于離線批處理的應用場景。Spark[7]在設計上充分吸收借鑒MapReduce的精髓并加以改進,同時采用先進的DAG執(zhí)行引擎,以支持循環(huán)數(shù)據(jù)流與內存計算,因此在性能上比MapReduce有大幅度提升,從而迅速獲得學術界的廣泛關注。何勝[8]等提出一種以文獻“混合關聯(lián)”為主要內容的圖書館文獻推薦方案及實現(xiàn)算法,基于Spark技術開展實證研究,優(yōu)化圖書館文獻推薦效果和提高統(tǒng)計計算性能。Lambda[9]架構由Storm項目發(fā)起人Nathan Marz提出,集成Hadoop、Kafka、Storm、Spark、HBase、Redias等各類大數(shù)據(jù)[10]組件,提供混合平臺。Lambda架構,見圖1。其具有高容錯、低延時和可擴展的特點。本研究利用Lambda架構技術特點,融合歷史數(shù)據(jù)離線計算、分布式日志采集等技術構建推薦數(shù)據(jù)及時反饋的醫(yī)學圖書推薦系統(tǒng)。實驗結果表明該系統(tǒng)具有高可靠性和穩(wěn)定性,能夠滿足大數(shù)據(jù)下低成本、快速響應和精準推薦的需求。
大數(shù)據(jù)環(huán)境下圖書館網(wǎng)站存在大量的讀者隱式行為(如點擊、搜索、瀏覽記錄等),不同服務的應用接口對應不同服務器,因此系統(tǒng)日志文件分散存放在各個服務器上。傳統(tǒng)Hadoop平臺無法有效匯總隱式行為日志并做到及時響應。本研究基于Lambda架構充分收集讀者隱式行為數(shù)據(jù),結合顯式數(shù)據(jù)(如讀者借閱、預約記錄)構建混合模型矩陣以解決數(shù)據(jù)稀疏問題,離線計算采用ALS推薦算法,在傳統(tǒng)離線推薦模型基礎上實時分析用戶行為,以反饋最適合當前用戶的推薦列表。基于Lambda架構的醫(yī)學圖書推薦系統(tǒng)架構,見圖2。

圖1 Lambda架構

圖2 基于Lambda架構的醫(yī)學專業(yè)文獻推薦系統(tǒng)架構
Lambda架構分為3大模塊:數(shù)據(jù)采集、數(shù)據(jù)處理和推薦展示。數(shù)據(jù)采集包括兩部分:關系型數(shù)據(jù)庫和日志采集系統(tǒng)。關系型數(shù)據(jù)庫通過圖書館管理軟件記錄讀者和書目的基本信息以及讀者借閱記錄信息。日志采集系統(tǒng)利用Flume,通過Kafka集群的消息分發(fā)中間件實現(xiàn)日志數(shù)據(jù)的統(tǒng)一下發(fā)。數(shù)據(jù)處理模塊分為離線處理和在線處理兩部分。推薦展示模塊將所有用戶推薦列表寫入Redis緩存系統(tǒng)中,緩解圖書館網(wǎng)站系統(tǒng)壓力。在離線處理前,將關系型數(shù)據(jù)庫數(shù)據(jù)通過Sqoop工具加載到HBase數(shù)據(jù)庫中進行離線推薦模型訓練。本設計首先利用用戶基本信息,如專業(yè)系部和書目信息,還用Spark計算模型進行主題提取,構建基于內容的用戶與書目相似度矩陣,融合Spark Mlib機器學習庫提供的ALS算法庫[11],建立基于文獻資源內容過濾及相似用戶協(xié)同過濾的離線推薦模型。
推薦系統(tǒng)需要將各種數(shù)據(jù)收集到一個中央化的存儲系統(tǒng)中,有利于進行集中式的數(shù)據(jù)處理、統(tǒng)計分析與數(shù)據(jù)共享。而用戶行為是多樣化的,包括基本屬性數(shù)據(jù)、訪問日志、搜索記錄、收藏日志、文獻信息等。其收集難點在于數(shù)據(jù)分散在各個離散設備上,保存于各種傳統(tǒng)的存儲設備與數(shù)據(jù)庫系統(tǒng)中。針對傳統(tǒng)的關系型數(shù)據(jù)庫信息,可以利用Hadoop生態(tài)系統(tǒng)中Sqoop組件,將數(shù)據(jù)導入到分布式數(shù)據(jù)庫HBase中,實現(xiàn)傳統(tǒng)數(shù)據(jù)庫與Hadoop同步。而針對基于瀏覽器訪問的日志數(shù)據(jù),可以借助分布式日志采集框架Flume進行數(shù)據(jù)收集。Flume系統(tǒng)植入在應用網(wǎng)關處的日志監(jiān)控可以實時監(jiān)控日志文件變化,根據(jù)偏移量,讀取來自聯(lián)機公共目錄查詢系統(tǒng)(Online Public Access Catalogue,OPAC)以及統(tǒng)一資源檢索系統(tǒng)的最新日志信息,然后將日志記錄輸出到HBase數(shù)據(jù)庫中。
利用讀者行為分析其對每本圖書的興趣程度,通過Lambda平臺采集數(shù)據(jù),涉及行為包括搜索、點擊、預約、正常借閱、盲目借閱、續(xù)借、超期借閱。筆者參考相關文獻,結合醫(yī)學專業(yè)特點,構建讀者圖書興趣模型。針對讀者各種行為做如下評分:在關鍵詞搜索列表中,如果對某一圖書項目進行點擊則表示讀者對該圖書興趣為正分,加1分。如果點擊后并進行在線預約則表示更強的興趣度,加2分。研究發(fā)現(xiàn)[12-13]讀者對某種圖書興趣度與借閱時間有關,見圖3。借閱時間低于一定閾值(小于3天,α值為2天)則表示讀者對該圖書實質上并不感興趣,借閱該圖書的行為可能屬于盲目借閱,減2分。讀者在一定期限(3~29天,β值為30天)內正常借閱,則表示讀者興趣為正分,加2分。讀者續(xù)借某本書則表示讀者借閱興趣達到飽和,加2分。期借閱雖然達到時間飽和度,但并不代表讀者很感興趣,超期借閱時間與興趣也成反向趨勢,超期時間在1個借閱周期內(β值為30天)為短期超期,減1分,此后超期兩個β值后為長期超期,減2分。此外整時間到期歸還的借閱歷史記錄(1個β天數(shù))可以假設讀者對圖書的興趣成相反方向,減1分。用戶行為評分影響,見表1。

圖3 讀者興趣度與借閱時間關系
表1 用戶行為評分影響

用戶行為加減分值點擊 +1預約 +2正常借閱+2續(xù)借 +2盲目借閱-2短期超期-1長期超期-2到期歸還-1
初始化評分值為5分,根據(jù)表1,構建讀者圖書評分矩陣,得到讀者-圖書-評分3元組作為離線推薦模型數(shù)據(jù)源,利用Spark Mlib機器學習庫提供的交替最小二乘ALS[14]推薦算法進行建模。交替最小二乘ALS是求解隱語義模型隱因子參數(shù)的優(yōu)化算法,隱語義模型是奇異值分解方法的一種,具有較好的理論基礎,優(yōu)化一個設定的指標建立最優(yōu)模型,其核心思想是通過隱含特征聯(lián)系用戶興趣和物品,利用降維的方法解決評分矩陣稀疏的問題。對于R(m×n)的矩陣,ALS旨在找到兩個低維矩陣X(m×k)和矩陣Y(n×k),來近似逼近R(m×n),即:
其中R(m×n)代表用戶對商品的評分矩陣,X(m×k)代表用戶對隱含特征的偏好矩陣,Y(n×k)表示物品所包含隱含特征的矩陣,T表示矩陣Y的轉置。對于矩陣X、Y的計算采用最優(yōu)化目標損失函數(shù),目標損失函數(shù)用均方根誤差(Root Mean Square Error,RMSE)定義,如下所示:
上式中的 λ‖xu‖2+ λ‖yi‖2是用來防止過擬合的正則化項,通過交替最小二乘算法優(yōu)化目標損失函數(shù),算法如下:初始化隨機矩陣Q中的元素值;將Q矩陣當做已知的,直接用線性代數(shù)方法求得矩陣P;得到矩陣P后,將P當做已知參數(shù),再返回求解矩陣Q;上述兩個過程交替進行,一直到誤差收斂到可以接受為止。研究發(fā)現(xiàn)[15]在不是很稀疏的數(shù)據(jù)集合上,交替最小二乘通常比隨機梯度下降要更快的得到結果。設置ALS迭代次數(shù)以及相關參數(shù),ALS算法會對讀者-圖書評分矩陣進行分解,利用隱語義進行表達,計算出隱式因子,填補讀者與書目的預測評分,然后訓練離線推薦模型。
首先利用Spark Streaming技術將Kafka集群推送的日志信息過濾出日志點擊流,從中抽取讀者產生行為對應的圖書ID和用戶ID。然后根據(jù)離線推薦模型進行圖書相似度排序,與離線模型進行混合處理,重排序,使得圖書館在線網(wǎng)站可以感知到用戶最新行為,提升推薦系統(tǒng)的準確率。筆者隨機抽取臨床醫(yī)學專業(yè)讀者登錄圖書查詢系統(tǒng),以“麻醉學”作為搜索關鍵詞,顯示結果界面左邊是OPAC系統(tǒng)根據(jù)檢索詞通過圖書管理系統(tǒng)展示的麻醉學圖書,右邊是實時推薦結果,根據(jù)系統(tǒng)設定,共計顯示10條推薦結果,其中前5條顯示與麻醉學相似的圖書,如“麻醉意外”,“麻醉并發(fā)癥”;后5條是根據(jù)該讀者歷史行為顯示離線推薦結果,如“臨床診療學”,“臨床醫(yī)學多用辭典”等。
以蚌埠醫(yī)學院2014年6月-2017年12月之間所有醫(yī)學類(中圖法R類)圖書借閱記錄作為實驗數(shù)據(jù),包含圖書86 022本,讀者12 030人,1 806 212次借閱服務,其中借閱564 399 次、續(xù)借 149 507 次、預約102 505次。
基于Lambda架構的醫(yī)學圖書推薦系統(tǒng)搭建6臺Linux服務器,版本CentOS6.5;每臺服務器配置8核CPU,16GB內存和1TB硬盤。其中3臺服務器用來搭建Lambda平臺,另外3臺服務器分別用來進行數(shù)據(jù)采集、數(shù)據(jù)緩存以及前端展示。軟件配置,見表2。

表2 Lambda架構軟件配置
為驗證興趣度模型以及推薦系統(tǒng)的有效性,邀請10位不同專業(yè)的讀者進行評價。利用推薦系統(tǒng)結合讀者在線行為,為每人推薦20本書,對推薦結果進行打分。采用信息檢索領域廣泛使用的查準率來評價實驗效果。評估結果,見表3。結果顯示10位讀者評價查準率差別很大,均值為44.4%。雖然系統(tǒng)初始設置為每位讀者推薦20本專業(yè)圖書,但由于讀者專業(yè)、借閱量、借閱行為等不同,實際推薦的數(shù)量也不同。通過表3可以看出借閱數(shù)量對推薦效果影響很大。但是隨著讀者借閱圖書的數(shù)量不斷增加,推薦效果也越來越好。值得注意的是讀者專業(yè)對推薦結果影響較大,如臨床醫(yī)學本科生對結果評價明顯高于其他專業(yè),說明臨床專業(yè)學生數(shù)量多,借閱行為數(shù)據(jù)量與推薦準確度成正相關關系。此外研究生由于借閱量相對本科生大,借閱目的性相對較強,準確率普遍較高。

表3 推薦系統(tǒng)評估結果
本研究設計和實現(xiàn)大數(shù)據(jù)環(huán)境下基于Lambda架構的醫(yī)學圖書推薦系統(tǒng),提出基于讀者行為的評分模型,將隱式行為數(shù)據(jù)應用到評分模型中,優(yōu)化模型結構。實驗證明在充分采集用戶行為數(shù)據(jù)后,推薦系統(tǒng)的準確率和召回率有明顯提升。鑒于Lambda架構獲取的數(shù)據(jù)具有數(shù)據(jù)量大、實時性強、多樣性的優(yōu)勢,下一步將引入書本信息及用戶基本信息的特征,設計多模型數(shù)據(jù)處理方式,進一步提升推薦效果。