王澤賢
圖書借閱排行算法研究*
王澤賢
目前圖書借閱排行的傳統算法是僅按借閱次數排序,該算法存在某些熱門圖書可能會長期占據排行榜前列之不足。論文提出了新的圖書借閱排行算法,該算法綜合考慮了借閱次數、復本數、入藏日期和最近外借日期等影響因素,在保證了較好推薦效果的情況下,實現了自動淘汰的機制,解決了傳統算法的不足。
推薦書目導讀借閱排行算法
圖書館藏書數量巨大,少則幾十萬,多則幾百萬,且呈不斷增長之勢,在海量文獻中快速、有效地查獲所需圖書,對多數讀者而言絕非易事。開展閱讀引導,向讀者推薦好書新書,是圖書館做好讀者服務、提高館藏利用率的有效手段?!镀胀ǜ叩葘W校圖書館規程(修訂)》第17條中規定:高等學校圖書館應“通過編制推薦書目、導讀書目,舉辦書刊展評等多種方式進行閱讀輔導”[1]。圖書館開展導讀的方式和方法有很多種,其中書目推薦就是一種重要的導讀手段。書目推薦的途徑包括:編制專題目錄、館藏新書通報、館藏借閱排行等[2]。專家推薦書目向來被公認為引導閱讀的最佳方式,但其往往是權威性有余而實效性、靈活性不足。圖書館的圖書借閱排行榜能夠較為真實地反映該館讀者的閱讀取向和偏好[3]。借閱量大的圖書,一般是比較受讀者歡迎的書,將這些書按月度、半年度、年度等方式進行排行并公之于眾,對揭示館藏利用情況、幫助讀者進行閱讀選擇,具有相當重要的意義。
目前各館的圖書借閱排行只是簡單地按借閱次數進行。該方法實現簡單,但因其未充分考慮入藏時間、最近外借時間和復本數等相關因素,故該評價方法的可信度不高,未能真實反映圖書的價值。本文設計了一個綜合考慮各種影響因素的圖書借閱排行算法,使圖書借閱排行更加科學、合理。
圖書借閱排行最直覺、最簡單的算法,就是依據指定時間內借閱次數的多少進行排名,借閱次數最多的圖書自然就排在第一位。這就是傳統的圖書借閱排行算法,該算法的優點是簡單、容易實現、排序算法計算速度快。但由于這種算法僅考慮了借閱次數,所以存在一個很大的缺點:缺乏自動淘汰的機制,某些熱門的圖書可能會長期占據排行榜前列,從而失去推薦意義。所以,需要綜合考慮影響圖書借閱排行的各種因素,設計一種新的借閱排行。
1.1 影響因素
(1)借閱次數Counto:一種圖書被借閱(包括借出和續借)的總次數,借閱次數較高的圖書,表示擁有效高的借閱頻率,較受讀者歡迎,應該排列在前。
(2)復本數Countb:同等條件下,復本數多的圖書被借閱的機率也可能會相應較多,其被借閱的總次數相應地也會較大;反之,復本數較少的圖書被借閱的總次數自然會較少。例如,圖書A復本數是20,其借閱次數是50次;而圖書B復本數是3,其借閱次數是20次,如果只是按借閱次數排列,A排在B前,顯然是不合理的。因此,基于公平性,圖書借閱排行計算過程中要排除復本數的影響。
(3)入藏日期Datei:圖書到館加工完成后,上架可以外借的日期。同等條件下,入藏日期較早的圖書相應被借閱的可能性也較高,總借閱次數相應較多;入藏日期較后的圖書,被借閱的次數自然會較少,但這并不代表這本書的表現就比較差。例如,圖書A已入藏300天,其借閱次數是10次;而另圖書B才入藏50天,其借閱次數是5次,如果只是按借閱次排數列,A排在B前,明顯是不合理的。因此,基于公平性,圖書借閱排行計算過程中要考慮入藏日期的影響。
(4)外借日期Datel:圖書受到歡迎有一定的周期性,圖書的最后外借日期越接近當前日期,表示該書最近才被借出,也體現該書最有可能再度被借閱[4]。就算某圖書的借閱總次數較高,但其最后外借日期距當前日期較遠,該書很久沒有被借閱,表示該書以前受讀者歡迎,但近期已經不再受讀者歡迎了。
1.2 排行算法
綜合考慮以上因素,本文設計了一種新的圖書借閱排行算法:在指定的時間范圍內(開始日期Dateb、結束日期Datee),圖書i的借閱排行得分Score(i)可由公式1得出,然后按借閱排行得分由大到小排序,即可得到圖書i在借閱排行榜的位置。

公式1中:
(2)圖書i的入藏及最近外借日期指標D(i)=log10Dayei(i)+log10Dayel(i)。入藏天數Dayei=Datee-Datei,表示結束日期Datee與圖書入藏日期Datei間的天數,即圖書可被借閱使用時間。最近外借天數Dayel=Datee-Datel,表示結束日期Datee與在統計時段內圖書最后被外借日期Datel間的天數。在上面的公式中,兩日期相減表示兩日期間的天數,不足一天當一天計算。越新的圖書或越是最近被借閱的圖書,其入藏及最后外借日期因數越少,在其他條件不變的情況下,借閱排行得分越大,借閱排名越高。這意味著隨著時間的推移,及無人借閱的時間越長,其借閱排行得分越小,借閱排名越低,隨著時間增長會逐漸跌到排行榜的末尾,保證了排名前列的都將是較新的和最近受歡迎的圖書。公式1的分母加1是為了防止D(i)=0時分母為0。

(3)α是重力因子。表示將圖書排名往下拉的力量,也即圖書排名隨時間增長而下降的速度,根據實際需要調整。如圖2所示,三根曲線的其他參數都一樣,α的值分別為1.5、1和0.5。值越大,曲線越陡峭,隨著入藏及最后外借日期指標D(i)的增大,排名下降得越快。

2.1 算法實現流程
按照公式1計算圖書借閱排行得分,需要綜合圖書的入藏日期、復本數,及在指定日期范圍的借閱次數、最后外借日期等參數計算得出,而這些參數都需從館藏表及操作日志表中獲取,涉及的數據量比較龐大,難以在需要時即時完成計算并返回結果。例如,廣州大學圖書館(以下簡稱“我館”)的館藏記錄就有270多萬條,2005至2013年的借閱日志記錄就有454多萬條。所以一般在空閑時段,預先對圖書借閱排行計算,需要時直接調用排行榜結果。圖書借閱排行計算流程如下:
(1)從日志表中取得在指定日期范圍被借閱圖書的書目記錄號。
(2)根據書目記錄號從館藏表中獲取入藏日期、復本數,并從操作日志表中取得在指定日期范圍的借閱次數、最后外借日期。然后將這些參數代入公式1計算,得到圖書借閱排行得分。
(3)計算出所有被借閱圖書的借閱排行得分后,按借閱排行由高到低排序,得到圖書借閱排行榜,并將排行結果保存,供需要時使用。
2.2 性能優化
在算法具體實現時,還要注意性能的優化,將計算時間控制在可接受的時間范圍內。本文在最初實現算法時,入藏日期、復本數、借閱次數和最后外借日期等參數,都是分開單個從數據庫獲取。我館在2011年上半年度,中文圖書借閱日志記錄總數為285 692條,完成圖書借閱排行計算超過16小時,這明顯是不能接受的,必須進行優化。經分析,由于館藏表和日志表數據量龐大,分別單個從數據庫獲取入藏日期、復本數、借閱次數和最后外借日期等參數耗費了大量時間。后經改進,使用單一SQL查詢語句,實現一次從數據庫獲取所有計算所需的參數,從而大大減少了所需時間,上面需16小時以上才能完成的計算任務,現只需15分鐘就能完成。改進后的SQL查詢語句如下所示:
select l.logh,count(*)as countO,
(select count(*)from holding where hldb=l.logh)
as countB,
(select min(hldc)from holding where hldb=l.logh)
as dateI,
max(loga1)as dateL
from ilog l
where loga1>=${begin}and loga1<=${end}and(logc=3031 or logc=3035)
group by logh
本文使用了我館的中文圖書館藏及其借閱日志數據,對借閱排行算法進行了驗證分析,公式1中的重力因子取值1.5。參與實驗的借閱日志數據記錄時間自2011年1月1日至2013年6月30日,共兩年半時間,借閱日志記錄總數為1281 301條。在本文中,將實驗數據每半年一段:2011年1月1日至2011年6月30日為時段1,2011年7月1日至2011年12月31日為時段2,依此類推,共分成了5個時間段。
3.1 排序效果
根據各時段的借閱日志數據,分別進行借閱排行計算。表1是按本文算法計算得出,在時段5的圖書借閱排行榜前10名的相關參數及排行情況:借閱排行得分按公式1計算得出,排名按借閱排行得分由高到低排行得到,按借閱排名是僅按借閱次數由高到低的排名。
由該表可以看出,排名受圖書的復本數、借閱次數、入藏天數和最后外借日期影響,在其他條件相同的情況下,復本數越少,排名越前,借閱次數越多,排名越前,入藏天數或最后外借天數越少,排名越前。排名雖然受借閱次數影響,但與僅按借閱次數排名關系不大,并且按兩種算法得出的借閱排名相差較大。

表1 時段5圖書借閱排行榜的前10名
3.2 推薦效果
本階段實驗中,分別將參與實驗的兩個相鄰時段組成一組:第1組時段1作訓練期,時段2作驗證期;第2組時段2作訓練期,時段3作驗證期;以此類推,5個時段共組成4組。將訓練期的數據分別進行借閱排行計算,然后檢測其在驗證期是否有借閱,從而驗證該圖書的推薦成功性。在驗證期有借閱,表示推薦成功;在驗證期沒有借閱,則表示推薦失敗。
據調查顯示,用戶每次檢索后,只瀏覽少數結果頁面的比例在逐步提高,而用戶實際所訪問的結果范圍非常小。例如,從1997—2001年,用戶每次檢索后只瀏覽一個頁面的比例,從28.6%提高到50.5%,而2001年之后更是提高到70%,這意味著檢索結果空間都集中到了結果頁面的第一頁和第二頁,有時包括第三頁[5]。同樣,讀者也只會對圖書借閱排行的前幾十名最感興趣,只有排名前列的圖書才能夠吸引讀者的注意,起到引導、推薦的作用。所以,本實驗中,只取驗證期的圖書借閱排行榜前100名的圖書來進行推薦效果驗證,統計結果如表2所示。從該表可以看出按借閱次數和按本文算法得出的圖書借閱排行榜都有較高的推薦成功率,排行榜前100名的圖書,在驗證期起碼有96種以上會被借閱,并且兩種排行算法的推薦成功率相差不大,相比較按本文算法稍微占優,推薦成功率幾乎100%。

表2 推薦成功統計
3.3 自動淘汰效果
首先,分別將5個時段的數據進行借閱排行計算,然后統計時段1的圖書借閱排行榜前100名的圖書在后面4個時段的圖書借閱排行榜前100名中重復出現的次數。表3是統計結果,從表3可以看出:僅按借閱次數排行的圖書借閱排行榜,最少的時候也有40種圖書重復占據前100名,即存在著某些熱門圖書長期占據排行榜前列的情況,并且該情況不會隨時間的增長而減少;而按本文算法的圖書借閱排行榜中,時段1的前100名的圖書在后面時段里重復出現在排行榜前列的情況校相對少,最多的時候也僅有16種,并且重復情況會隨著時間的增長而減少。也就是說,按本文的圖書借閱排行算法有自動淘汰的功能,避免了某些熱門圖書長期占據排行榜前列的情況。增大重力因子的值可以增快自動淘汰的速度。

表3 重復出現統計
本文提供的圖書借閱排行算法綜合考慮了借閱次數、復本數、入藏日期和最近外借日期等影響因數,在保證了較好推薦效果的情況下,實現了自動淘汰機制,糾正了傳統圖書借閱排行算法存在的某些熱門圖書長期占據排行榜前列之不足。借助該算法,生成圖書借閱排行榜,可以為讀者提供較好的圖書推薦、導讀服務,幫助讀者快捷地篩選圖書,提升服務質量、提高館藏利用率。本文研究的圖書排行算法只能針對被借閱過的圖書,對于未被借閱過的新書該如何排行、推薦,則是下一步的研究方向。
[1]教育部關于印發《普通高等學校圖書館規程(修訂)》的通知[EB/OL].[2013-11-05].http://www.edu.cn/2002 0610/3058180.shtml.
[2]李正祥,陸書紅.書目推薦:公共圖書館參與社會閱讀的重要途徑[J].高校圖書館工作,2012(6):84-87.
[3]王喜明,祁莉.打造“推薦圖書排行榜”:高校圖書館導讀的新思路[J].圖書館建設,2010(7):78-81.
[4]張海營.基于RFM模型的圖書館圖書評價系統研究[J].圖書館,2012(3):60-61.
[5]Spink A,Jansen B J,Wolfram D,et al.From e-sex to e-commerce:Web search changes[J].IEEE Computer,2002,35(3):107-109.
王澤賢廣州大學圖書館副研究館員。廣東廣州,510006。
Study on the Book-loaning Ranking Algorithm
Wang Zexian
The current traditional algorithm of book-lending ranking is only ranked by the frequency of lending,which results in the problem that some pop books may continue to rank top.This paper puts forward a new book-lending ranking algorithm,which comprehensively considered the influencing factors of the lending-frequency,duplicate-mode,collection date and the recent lending date.This new algorithm can ensure the better recommendatory effect,realize the automatically selective system and solve the deficiencies of the traditional algorithm.
Recommended bibliography.Reading guidance.Book-lending ranking.Algorithm.
G252
2014-01-10編校:鄒婉芬)
*本文系廣州市教育科學“十二五”規劃課題項目“關于用開源軟件實現OPAC 2.0的研究”(項目編號:11A147)研究成果之一。