基于非负矩阵分解的图书共享系统的研究及应用

2019-06-01 10:06颜培皓
电脑知识与技术 2019年12期

颜培皓

摘要:当前高校内个人所有的纸质图书因无法得到及时流通而导致相应资源的闲置甚至浪费的问题日趋严重。在分析高校个人图书资源共享现状基础上,融合“互联网+”环境下的共享经济理念,首先设计了一种高校图书共享需求及其运用模式,其次运用非负矩阵分解算法实现了一种动态图书资源推荐方法,以解决图书资源检索和快速定位目标对象需求的问题,最后,运用Spring、Struts和Hibernate等技术实现了图书共享系统。实验结果表示,所实现的系统针对不同用户的个性化需求,能够快速预测其最有可能希望使用的书籍资源,以提高图书资源的利用率和受益群体。

关键词:共享图书;非负矩阵分解;推荐算法;资源调度;个性化需求

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2019)12-0287-04

Research and Application of Book Sharing System Based on Non-negative Matrix Factorization

YAN Pei-hao

(College of Computer & Communication Engineering, China University of Petroleum(East China), Qingdao 266580, China)

Abstract: At present, the problem of idle or even wasted resources of individual paper books in the university due to the inability to get timely circulation has become increasingly serious. Based on the analysis of the status quo of individual book resource sharing in colleges and universities, and integrating the concept of sharing economy under the "Internet +" environment,it firstly designs a university book sharing demand and its application mode, and secondly uses a non-negative matrix factorization algorithm to implement a dynamic book resource recommendation method, which is used to solve the problem of library resource retrieval and rapid target object selection. Finally, it implements a book sharing system using technologies such as Spring, Struts, and Hibernate. The experimental results show that the implemented system can quickly predict the book resources that it is most likely to use for the individualized needs of different users, so as to improve the utilization and beneficiary groups of book resources.

Key words: sharing books; non-negative matrix factorization; recommended algorithm; scheduling of resources; individualized demands

1 背景

圖书的存在价值在于阅读,其也是高校师生提高自身素质和交流的重要窗口。而高校中,大部分学生阅读完图书之后就不会再看,毕业时当成了废纸卖掉或者扔掉。这导致图书无法及时流通,从而造成图书资源浪费[1]。“互联网+”下共享经济通过第三方网络平台整合闲置资源,打通供需渠道,能够有效解决供需双方信息流通的不对称问题,为使图书价值达到最大化提供了一种新的契机[2]。

目前,已有很多研究致力于图书共享方面的工作[3],大多是对海量数据资源进行简单检索和结果堆放,仍存在无法满足个性化需求的问题[4]。为了使用者在众多的图书资源中快速寻找到自己真正需要的资源,通过读者的行为获取读者的兴趣爱好[5]。基于流行度的算法[6]根据PV(页面访问量)、UV(独立访客量)、分享等数据生成一种推荐度进行排序,再按照推荐度的高低向指定用户进行推荐。该算法的优势在于简单适用于初次使用系统的新用户,但针对用户的个性化需求无法满足。

基于内容的算法(Content-Based Recommendations CBR)[7]是获取用户喜欢的物品后,分析该物品的特征从而获取与该物品特征相似山外物品推荐给用户。算法有效地解决了针对用户个性化推荐的问题,对于新加入物品的推荐概率大大提升。但无法实现对新用户的推荐而且对物品特征的提取比较困难。

协同过滤算法(Collaborative Filtering CF)是[8]在推荐算法中应用相对广泛且相对推荐效果较好的,基于用户的CF通过分析各个用户对物品的评价计算用户的相似度从而推送相似用户的喜好物品。基于物品的CF 与其原理类似,只是将关联关系改变成物品与物品之间。这两种算法的主要思想比较容易理解,推荐的准确性也比较高。但仍存在一些问题:依赖用户对物品的确切的评分会导致评分高的物品被推荐几率过高,小众用户或小众物品可能在很长的时间段里不会被推荐,以及计算相似性矩阵的稀疏性问题和系统的冷启动问题。在此基础上,邓爱林[9]等人提出了一种基于项目评分预测的协同过滤算法,根据项目间的相似性预测用户对尚未评分项目的评分,以提高推荐的质量。李林峰[10]等人提出了一种基于时序行为的协同过滤推荐算法,通过构建基于时间序列的行为(只需用户的行为时间,而不需要其他的信息),获取相邻近的产品或用户的相互影响关系,从而预测用户对物品的实际评分,提升推荐的精度。这两种算法均从一定的角度解决了传统协同过滤推荐算法的不足,但其本质上仍是直接基于物品的推荐,在针对根据物品特征值进行推荐上有所欠缺。

针对不同用户的个性化需求,快速预测其最有可能希望使用的书籍资源,本文基于非负矩阵分解算法设计并实现了一款高校图书共享系统,以期来提高图书资源受益群体。

2 图书共享及推荐系统的功能设计

2.1 高校图书共享模式概述

以高校图书馆为例,高校图书馆可将预先为教师和学生分配的线下用户借阅图书的身份识别信息(如工号或学号)录入本系统并为每位用户预先分配一定的信用值,教师或学生登录本系统后可发布闲置图书以供共享,发布书籍时,为每本书籍提供用户认为最符合书籍内容的几个标签,同时设定所发布书籍的信用值和数量。用户每共享一本书籍,可在自己的信用值基础上增加信用值。当用户在平台上借阅书籍时,可通过书籍搜索查询相关书籍,若查询不到,可发布需求,高校图书馆管理人员可根据用户需求的统计信息有针对性的补充书籍,也可查看线下图书馆是否有相关纸质书籍,可根据用户留下的联系方式联系用户。当用户查询到所需借阅的书籍时,用户提交申请后,系统首先判断书籍数量是否足够,数量不足时自动推荐用户感兴趣的相关书籍,数量充足时判断用户信用值是否大于所借书籍信用值总和,用户信用值充足时,系统设置时间自动审批,同时也可由图书馆管理人员操作审核,审核通过后分配书籍给用户,同时扣除用户相应信用值。用户完成借阅后,可根据线上信息归还书籍到指定地点,也可归还至高校图书馆。

2.2 系统功能设计

依据所设计的高校图书共享模式,本文所设计的高校图书共享与推荐系统功能模块如图1所示。

2.2.1 前台网页模块功能

2.2.1.1 用户账户管理

由于共享经济目前最大的问题是用户的信用问题,故本系统设定两大用户角色,学生用户和教师用户,且用户必须为本校真实在校教师或学生且登录时需用工号或学号。为了让更多的用户体验共享服务,也是为了更多的用户可以主动加入共享群体中,系统为每一个用户分配一定信用值的初始值,以供初次使用本系统的用户体验共享图书服务。

2.2.1.2 我的信用

显示当前用户的信用值,初始信用,用户每共享一本书籍,信用值增加,申请借阅书籍时,根据书籍得总信用值,扣除用户相应的信用值。当用户信用分为0 时,无法享受借阅服务。当用户借阅书籍逾期超过 30 天时,列入黑名单,不再允许该用户借阅书籍。

2.2.1.3 我的借阅

此功能用来查看用户已经申请借阅书籍订单的信息,系统的审批状态,针对系统已经审批的订单,用户在完成借阅书籍后,可在此功能模块中点击还书。

2.2.1.4 发布图书

任意一个注册过的用户在登录后,可以点击发布图书功能发布共享图书信息。包括选择待发布书籍类别、填写书籍名称、书籍介绍(包括作者、出版社、书籍 ISBN)同时针对每本图书设置五个标签作为后续为用户推荐图书的特征值。书籍的信用值和数量默认设置为 1,用户可根据自己发布的图书的质量和数量输入新的信用值和数量,书籍的发布者默认为当前登录用户。

2.2.1.5 书籍搜索与推荐

随着平台的不断推广,书籍数量不断增多,为了方便用户在最短的时间内找到自己需要的书籍,设置书籍搜索功能供输入书籍全部或部分名称来搜索目标书籍。若已发布的共享图书不存在用户所需要的书籍,则系统将会根据非负矩阵分解自动推荐出其他相关书籍,其具体实现将在第3部分阐述。

2.2.1.6 图书展示

图书展示主要用来展示目前平台上所有被用户共享的书籍,对展示出来的书籍用户可以点击查看对应书籍的信息介绍包括书籍名称、作者、出版社、ISBN 以及书籍的数量和书籍的信用值,同时用户可以对书籍进行评价和查看该书籍的评价。书籍的评价功能作为用户了解书籍的内容和书籍的质量的参考,也可作为后续建立一个多维度的信用评价体系时的衡量标准。

2.2.1.7 发布需求

此功能针对用户在平台上找不到所需要的书籍时,点击发布需求,填写用户的姓名、联系方式、邮箱和需求书籍的名称以及基本介绍内容,同时记录用户发布需求的时间。

2.2.1.8 借书清单

保存当前用户以及申请但未完成借阅的书籍,满足用户一次可能借阅多本书的需求,同时用户可以查看当前已经申请的书籍,并可以继续添加或删除。

2.2.2 后台模块功能

2.2.2.1 用户管理

用户管理包括对管理员自己的账户密码的修改,以及对系统用户信息查看和删除。

2.2.2.2 需求信息管理

查看用户发布的书籍需求信息,当平台上有该书籍时,可根据用户留下的联系方式告知用户。

2.2.2.3 借阅信息管理

查看所有用户申请借阅的订单信息,包括借阅时间,受理状态等信息,同时在系统未自动审批时限内,可辅助人工受理订单。

2.2.2.4 书籍管理

此功能包括对图书的基本信息的管理、图书类别的管理。管理员也可以发布图书,同时考虑到用户可能对书籍分类不明确,增加书籍类别功能设置在管理员下。

3 基于非负矩阵分解的图书推荐算法

3.1 非负矩阵分解算法概述

基于矩阵分解的推荐算法通常会有很高的预测精度、良好的可伸缩性和高度的灵活性[11],可以将用户和物品的特征转换为隐语义的特征,然后通过计算用户与物品之间隐语义的相關性进行推荐。在图书共享系统中,应用非负矩阵分解的推荐算法,综合考虑通过读者之间的相似性、读者与书籍之间信息的分析,同时考虑数据量大引起的时间空间复杂度高的问题,以优化函数为目标,在达到全局最优的同时,提高预测的准确度[12]。

基于共享图书的非负矩阵分解推荐算法用于(在用户申请书籍而书籍数量不足时,向用户推荐与之申请书籍类型相同或相似的书籍)。结合基于少部分用户对少部分物品的评分,我们希望预测出目标用户对其他未评分物品的评分,进而将评分高的书籍推荐给目标用户。除了有评分信息外,数据集中还包含有用户信息、书籍信息和对书籍评分的时间戳等信息。即便如此,数据依然非常稀疏,构成的用户-书籍的评分矩阵中,评分信息只占比较少的一部分[13],因此矩阵中会存在很多的未知信息,我们需要比较准确地了解和预测出用户对相应书籍的偏好情况。

3.2 算法描述

在上述算法思想的基础上,通过部分用户和部分书籍之间的评分数据,其他部分的评分为空白的,用已有的部分稀疏数据矩阵来预测矩阵中空白位置书籍与用户之间的评分关系,找到最高评分的书籍推荐给用户。

基于共享图书的非负矩阵推荐算法分两个步骤执行,利用非负矩阵分解的算法进行预测打分值,寻找到该用户可能会打分较高的书籍进行书籍推荐。算法设计如下:

3.2.1 对未打分书籍进行评分预测

将用户对书籍打分的数据计入数据集,构成用户-书籍矩阵,在矩阵中,由用户对每一本书籍的打分和未对书籍打分的情况构成,如下表所示:

将用户-书籍矩阵分解为两个矩阵相乘的形式,上图中矩阵[M]为[m]行[n]列的形式,即[m]个用户与其对应打分[n]本书籍的信息,分解为[m×k]的矩阵[P]和[k×n]的矩阵[Q]的乘积:

[Mm×n=PTm×kQk×n] (1)

其中[k]为潜在因子的数目,也就是书籍对应表现出的特征,矩阵[P]可以表示为用户-潜在因子矩阵,该矩阵的数值表示用户对于不同因子元素的偏好,矩阵[Q]表示潜在因子-书籍矩阵,表示每本书籍所含有的因子元素的部分,通过上表中的非负矩阵分解得到潜在因子与不同用户和不同书籍之间的关系矩阵。

采用线性回归的思想将矩阵[M]进行分解,为了让用户对书籍的评分和用矩阵乘积得到的书籍评分残差尽可能小,采取均方差作为损失函数来寻找到最终的分解矩阵[P]和[Q]。对于其中某一个用户对其中一本书的评分[mij],用非负矩阵分解的算法得到对应的[qTjPi] ,对应的损失函数即均方差为 [(mij-qTjPi)2]的值应尽可能小,累加所有用户对所有书籍的评分数据,期望将损失函数和最小化,同时为了防止过拟合,加入正则化项得到优化目标函数公式如下:

[argmin︸pi,qji,j(mij-qTjPi)2+λ(pi22+qj22)] (2)

通过梯度下降法进行优化计算,分别对[pi]和[qj]求导迭代得到极小值下所对应的的[pi]和[qj]值,此时的迭代公式为:

[pi=pi+α(Eijqj-λpi)qj=qj+α(Eijpi-λqj)] (3)

其中,[Eij=Rij-d=1DUdiVdj] (4)

从而对于用户对书籍的未知评分,通过[qTjPi]得到的预测值如表2所示

3.2.2 推荐书籍

矩阵分解模型把用户偏好和书籍属性投影到同一个隐因子空间,以用户偏好和书籍属性的匹配程度来预测评分得到上文所述的矩阵,对其中某一用户的预测打分情况对分值进行降序排序,将分值较高的书籍推荐给用户,同时避开用户已经借阅过的书籍。

3.3 算法实现效果

基于非负矩阵分解的图书推荐算法执行情况如下表3、表4所示:

结果分析:通过非负矩阵算法得到的预测矩阵中各评分值可以知道,对用户3的推荐中打分值最高的为书籍3,测试用例中,用户3和用户5有较强的相似性,而推荐书籍3正是用户5所评分最高的书籍,通过特征值得到用户三对特征1较感兴趣而特征2兴趣点差,与推荐书籍的潜在因子值基本相符。从而程序的执行结果比较好得验证了算法的思想。

3.4 系统实现效果

本文结合运用Spring、Struts和Hibernate等技术实现了图书共享与推荐系统,并通过非负矩阵算法实现推荐系统界面如下图3所示,在用户对书籍进行申请而书籍数量不足时,对不同用户兴趣点的不足进行书籍推荐,实现了高校图书共享系统的基本功能以及推荐系统的个性化书籍推荐场景。

图2 共享图书系统推荐书籍界面

4结束语

本文依据高校图书馆在各个方面对图书、教材等的需求以及对闲置书籍处理的问题,结合共享经济的模式并应用基于共享图书的非负矩阵分解的图书推荐算法,实现了对闲置图书的再利用、对图书的共享以及针对不同用户提供个性化的图书推荐服务。在研究一些常用推荐算法的基础上,设计与实现了基于共享图书的非负矩阵分解推荐算法。

参考文献:

[1] 王飞龙. 交易成本与零售商业模式的变迁——以图书流通行业为例[J]. 中国流通经济, 2018, 32(4).

[2] 王家宝, 敦帅, 黄晴悦. 当闲置资源遇见“互联网+”--分享经济的风靡之道[J]. 企业管理, 2016(6): 55-57.

[3] 赵琰, 戴晓翔, 詹庆东. 互联网思维下图书共享模式研究[J]. 图书情报工作, 2018, 62(3): 33-38.

[4] 李民, 王颖纯, 刘燕权. “211工程”高校图书馆馆藏资源推荐系统调查探析[J]. 图书情报工作, 2016(9): 55-60.

[5] 李克潮, 梁正友. 基于多特征的个性化图书推荐算法[J]. 计算机工程, 2012, 38(11): 34-37.

[6] 何佶星, 陈汶滨, 牟斌皓. 流行度划分结合平均偏好权重的协同过滤个性化推荐算法[J]. 计算机科学, 2018, 45(s1): 506-509.

[7] 吕学强, 王腾, 李雪伟, 等. 基于内容和兴趣漂移模型的电影推荐算法研究[J]. 计算机应用研究, 2018, 35(3): 717-720.

[8] 李伟霖, 王成良, 文俊浩. 基于评论与评分的协同过滤算法[J]. 计算机应用研究, 2017, 34(2): 361-364.

[9] 鄧爱林, 朱扬勇, 施伯乐. 基于项目评分预测的协同过滤推荐算法[J]. 软件学报, 2003, 14(9): 1621-1628.

[10] 李林峰, 刘真, 魏港明, 等. 基于共享知识模型的跨领域推荐算法[J]. 电子学报, 2018, 46(8): 1947-1953.

[11] 栗茂林, 梁霖, 陈元明, 等. 基于聚类优化的非负矩阵分解方法及其应用[J]. 中国机械工程, 2018, 29(6): 720-725.

[12] 刘慧婷, 陈艳, 肖慧慧. 基于用户偏好的矩阵分解推荐算法[J]. 计算机应用, 2015(S2): 118-121.

[13] 聂常超. 一种基于矩阵分解的电影推荐算法[J]. 电子设计工程, 2016, 24(19): 73-75.

【通联编辑:谢媛媛】