APP下载

基于Django的图书推荐系统设计

2022-07-07冼远清张旭新

电子技术与软件工程 2022年5期
关键词:冷启动余弦标签

冼远清 张旭新

(广东海洋大学数学与计算机学院 广东省湛江市 524088)

1 引言

随着计算机技术和移动互联网技术快速发展,数据日益增长,人们已经处于一个信息爆炸的时代。信息过载,信息碎片化严重,是生活中不可避免的普遍现象。如何在短时间内,给用户提供其感兴趣的信息,推荐系统应运而生。

推荐系统本质上是一种信息过滤技术,为用户返回个性化的信息搜索服务。从信息过滤技术发展历史来看,可以分为基于内容的过滤技术和协同过滤技术两大类。基于内容的过滤规则一般采用匹配关键词方式,选取匹配度高的内容,属于传统的信息过滤技术。协调过滤则是目前推荐系统中应用较多的技术,皮尔逊相关系数、余弦相似度算法、最近邻算法、贝叶斯算法、K-means聚类算法等都应用到邮件过滤、电影推荐、电子商务、新闻推荐、文献资料推荐、商场推荐、旅游推荐等相关领域中。推荐系统的核心是推荐算法,通过分析用户的历史数据信息,去预测用户对未知项目信息的喜好程度。在商品推荐系统中,产品的属性、客户的兴趣和偏好、同类客户对产品的评价等三要素共同决定了客户对产品的喜好程度,最终作为推荐系统考量的重要指标。

针对图书推荐特定场景,利用爬虫技术爬取基础图书数据,并进行数据清洗,采用Django框架技术进行Web应用开发,利用Vue框架实现前端展示,研究实现基于皮尔逊相关系数、余弦相似度算法的图书推荐系统,为人们选取图书提供参考,具有一定的现实意义。

2 系统分析与设计

2.1 需求分析及功能设计

本系统实现为用户推荐图书信息,将实现数据爬取、用户注册、图书推荐全过程功能,具体功能如图1所示。

图1:功能模块设计

该系统将实现功能包括数据爬取与数据预处理,将得到信息进行分析,最后推荐给相关用户。同时,需要实现用户注册模块,用户注册时需选定相关标签,用于处理推荐系统的冷启动问题。系统还提供了展示热门图书、展示最新图书、图书关键字搜索等相关功能。

2.2 系统架构设计

根据业务逻辑,系统采用三层的架构图,分别是数据获取层、业务逻辑处理层、表示层。

数据获取层首先通过Crawler爬虫,收集图书的详细信息数据,包括书名、图书概述、作者、作者信息、出版时间、图书相关标签等,还有在用户浏览系统时,得到用户对图书的行为数据,如用户对图书的评分等数据。

业务逻辑处理层将通过数据获取层得到的图书数据和用户数据,采用皮尔逊相关系数算法和余弦相似度算法分别对用户和图书进行相似度计算,并对其进行分析,得出推荐给当前用户的推荐图书列表。最后,将得到的推荐数据存入数据库,并通过表示层展示给用户。

2.3 关键技术

2.3.1 Django框架技术

Django框架方便开发者创建高质量、容易维护的应用程序。Django框架强调代码复用,同时有很多功能强大的第三方插件,可以导入多个插件品使用,开发者也可以自行开发新插件。

Django框架是一个遵循 MTV设计模式的Web开发框架。MTV表示Model-Template-View,其中,M 表示模型,负责业务对象与数据库的映射;T代表模板,负责如何把页面(html)展示给用户;V表示视图,负责业务逻辑,并在适当时候调用 Model和 Template。MTV本质上实现与MVC模式(Model–view–controller)的软件架构模式相应内容。

2.3.2 推荐算法

(1)皮尔逊相关系数算法。

皮尔逊相关系数是用来度量两两变量之间的相关程度,相关程度表现出线性的特征。皮尔逊相关系数公式值域为[-1,1],值越靠近1,说明两本图书之间正向的线性关系就越来越强,也就是说这两本图书越相似,反之,两个物品之间没有偏好关系,其计算如公式(1)示。

得到偏好相似的用户之后,就从偏好相似用户已评分过的图书进行筛选,去掉当前用户已经看过的图书,得到推荐给当前用户的图书项集合。

(2)余弦相似度算法。

余弦相似度经常应用于电子商务销售网站,用于计算商品之间的相似度程度。直接将余弦相似度引入图书推荐,由于热门图书的用户数大,会导致推荐出来的热门图书比例非常高,因此对原始的余弦相似度公式进行修正,如公式(2)示。

分子部分Num∩Num表示同时喜欢图书i和图书j的用户数,分母Num与Num则表示喜欢图书i和图书j的用户数相乘的开方,cos-sim则表示图书i和图书j的余弦相似度(Cosine similarity)。通过将Num引入到分母中,将避免发生推荐热门图书过高的情况。在计算图书余弦相似度前,需要遍历用户的评分值,针对每个用户,建立共现矩阵。

图书相似度计算完成之后,结合用户对图书的前期评价分,可以通过公式(3)计算得到用户对某本图书的喜好程度。

Book(u)表示用户表达偏好的图书集合,SimBook(j,K)表示和图书j最相似的K本图书集合,cos-sim则表示图书i和图书j的相似度,s表示用户u对图书i的兴趣,本系统指用户u对图书i的评分,in-val就是用户u对于图书j的兴趣值(interest value),最后根据兴趣值由高到低把图书推荐给用户。

(3)冷启动问题的处理。

针对冷启动问题,本系统在新用户注册登录后,系统提供图书的标签,新用户可以挑选感兴趣的标签,然后在用户没有浏览过任何图书的前提下,优先推荐同一标签下的图书,在新用户浏览,评分过图书之后,更新用户的评分值,重新计算相似度,然后再次给用户推荐相似度高的图书。

针对图书冷启动问题和系统冷启动问题,在给系统填充图书数据时,先把图书集按照标签进行分类,再把已经分类好的图书数据集写入到系统的数据库,系统就可以按照新用户刚进入系统时选择的标签,把同一标签下的图书推荐给用户。

2.3.3 Vue框架技术

Vue.js是一套构建可视化用户界面的渐进式框架。Vue关注视图层,采用自底向上的增量开发模式的设计,而且易于与第三方库集成。同时,Vue与现代工具箱和各种支持类库相结合,还可以为复杂的应用程序提供驱动程序。Vue的目标是通过尽可能简单的API实现响应数据绑定和组合的视图组件。

2.3.4 SQLite数据库技术

SQLite是一个轻量级的关系型数据库。它是一种嵌入式数据库,只是一个.db格式的文件,无需安装,配置和启动。SQLite常见应用场景包括中小型网站,嵌入式设备和应用软件,文件档案管理和桌面程序文件数据库。SQLite支持多种编程语言和多种操作系统,具有很强的移植性。

2.4 数据库设计

采用关系型数据库 SQLite作为后台数据库,并利用关系规范化理论对数据库中的数据表进行优化设计,消除了插入异常、删除异常、更新异常、数据冗余等数据操作中的关键问题。

本系统数据库主要包含用户信息表、用户评论表、用户评分表、图书信息表、用户图书收藏表、图书标签表、新用户标签爱好表等,其主要字段及表之间如关系图2示。

图2:数据库表关系图

3 具体实现

3.1 开发平台及运行环境

系统的设计实现使用Pycharm 2021开发软件在 Win10环境下进开发和测试,采用Python 3.7作为开发语言,采用Django 2.2.1作为Web开发框架,将SQLite作为数据库,并使用了Django自带的服务器。

3.2 系统核心文件及代码

3.2.1 项目开发文件

项目中,使用crawler.py和parse_data.py文件获取网站的畅销图书信息,并存储在db.sqlite3文件中。db.sqlite3还用于保存用户名、用户登录密码、用户浏览行为等信息,具体核心文件如图3示。

图3:项目文件及核心代码文件图

3.2.2 核心代码文件

recommend_methods.py是本项目一个核心文件,用于实现图书的推荐功能,利用推荐算法,实现基于用户和基于内容的推荐。该文件包括recommendUserCF和goodsCF核心类,使用了面向对象思想,定义了基于用户推荐和内容推荐的推荐算法,然后通过recommend_by_id()函数和recommend_by_goods_id()函数具体实现推荐流程,并将结果传给展示页面。

3.3 系统实现界面

推荐系统使用Django simpleUI插件美化了Django原生后台管理界面,同时使用Vue.js、CSS等实现界面包括用户登录、图书展示、热门图书、搜索页面、用户喜好标签页面等。

3.3.1 用户推荐界面的实现

在基于用户的推荐模块中,系统会计算当前用户与系统中用户的相似程度,得到最相似的几个用户,再从这些用户的评分表中,找出评分最高的几本图书,加入到推荐列表中,若得到的图书不够15本,则在用户刚进入系统时选的标签中,选择对应的图书加入到推荐列表中,如图4示。

图4:用户推荐界面

3.3.2 冷启动问题处理界面

为解决冷启动问题,新用户第一次登录系统,用户需要选择自己一个或者多个感兴趣的标签。提交后,系统会按照新用户选择的标签,从图书标签表中筛选出标签对应的图书,得到推荐图书列表。如图5所示,新用户选择了“科幻”和“好书,这一读”标签。

图5:冷启动处理界面

4 结语

推荐系统首先利用了爬虫技术获取图书网站畅销书籍数据作为项目基础数据,利用了Django框架技术作为Web应用框架,实现基于皮尔逊相关系数和余弦相似度算法的推荐流程,并应用了VUE前端技术展示了系统用户界面。经测试,本系统运行流程,并能快速为用户推荐相关图书信息。

下一步,将改进推荐算法,提高推荐的准确度,并将应用推广到音乐推荐、电影推荐、新闻推荐等领域。

猜你喜欢

冷启动余弦标签
轻型汽油车实际行驶排放试验中冷启动排放的评估
Evaluation of Arctic Sea Ice Drift and its Relationship with Near-surface Wind and Ocean Current in Nine CMIP6 Models from China
基于学习兴趣的冷启动推荐模型
无惧标签 Alfa Romeo Giulia 200HP
不害怕撕掉标签的人,都活出了真正的漂亮
两个含余弦函数的三角母不等式及其推论
标签化伤害了谁
分数阶余弦变换的卷积定理
图像压缩感知在分数阶Fourier域、分数阶余弦域的性能比较
基于多进制查询树的多标签识别方法