马学明 童怀
摘要:近年来,各类视频应用上内容越来越丰富,页面上与当前用户无关的内容也越来越多。因此,市面上出现了多种不同的推荐算法来进行内容推荐。但是,不是每种推荐算法都能够解决所有的问题。基于个性化推荐系统的视频App,融合了多种推荐方法。首先为了解决推荐系统的冷启动问题,采用了基于统计学的推荐方式,同时,采用基于协同过滤的推荐算法,计算视频和用户间的隐藏特征,最后还有实时推荐模块,能够根据用户近期的行为对推荐内容进行调整。
关键词:android应用;推荐系统;协同過滤;ALS算法;实时推荐
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2021)08-0004-03
Abstract: In recent years, the content of various video applications is becoming more and more abundant, and there are more and more content on the page that has nothing to do with the current users. Therefore, there are many different recommendation algorithms in the market for content recommendation. However, only use a recommendation algorithm can not solve all the problems. The video App based on personalized recommendation system integrates various recommendation methods. Firstly, in order to solve the cold start problem of the recommendation system, a recommendation method based on statistics is adopted. At the same time, a recommendation algorithm based on collaborative filtering is adopted to calculate the hidden features between video and users. Finally, there is a real-time recommendation module, which can adjust the recommended content according to the recent behavior of users.
Key words: android application; aecommendation system; aollaborative filtering; ALS algorithm; real-time recommendation
1 背景
近年来,为了满足人们越来越高的生活需求,各类视频App层出不穷,有爱奇艺视频、腾讯视频等长视频应用,也有抖音、快手之类的短视频应用。这些应用上各种内容非常丰富,但同时也充斥着大量与用户无关的内容。因此,为了能够在大量的网络资源中找到用户最感兴趣的内容,个性化推荐系统也就应运而生。
视频推荐系统常采用基于协同过滤的推荐算法,该算法可以根据用户特征的相似度找到拥有共同喜好的人,或者根据视频的相似度,找到和用户喜欢的视频相似的其他视频,从而可以很好地减少应用内信息的冗余,获取到用户更为感兴趣的内容,给用户带来更好的使用体验。
2 系统设计
本文将基于个性化推荐系统设计一款视频App。系统的总体架构图如图1所示。系统主要分成服务端、客户端和推荐系统三个部分。服务端负责提取日志信息,传入推荐系统中计算,并将计算完成的数据存入数据库中。客户端负责上报操作日志,请求并拉取服务端下发的推荐列表,最后将内容完整显示出来。推荐系统分为统计推荐模块、离线推荐模块和实时推荐模块。统计推荐模块主要是根据近期热门程度或视频的评分高低进行推荐,离线推荐模块可以根据视频中的隐藏特征进行推荐,实时推荐模块则会得根据使用者对当前视频的评价实时修改推荐内容。
2.1 服务端设计
2.1.1 日志系统
要想根据用户的信息准确得推荐用户感兴趣的视频内容,首先需要获取用户的信息。用户在使用App时会采集操作日志到服务端的日志系统。日志系统采用Spring Boot和MongoDB来构建。Spring Boot可以简化Web应用的环境搭建,Spring Boot继承了Spring框架,开发者可以通过Spring Boot更方便得使用Spring框架来进行Web开发。
MongoDB 为Web应用提供了可扩展的高性能数据存储解决方案,是基于分布式文件存储的数据库。MongoDB功能非常丰富,而且与其他非关系型数据库相比,它比较像关系数据库。由于 SpringBoot本身就封装了 MongoDB 的套件,因此使用 SpringBoot 整合 MongoDB 做日志系统的开发,是相得益彰的[1]。
日志系统主要有日志记录和日志管理两个模块。日志记录模块主要负责收集客户端应用运行过程中产生的数据信息,并将它们存储到MongoDB数据库中。日志管理模块主要负责数据的查询、删除以及统计分析。
2.1.2 数据清洗
本设计中推荐系统的数据E-R模型如图2所示。
但是客户端上报上来的原始数据文件并不能直接应用于推荐系统上,所以将数据传到推荐系统之前,还需要进行数据清洗。数据清洗主要是对脏数据进行一个重新检查、去重、过滤,目的在于剔除不合格的数据,只保留有用数据[2]。
2.2 客户端设计
客户端基于Andriod系统设计,代码采用MVP架构设计[3],MVP是目前Adroid开发中最主流的架构,它可以很好地解决视图层代码臃肿的问题,并且便于后期的维护和增加新功能。MVP架构分为Model,View和Presenter三层, Model层负责获取数据,处理数据,View层负责UI的展示和交互,Presenter层则是负责担任View和Model通信的桥梁,传递Model的数据给View展示,或者接收View层存储到Model层,以及处理一些其他的逻辑。本系统中客户端主要将服务端下发的推荐列表缓存到Model层,然后传递到View层进行展示,并且用户可以长按视频列表对视频进行评分。最终展示结果如图3所示。
2.3 推荐系统设计
2.3.1 基于统计的推荐模块
基于统计的推荐模块可以根据数据库中已有的视频数据,结合所有用户对这些视频的评价进行推荐,主要用来解决推荐系统在冷启动时没有用户历史信息导致其他推荐方式不准确的问题。这种推荐方式主要通过使用SQL语句查询数据库中已有的内容来实现。如需要最热门的视频推荐,可以通过SQL语句查询数据库中的评分数据集,统计所有评分中评分数最多的视频,然后将视频按照评分从大到小排序。
2.3.2 离线推荐模块
离线推荐模块可以根据用户所有的历史数据,采取设定的离线推荐算法周期性得进行结果统计与保存,计算结果在短时间内是一样的,如果需要改变推荐结果,需要再次调用算法。
离线推荐模块基于隐语义模型进行协同过滤。使用隐语义模型来训练模型时,可以让模型去发掘内容间的潜在特征,获取预测评分。隐语义模型是基于机器学习的,它利用降维技术获得与用户的评分矩阵比较接近的低阶评分矩阵[4]。低阶矩阵只持有比较重要的特征,剔除了无用特征,减轻了数据稀疏性的影响。对于隐语义模型的求解,可以采用交替式最小二乘法(Alternating Least Squares,ALS)[5]。
我们假设用户特征矩阵为[Pm×k],视频特征矩阵为[Qk×n], 评分矩阵为[Rm×n],那么:
ALS算法的主要思想是找到两个低维矩阵[Pm×k] 和矩阵[Qk×n] 近似逼近[Rm×n] [6], 可以先固定[Qk×n],把[Pm×k]当作变量,通过损失函数最小化求出[Pm×k],这就是一个经典的最小二乘问题,求解之后再反过来固定求得的[Pm×k],把[Qk×n]当作变量,求解出[Qk×n]。之后交替执行,直至误差小于设定值,或者执行次数大于设定的次数。损失函数最小化公式如下:
其中[λu Pu2+λi Qi2]是正则化项,是为了防止过拟合而加入的,[λ]可以通过交叉验证得到。
通过 ALS 算法计算得到当前用户的所有视频推荐矩阵,之后只需要将预测结果通过预测分值进行排序,然后将其存入数据库中。客户端需要用到推荐结果时再请求服务端查询分值最高的推荐列表。
2.3.3 实时推荐模块
实时推荐模块和离线推荐模块最大的不同在于离线推荐是根据用户的所有评分记录来计算用户总体的偏好,但是实时推荐结果反映的是用户近期的偏好。实时推荐模块需要做到在用户本次或最近几个评分之后系统可以明显地更新推荐结果,并且要求整体的计算量不大,这样才能够在响应时间内满足实时要求。
本文的实时推薦算法设计的具体步骤如下:
1) 如果用户u对视频p进行了评分,会导致对用户u的推荐列表的更新。由于用户 u对视频 p评分,且这个评分是属于好评,那么就可以选取与视频 p 最相似的 K 个视频作为候选视频。视频间相似度计算公式采用余弦相似度公式[7]计算,假设任意的两个视频p,q,其特征向量分别为[Vp=
2) 在候选视频集中,我们根据用户对当前视频的评分高低,来计算与当前视频相似的其他视频的优先级,并以此优先级将候选视频排序。推荐优先级计算公式如下:
其中,RK指用户按时间顺序选取的最近K个评分,[Rr]指用户u对当前视频r的评分,sim(q,r)指视频q与视频r的相似度,这里我们设定最小相似度为 0.6,如果视频q和视频r之间的相似度低于0.6,则视为两者不相关。sim_sum表示q与RK中视频相似度大于最小相似度的个数,incount表示RK中与视频r相似且评分较高的视频个数,recount表示RK中与视频r相似的且评分较低的视频个数。
3) 根据候选视频的推荐优先级得到更新后用户u的推荐列表后,这个列表将被发送到服务端,与服务端数据库中用户u的上次实时推荐结果进行合并,从中并选出优先级前K大的视频就是新的实时推荐结果,服务端再将此推荐结果下发客户端进行展示即可。
3 实验结果
实验抓取了500个视频数据,在推荐之前先模拟标记用户对这些视频的态度,用于和最后的推荐结果对比,用户感兴趣的视频为正样本,不感兴趣的视频为负样本,无法判断是否感兴趣的为无关样本。模拟通过本文设计的推荐系统后得到为用户推荐的50个视频,结合推荐之前对视频的标记,我们以精准度,召回率以及F1值[8]来评价本文设计的推荐系统。其中,精准度计算公式为:
其中,TP是指视频原本属于正样本,被系统判断为正样本的个数,FP指视频原本属于负样本,被系统判断为正样本的个数,FN指视频原本属于正样本,被系统判断为负样本的个数。最终实验数据如表1所示。
采用表1中的实验数据分别计算精准度,召回率和F1值,得到实验结果如图4所示。
其中,离线推荐的精准度为0.676,召回率为0.793,F1值为0.730,能够基本达到准确推荐。由于实时推荐与用户历史的相关数据有关,所以当用户没有实时评价数据时,实时推荐的结果和离线推荐结果基本一致,当用户评价次数足够多时,实时推荐的准确度可以进一步提升。
4 结束语
本文设计了基于个性化推荐的视频App,分为服务端、客户端和推荐系统三个模块进行设计,并在推荐系统模块中采用了三种不同推荐方式,以应对不同场景。基于统计的推荐可以在推荐系统冷启动,没有用户数据时使用,离线推荐根据用户特征和视频特征,对用户比较长周期的行为进行推荐,而实时推荐会根据用户近期的行为进行实时调整。最后,通过模拟实验验证了本系统的推荐效果能基本实现准确的推荐。
参考文献:
[1] 闫四洋,胡昌平,卞德志,等.基于SpringBoot+MongoDB的微服务日志系统的实现[J].计算机时代,2020(8):69-71,74.
[2] 李垚周,李光明.分布式数据清洗系统设计[J].网络安全技术与应用,2020(2):60-62.
[3] 倪红军.基于MVP模式的Android应用开发研究[J].电子设计工程,2018,26(11):6-9,13.
[4] 刘均.基于隐语义模型的个性化推荐算法的研究[D].重庆:重庆邮电大学,2019.
[5] 薛琳兰.基于大数据技术的电商推荐系统的设计与实现[D].青岛:青岛大学,2020.
[6] 迟玉良,祝永志.项目相似度与ALS结合的推荐算法研究[J].软件导刊,2018,17(6):81-84.
[7] 字凤芹,牛进,毕柱兰,等.基于图数据库的电影推荐系统设计[J].软件导刊,2016,15(1):144-146.
[8] 陈明,孙丽丽.移动电话内容服务系统的个性化推荐[J].计算机工程与应用,2007(4):4-6,39.
【通联编辑:谢媛媛】