梁肇敏,梁婷婷
(南宁学院 人工智能学院,南宁 530200)
随着计算机与网络技术的长足发展,数字化的管理方式也逐渐融入社会各个行业中。数据的海量增长是管理方式数字化后的必然结果,而在其中也蕴含着对用户而言各类有价值的信息。研究可知,推荐系统通过某类特定方式让用户和物品连接起来,不但可以帮助用户发现有用信息,还能将信息展现给感兴趣的用户,从而为用户决策提供有益参考。目前,很多领域都开始引入个性化推荐系统,将大量数据转化成为有价值信息就显得尤为重要。
而随着互联网上产生的数据规模日趋庞大,以协同过滤算法为代表的传统推荐由于无法充分挖掘海量数据特征、对稀疏数据处理并不理想等缺点,使得传统推荐已无法适用于现代大数据背景下的推荐场景。考虑到深度学习具有表达能力强,能在海量数据挖掘深层次、有价值关系的优点,越来越多推荐业务场景用上了深度学习技术,而深度学习的推荐系统相比于传统推荐系统的架构设计在实现上又有较大差异。综合前文论述后进一步探讨指出,本文拟选在电影推荐场景下展开对深度学习推荐系统的研究论述。
传统推荐系统中使用的以协同过滤为代表的推荐系统模型,因为难以解决数据稀疏性、冷启动等问题使得推荐效果并不令人满意,特别是对目前产生的巨量数据处理上已然处于劣势。在大数据背景下,有关推荐系统核心模型设计上,现已越来越多地引入深度学习技术,电影推荐系统亦是如此。推荐系统中,通过利用深度神经网络构建了一个深度学习的电影推荐模型,模型以大数据为基础,使用用户特征和电影特征来学习用户和电影之间的隐藏特征,深度挖掘用户和电影之间的相互作用关系,从而使推荐性能得以提高。
模型框架如图1所示。由图1可见,在特征表示层通过神经网络将用户和电影进行嵌入式(Embedding)表示,得到用户和电影的嵌入式向量,然后分别对用户和电影的嵌入式向量特征进行特征融合,得到能分别表示用户和电影的特征。接下来,再通过多层神经网络对用户特征和电影特征进行充分融合,组合学习不同特征实现融合解析,充分挖掘多特征的组合,深度挖掘用户与电影交互关系。
图1 深度神经网络电影推荐模型总体框架图Fig.1 Overall framework of deep neural network movie recommendation model
网络特征主要用到数据中用户特征的4个属性,分别是用户ID、性别、职业和年龄,而电影特征用到的3个属性,分别是电影ID、电影类型和电影名称。深度神经网络输入的数据有别于传统模型,一般情况下是将数值型的数据输入到神经网络模型中。所以用户的特征属性和电影的特征属性需要做数值化的嵌入式(Embedding)向量表示处理。
Embedding是一个嵌入层,将输入的非负整数矩阵中的每个数值,转换为具有固定长度的向量。在NLP任务中,多是把输入文本映射成向量表示,以利于神经网络的处理。嵌入层Embedding可以完成数字到向量的映射。
1.2.1 用户嵌入式向量表示
用户特征属性需要将用户的ID、用户性别、用户职业和用户年龄分别经过嵌入层映射成高维度向量,再利用全连接层得到属性特征,而后将这些属性特征进行拼接和全连接后得到用户特征。
1.2.2 电影嵌入式向量表示
电影特征属性需要将电影ID、电影类型、电影名称这些数据分别经过嵌入层映射成高维度向量,其中的电影名称常常蕴含有丰富的文本信息,所以可以用文本卷积神经网络来进行特征提取,并经过全连接层得到属性特征。将这些属性特征进行拼接和全连接后得到电影特征。
在提取了用户特征和电影特征后,就可以将用户特征和电影特征进行融合,这里是将用户特征和电影特征先进行融合,具体就是采用向量拼接的方式融合成多层神经网络输入需要的向量,此处需用到的数学公式为:
其中,函数表示将用户特征u和电影的特征m进行拼接,x表示输入到网络中的向量。输入多层神经网络中,到第一个隐藏的输出值表达式为:
其中,表示激活函数,这里使用了函数作为隐藏层的激活函数;表示输入层和第一个隐藏层之间的权重矩阵;表示偏置向量。输出层的函数公式为:
其中,使用函数作为输出层激活函数,函数为交叉熵损失函数,推得的数学公式可表示为:
在模型训练上,使用作为优化函数,根据梯度值、下降振荡情况,设置学习率为0.001。模型训练后,就可以根据模型预测观看电影的概率大小来实现模型对用户的电影推荐。
本系统具体架构如图2所示。由图2可知,系统整体架构分为数据处理层、模型层、前端视图层。对此可做研究分述如下。
图2 电影推荐系统总体架构图Fig.2 Overall architecture of movie recommendation system
在数据处理层中,系统使用Spark批量对离线的用户特征和电影特征进行特征处理,使用Flink对客户端的实时在线特征数据进行特征处理。系统经过数据处理和特征工程得到的用户和电影特征存在如相关Redis等数据库中以备使用。
在模型层中,系统使用Spark MLib中的相关Embedding推荐和协同过滤等多种传统推荐算法进行快速召回,筛选出推荐用的候选集。TensorFlow训练深度学习推荐模型后,利用TensorFlow Serving研发部署在线推荐用户电影列表。
前端视图层使用Html、Css和JavaScript等前端技术,展示系统推荐出来的电影推荐信息。
基于深度学习的电影推荐系统在功能设计上总体包含4个功能模块,分别是:用户登录注册、电影搜索查找模块、个人中心模块、推荐模块。具体如图3所示。这里将对此进行阐释表述如下。
图3 电影推荐系统功能模块图Fig.3 Functional module diagram of movie recommendation system
(1)用户登录注册模块。包括用户登录和用户注册功能,实现对用户的身份进行验证,输入账号如没有注册,则会跳转到注册界面。在注册界面用户填写相关注册信息,如注册账号已经存在,则该账号不能注册。
(2)个人信息维护模块。包括个人信息维护和兴趣标签维护功能,实现对用户个人信息的存储维护,用于收集用户的偏好和个人信息。系统可以提取用户特征提供用户数据。
(3)电影搜索查找模块。包括电影搜索功能,为用户提供电影的相关影片信息搜索。
(4)电影推荐模块。包括相似电影推荐和个性化电影推荐两个功能。其中,相似电影推荐是用户点击浏览某部电影后,系统根据与该电影相似的电影进行推荐。而用户个性化推荐是系统根据用户的浏览历史行为,分析出用户对电影的偏好,从而进行有针对性的推荐。
2.3.1 ER图设计
系统的主要实体是用户和电影。用户可以查看相关电影信息,若点击一部电影,系统将会推荐与这部电影相似的其他电影。用户登录后,系统还会根据用户历史行为数据,为用户推荐可能喜欢的电影。文中对此将做设计剖析如下。
(1)用户实体。是系统对用户的信息进行描述,用户实体的属性包括用户编号、用户名称、用户密码、用户性别、用户年龄、用户职业。研究中给出的用户ER图如图4所示。
图4 用户ER图Fig.4 User ER diagram
(2)电影实体。是系统对电影的信息进行描述,电影实体的属性包括:电影编号,电影名称、用户密码、用户性别、用户年龄、用户职业。研究给出的电影ER图如图5所示。
图5 电影ER图Fig.5 Movie ER diagram
(3)用户评分实体。是用户对电影评分的描述,用户评分实体的属性包括了用户编号、电影编号、用户评分值和评分时间等信息,研究给出的用户评分ER图如图6所示。
图6 用户评分ER图Fig.6 User rating ER diagram
(4)电影标签实体。是用户给电影指定的标签数据的描述,电影标签实体的属性包括了用户编号、电影编号、标签,标签时间。研究给出的电影标签ER图如图7所示。
图7 电影标签ER图Fig.7 Movie label ER diagram
2.3.2 数据表设计
数据库的数据表主要包括用户信息表、电影信息表、用户评分表,电影标签表。下面将给出完整论述和解析设计。
(1)用户信息表:用户信息表主要是保存用户相关信息,包括用户编号、用户名称、用户密码、用户性别、用户年龄、用户职业。详见表1。
表1 用户信息表Tab.1 User information table
(2)电影信息表:电影信息表包括电影编号、电影名称、电影导演、电影演员、电影类型和上映时间等信息,详见表2。
表2 电影信息表Tab.2 Movie information table
(3)用户评分表:用户评分表保存着用户对观看过电影的评分,推荐系统参照该评分来挖掘用户观影偏好。用户评分表包括了用户编号、电影编号、用户评分值和评分时间等信息,详见表3。
表3 用户评分表Tab.3 User rating table
(4)电影标签表:电影标签表保存的是用户给电影指定的标签数据,包括了用户编号、电影编号、标签,标签时间等,详见表4。
表4 电影标签表Tab.4 Movie label table
满足了系统功能性后,就产生了非功能性的需求,此时需要去考虑的系统运行应该具备的各项非功能性需求,如:稳定性、安全性、易用性、可扩展性等。具体阐释如下。
(1)稳定性。系统应该能保证用户访问的稳定性,降低用户的延迟;同时还应该能保证系统运行的稳定性,使其不致崩溃,导致用户体验降低。
(2)安全性。用户各项信息都属于用户的隐私,系统需要保证用户信息等数据的安全性,防止出现信息泄露或数据丢失的问题,以提高用户对系统的信任度。
(3)易用性。对用户来说系统的前端界面应简单易懂,无需复杂的操作交互逻辑,能让用户快速地理解操作流程,轻松上手使用,提升用户使用体验。
(4)可扩展性。系统应该切合已有的管理系统,保证其升级扩展能力,方便满足未来对新设备和算法的需求。
系统首页展示相关电影信息,电影信息的展示是按照不同的电影类型来展示。展示电影的电影名称、电影海报和电影评分。首页不显示任何个性化推荐结果,只是按照分类对电影进行展示,供用户浏览。
用户点击某部电影信息后,将进入电影详细信息页面,在电影信息页上半部分会显示出电影海报、电影名称、上映时间、为你预测、链接、平均分、电影类型和喜欢这部电影的其他用户等信息。页面下半部是推荐与这部电影相似的电影信息。该部分是根据用户点击的电影,由推荐模型对这部电影进行特征分析,计算找出与该部电影特征相似的电影,再依据相似度高低,推荐相似度最高的电影到信息页面。
该页面主要是系统分析用户浏览历史行为。模型将用户的编号、年龄、职业等各项用户特征与电影的编号、电影名称、电影类型、上映商检等特征传入深度学习模型,挖掘用户与电影的深度、潜在的交互。在此基础上,根据用户与电影之间的交互联系强弱,为用户推荐用户感兴趣的电影。用户相关信息界面包括已经观看过的电影、对电影评分情况、喜欢的电影类型。
本文利用深度学习技术来探求挖掘用户与电影的深度交互关系,构建了基于深度学习的推荐模型,并利用Spark、Flink技术处理了用户特征和电影特征。用TensorFlow深度学习框架对电影推荐模型进行线下训练。同时使用TensorFlow serving对电影推荐系统进行了线上的部署,为用户进行相似电影推荐和个性化电影推荐,还把推荐结果在前端页面上进行了展示,解决了用户面对海量电影信息上的选择难题。