电影推荐系统的设计与实现

2021-03-29 10:02
物联网技术 2021年3期
关键词:列表页面标签

(广西大学 计算机与电子信息学院,广西 南宁 530004)

0 引 言

推荐系统[1-2]可以根据用户的兴趣、特点、需求等,为用户提供信息服务。与一般的搜索引擎不同的是,推荐系统是通过研究用户自身的兴趣偏好来进行个性化的推荐。一个好的推荐系统,能自动挖掘用户的兴趣点,引导用户发现自己的信息需求,同时,通过为用户提供个性化的推荐服务从而与用户建立联系,使得用户对推荐系统产生依赖。

视频推荐是根据当前热门的视频,研究用户的一些个性化数据,为用户提供个性化的视频推荐服务,以增加用户黏度,从而提高视频网站流量。对在线电影提供商而言,在线视频推荐系统[3]的推荐效率对公司的经济效益会产生直接的影响,甚至会影响到公司的发展。

1 相关技术介绍

1.1 协同过滤算法

推荐领域比较成熟的算法有基于内容的推荐算法、协同过滤算法、基于规则的推荐算法、基于效用的推荐算法、基于知识的推荐算法等。本文采用基于用户的协同过滤算法[4-7]实现个性化的电影推荐服务。基于用户的协调过滤算法的主要步骤如下:

(1)寻找与目标用户兴趣相似的用户集合;

(2)找到这个集合中的用户所喜欢的,然后把目标用户没有接触过的物品推荐给目标用户。

该算法的核心就是计算两个用户之间的兴趣相似度,给定用户u和用户v,令N(u)表示用户u感兴趣的物品集合,N(v)表示用户v感兴趣的物品集合,通过余弦相似度公式计算出两两用户之间的相似度,进行比较,最终筛选出与目标用户相似度最高的用户集合。余弦相似度公式为:

1.2 爬虫技术

爬虫是一种能自动运行的程序,其功能是从网络上爬取到特定的数据。Scrapy是一个基于Python的开源爬虫框架[8],包含多种中间件接口。目前Scrapy已广泛应用于数据挖掘、检测和自动化测试等项目上,采用Scrapy爬取豆瓣网上的电影信息作为本系统个性化推荐的基础数据。

2 电影推荐系统的设计

2.1 总体功能模块设计

本文设计的电影推荐系统包含以下六大功能模块:用户注册登录、个人标签管理、电影筛选和查找、个性化推荐服务、个人喜好列表、影评管理。其中个性化推荐模块是系统的核心模块。

2.2 数据库设计

本系统采用MySQL数据库,在Django model[9]基础上额外设计了4个数据表:电影信息表、用户额外信息表、评论表、爱好行为表。

(1)电影信息表用于存储电影信息,结构见表1所列。

表1 电影信息表

(2)用户额外信息表是基于Django models中的User表创建的,User表包含了用户名、密码、E-mail等信息,那么用户额外信息表只需存储额外的用户信息,结构见表2所列。

表2 用户额外信息表

(3)评论表是用来存储用户的影评内容,结构见表3所列。

表3 评论表

(4)爱好行为表就是用于存储用户对一部电影的行为,行为类型分为三种:want(想看)、like(喜欢)、dislike(不喜欢),结构见表4所列。

表4 爱好行为表

3 电影推荐系统的实现

3.1 爬取数据

进入本系统后,系统首先会在后台采用Scrapy框架爬取豆瓣电影网上的实时电影信息数据作为基础数据集。实时电影信息主要包括:电影名、上映时间、主演、类型、评分、简介、封面图片等。当采用Scrapy将数据爬取下来后,还需要写爬虫规则,采用CSS与Xpath结合的解析规则进行解析,解析出来再经过数据清洗就可直接存储到数据库。

3.2 系统首页

为了获得个性化的电影推荐服务,第一次使用本系统的用户需要注册成为系统会员,此时出现的是注册页面。当用户成功登录系统后,系统会跳转到电影大厅,即系统首页,此时系统出现的是默认推荐的电影信息,用户可以在此选择自己喜欢的电影进行收藏。针对不同的用户,系统首页是不一样的,针对喜欢“2017年评分最高的美国动作片”筛选出来的电影,如图1所示。

图1 系统首页

3.3 标签管理模块

对刚注册成功的用户,系统会跳转到标签管理页面,如图2所示。用户通过此页面管理标签,系统针对用户设置的标签进行个性化推荐。这些标签都可以修改,当用户的喜好改变了,即可从用户名下拉列表中选择“我的标签”进入标签管理页面。

图2 标签管理页面

3.4 个性化推荐模块

个性化推荐模块分为4个子模块:站内推荐、我的标签、猜你喜欢、类似推荐。

(1)“站内推荐”子模块

站内推荐是推荐当前最新的电影资源,根据后台数据库里所存储的最新电影信息获得最新的电影资源,并将这些资源显示在系统前端页面。

(2)“我的标签”子模块

该模块的实现流程是获取用户喜爱的标签,根据标签过滤电影信息,最后按照推荐指数进行排序,最后获取推荐指数高的推荐给目标用户。具体流程是:首先根据用户喜欢的标签,对电影类型进行统计,筛选出符合类型的电影;然后根据豆瓣评分、评分人数来进行排序,之后对比结果;最后过滤掉用户的喜好列表中的电影,得到结果再取排在最前面的几个电影作为最终结果。这样每种用户喜欢的元素都筛选出前N个,最终推荐给用户,如图3所示。

图3 根据用户喜欢的电影的标签得到的推荐

(3)“猜你喜欢”子模块

“猜你喜欢”子模块使用了基于用户的协同过滤算法结合标签统计计算的方法进行推荐,该方法是传入目标用户的感兴趣电影集与其他所有用户的数据集(包括:用户ID、用户电影兴趣列表),经过计算返回一个相似度从高到低的字典,字典形式为{用户ID:相似度}。系统根据返回的字典获取推荐的电影信息,经过过滤处理后推荐给用户。这里涉及到冷启动问题,就是当用户兴趣列表为0,导致无法计算兴趣相似度,因此采用根据标签与推荐指数计算的方法来代替推荐结果。具体流程是:

Step 1:获取目标用户喜好列表;

Step 2:根据余弦相似度公式计算目标用户与其他用户之间的相似度;

Step 3:根据相似度进行由高到低的排序,获取前5个用户的喜好列表;

Step 4:根据前5个用户喜好列表,过滤掉不包含目标用户喜爱标签与已存在目标用户喜爱列表的电影;

Step 5:将步骤4得到的电影集进行豆瓣评分与评分人数的总和比较;

Step 6:最终筛选出前2部电影,进行推荐。推荐结果如图4所示。

图4 采用协同过滤算法得出的推荐结果

在这个模块中存在一个推荐指数,这个推荐指数是根据豆瓣评分与评分人数来计算的,假设豆瓣评分为R,评分人数为P。评分公式为:R=(P/2)·0.6+(P/10 000)·0.4。

也就是评分转为5分满分后权重取0.6,评论人数为每万人评得1分后权重取0.4,最后相加得到推荐指数,推荐指数最大为5星。

(4)“类似推荐”子模块

系统根据目标电影的标签,对数据库中其他所有电影进行统计、过滤,得到标签相同和推荐指数(推荐指数与“猜你喜欢”模块的推荐指数算法是一致的)靠前的电影,过滤掉用户以前接触过的电影后将剩下的电影推荐给用户。

3.5 电影查询模块

电影查询模块能方便地让用户搜索自己所喜欢的电影,本系统支持电影名模糊搜索、演员模糊搜索。

3.6 喜好列表模块

喜好列表模块是一个与用户进行交互的模块,用户可选择电影添加到“喜欢”列表或“不喜欢”列表。为了增强体验感,使用Ajax异步请求来实现。后台数据库接收到用户的反馈后进行判断,确定是否是用户的新的喜好,如果是则更新该用户的这个喜好记录。用户对电影的喜好设置在两个地方:“电影详情”页面如图5所示;“猜你喜欢”页面如图6所示。

图5 用户在“电影详情”页面的反馈按钮

图6 用户在“猜你喜欢”页面的反馈按钮

3.7 影评管理模块

影评是每个电影网站必不可少的功能之一,它是用户对一部电影的观后感,不仅能对其他用户起到一定的指导作用,还可以影响系统的推荐效率。影评模块通过Ajax异步提交表单信息,后台把提交的原始评论信息进行存储,再到前台通知是否评论成功。

4 结 语

随着影视行业的飞速发展,每年的电影数量都在剧增,这对视频推荐提出了更高的要求,而本系统具有个性化的推荐功能以及一定的商业价值。本系统现已部署在线并稳定提供服务,由于系统使用简单,交互性良好,推荐准确,得到了使用用户的一致好评。

猜你喜欢
列表页面标签
刷新生活的页面
学习运用列表法
无惧标签 Alfa Romeo Giulia 200HP
不害怕撕掉标签的人,都活出了真正的漂亮
标签化伤害了谁
基于多进制查询树的多标签识别方法
不含3-圈的1-平面图的列表边染色与列表全染色
网站结构在SEO中的研究与应用
浅析ASP.NET页面导航技术