基于Python的豆瓣影评数据的可视化与实现
摘要
随着互联网信息技术的快速发展,人们越来越倾向于在线观看电影,而电影产业经过多年的发展,已经积累了海量的影片资源。这种现象导致了电影信息过载,使得用户在选择电影时面临困难。为了解决这个问题,推荐系统应运而生,它通过分析用户的历史行为、兴趣偏好等数据,为用户提供个性化的推荐服务,有效地提高了用户获取信息的效率。本项目构建了电影数据爬虫可视化+NLP情感分析推荐系统。融合深度学习LSTM模型、机器学习双推荐算法、Scrapy爬虫技术、PaddleNLP情感分析及可视化技术,从多个电影网站爬取数据,进行情感分析和个性化推荐。系统包括前端界面和后端服务,功能涵盖电影数据爬取、情感分析、推荐及可视化所示等模块,数据库设计合理。经测试,系统功能良好,性能达标,推荐效果获得认可。未来研究方向包括优化推荐算法、提高情感分析准确性及增强可视化效果。
关键词:豆瓣影评数据;深度学习LSTM;机器学习双推荐算法;Scrapy爬虫;PaddleNLP情感分析
ABSTRACT
With the rapid development of Internet information technology, people are more and more inclined to watch movies online. After years of development, the film industry has accumulated massive film resources. This phenomenon leads to overload of movie information, making it difficult for users to choose movies. In order to solve this problem, recommendation systems have emerged, which provide personalized recommendation services to users by analyzing their historical behavior, interest preferences, and other data, effectively improving the efficiency of users in obtaining information.This project constructs a movie data crawler visualization + NLP sentiment analysis recommendation system. It integrates deep learning LSTM model, machine learning dual recommendation algorithm, Scrapy crawler technology, PaddleNLP sentiment analysis and visualization technology. It crawls data from multiple movie websites, conducts sentiment analysis and personalized recommendation. The system includes front-end interface and back-end services. The functions cover modules such as movie data crawling, sentiment analysis, recommendation and visualization display. The database design is reasonable. After testing, the system has good functions, meets performance standards, and the recommendation effect is recognized. Future research directions include optimizing recommendation algorithms, improving the accuracy of sentiment analysis and enhancing visualization effects.
Keywords:movie recommendation system; deep learning LSTM; machine learning dual recommendation algorithm; Scrapy crawler; PaddleNLP sentiment analysis
目录
基于深度学习的豆瓣豆瓣影评数据设计与分析 I
摘要 I
ABSTRACT II
第1章 绪论 1
1.1 研究背景与意义 1
1.2 国内外研究现状 2
1.3 研究内容 4
1.4 本章小结 4
第2章 关键技术介绍 4
2.1 Scrapy 爬虫技术 4
2.2 传统的推荐算法 6
2.2.1 基于内容的推荐算法 6
2.2.2 协同过滤推荐算法 6
2.2.3 基于知识的推荐算法 9
2.4 推荐算法的常用评价指标 9
2.4.1 准确性指标 9
2.4.2 非准确性指标 11
2.5 PaddleNLP情感分析 11
2.6 可视化技术 12
2.7 本章小结 12
3 系统分析 13
3.1 需求分析 13
3.1.1 系统可行性分析 13
3.1.2 功能性需求分析 13
3.1.3 非功能性需求分析 14
3.2 非功能需求分析 15
3.3 系统角色分析 15
3.3 本章小结 16
第 4 章 系统设计 17
4.1 系统架构 17
4.1.1. 前端设计 17
4.1.2. 后端架构 17
4.2 系统功能模块图 17
4.3 系统E-R图 18
4.4 数据库设计 19
4.5 本章小结 22
第 5章 系统实现 23
5.1. 电影数据爬取模块 23
5.2. 情感分析模块 23
5.3LSTM算法实现 24
5.4 机器学习双推荐算法 25
5.4.1. 基于用户的协同过滤算法 25
5.4.2. 基于物品的协同过滤算法 27
5.5. 推荐系统模块 28
5.5.1. 基于用户的协同过滤算法 28
5.5.2. 基于物品的协同过滤算法 29
5.6 首页功能的实现 30
5.7 登录功能的实现 31
5.8 电影库功能的实现 32
5.9 数据分析功能的实现 32
5.10 本章小结 33
第 6章 系统测试 34
6.1 测试方法与指标 34
6.1.1.功能测试 34
6.1.2.性能测试 34
6.2 测试的主要内容 34
6.2.1功能测试 34
6.2.2 性能测试 37
6.2.3 安全性测试概述 38
6.2测试结果与分析 39
6.2.1.功能测试结果分析 39
6.2.2.性能测试结果分析 40
6.3本章小结 40
第7 章 总结与展望 41
7.1 研究成果总结 41
7.2 未来研究方向 41
参考文献 42
第1章绪论
1.1 研究背景与意义
随着网络技术的日益普及,人们在网上浏览信息的选择也在不断增加。然而,在如今网络上信息如此之多的情况下,人们很难有效地获得他们所需的信息。为了解决数据过载的问题,人们已经推出了搜索引擎和推荐系统作为解决方案。但是,搜索引擎所提供的搜索结果常常不能完全满足用户的实际需求,因为它们所呈现的信息可能并不完整,有时甚至可能向用户提供不准确的信息。针对上述用户所面临的问题,推荐系统提供了有效的解决方案。一个高效的推荐系统能够直接为用户推介他们感兴趣的商品,甚至帮助他们揭示自己的潜在喜好。
在传统的推荐系统设计中,通常采用协同过滤技术来执行推荐算法,该方法主要是通过分析用户过去的使用记录来评估用户与产品的相似度,从而为用户提供有效的推荐。然而,这种推荐算法存在明显的局限性。例如,在评分信息非常稀疏的情况下,协同过滤推荐系统的预测准确性可能会受到严重影响。此外,传统的协同过滤推荐系统无法为没有历史数据的用户提供有效的推荐。换句话说,协同过滤算法通常面临着数据稀疏和系统冷启动的问题。
与传统的推荐算法相比,深度学习模型能够构建更为复杂的模型,并能更全面地学习用户和物品的各种特性。此外,它还具有出色的数据拟合能力,能更准确地捕捉用户的兴趣点,从而实现更高质量的推荐服务。与此同时,随着硬件技术的持续进步,机器处理数据的能力得到了明显的增强,这为深度学习模型的培训提供了坚实的支撑。另外,随着数据量的持续增长,获得了更多的训练样本,这使能够从这些数据中吸取更多的知识。
一个高效的豆瓣影评数据不仅能帮助用户更方便地浏览电影相关信息,还能在一定程度上推动各类电影的普及,从而对电影产业的持续发展产生积极的推动作用。因此,深入研究基于深度学习的豆瓣影评数据对于增强用户的观影体验和推动电影行业的持续增长具有至关重要的作用。此外,推荐系统的深入研究不仅推动了人工智能和机器学习技术的进步,还为其他深度学习领域的研究带来了新的思路。
1.2 国内外研究现状
最初的推荐系统起源于上世纪九十年代,由XeroxPaloAlto研发中心推出的邮件推荐工具Tapestry。这一系统通过利用其他用户的明确反馈来协助目标用户筛选邮件,从而有效地解决了邮件过载所带来的问题。这一系统首次引入了协同过滤(colkaborativefiltering,CF)这一新的理念。然而,该系统并不具备主动为用户提供推荐信息的能力,而是依赖于用户构建的复杂查询语句来实施推荐。紧随其后,新闻系统GroupLens应运而生,它成为了首个能够实现自主推荐功能的平台。在1997年,Resnick和他的团队首次提到了推荐系统(reconmendersystem RS)这个术语。从那时起,“推荐系统”这一术语在全球范围内得到了广泛的应用,并迅速崭露头角成为一个备受关注的研究方向,各种不同的推荐算法和模型层出不穷。现在流行的算法主要有以下几种:
内容为基础的推荐方法,其核心思想是针对特定的用户A,基于A之前偏好的项目集合1,寻找与集合I在内容上有某种相似之处的项目!接下来,请将其放入!向A推荐。这一算法只需依赖于用户A的过去喜好数据,以及集合1和项目之间的相似度数据。该系统在生成推荐结果的过程中,并不受其他用户偏好的影响。该研究的核心问题是如何有效地提取项目的关键特征,并对用户的偏好进行建模,其中经常被采用的模型包括向量空间模型、显示决策模型和线性分类模型。然而,基于内容的推荐算法存在两个显著的不足:推荐结果中的项目通常与用户已经购买的项目非常相似,因此对用户的惊喜度相对较低。在对项目进行特征提取的过程中,预处理环节面临着相当大的挑战。
协同过滤推荐算法利用用户的合作机制,协助其他用户筛选并推荐出最适合的项目列表。基于用户协同过滤的核心思想是,针对特定的用户A,首先识别出与A有相似兴趣的用户群,然后将这个用户群喜欢但用户A尚未使用的项目推荐给A。具体的实施方法是基于余弦相似度或皮尔斯相关系数来构建用户的相似度矩阵,并据此为A推荐与用户A兴趣最为接近的用户群所钟爱的商品列表。这个算法的一个显著优势是,它为用户A生成的推荐列表中可能包含了用户A从未接触过的新产品,这意味着这个推荐列表对用户来说具有更高的吸引力和惊喜。然而,它的不足之处在于存在冷启动问题,这使得对于那些没有历史行为记录的新用户,无法生成推荐列表。由于用户与项目间的交互数据相对较少,这导致了矩阵的稀疏性,从而使得模型在寻找与用户A相似的用户群体时遇到困难。还有一种方法是依赖于项目的合作过滤。这个算法的核心思想是计算各个项目间的相似程度。第一个项目以及相应的项目!如果两者之间的相似度很高,那么这意味着购买了项目1的用户也已经同时购买了项目2。具体的实施方式是基于余弦相似度或皮尔森相关系数来构建项目之间的相似性矩阵,并根据这个矩阵以及用户过去的行为记录来生成推荐结果的列表。当然,这一算法也面临着由冷启动和矩阵稀疏性引发的一些相关挑战。基于模型的协同过滤技术采用了当前最受欢迎的人工智能和数据挖掘算法,通过对训练数据进行多次迭代,以实现模型的最优表现,并据此模型对未知数据进行预测分析。在众多知名的模型中,隐语义模型(tentfactormodelLFM)、矩阵分解模型(matrixfactorization,MF)和基于图的模型都是其中的代表。混合推荐算法是一种将两种或更多不同算法有条件地结合在一起的方法,由于单一推荐算法具有各自的优势和劣势,因此将这两种或多种算法有针对性地组合起来,通常可以得到更好的推荐性能。
推荐算法不仅在学术领域具有极高的研究价值,而且在实际应用场景中也具有巨大的经济和商业潜力,因此受到了各大互联网制造商的广泛关注。在前述的几种推荐算法的基础上,有几家厂商成功地开发出了高效的推荐系统,这些系统不仅带来了显著的经济回报,还在行业中树立了典范:
在Amazon的电子商务推荐系统中,顾客在选择了他们感兴趣的商品后,通常会在购买页面的下方所示一个列表:购买了该商品的顾客也购买了这些商品。根据数据显示,亚马逊用户所购买的商品中,约有25%是由推荐系统所提供的,这为Amazon带来了显著的推荐效益,并大幅度地增加了其营业额。在网上购物商城中,淘宝、京东等也有与之相似之处。
Netmix视频推荐系统:Nerix最初的功能是预估用户对某部电影的评价,但后来这个系统演变成了一个个性化的视频推荐服务。自2006年起,NetflixPrize推出了一场名为NetflixPrize推荐系统大赛,其目标是将自家推荐系统的预测精度提升10个百分点。这场大赛吸引了大量杰出的科研人员参与,从而显著提升了Netflix推荐系统的整体品质。与此类似,还有像YouTube和豆瓣电影这样的视频推荐工具。
Last.fm音乐推荐系统的工作原理是:首先记录用户曾经听过的音频片段,然后利用这些音频的标签来创建用户画像,进而为用户提供有针对性的音乐推荐。我国的网易云音乐推荐平台也取得了巨大的成功。
今日头条新闻推荐系统是一个综合性的平台,它通过收集用户在阅读、年龄、职业和地理位置等多个方面的信息,并结合用户的浏览历史来深入挖掘用户的兴趣。然后,系统会根据用户的个人信息和文章的特点进行个性化的推荐,以最大限度地确保推荐系统的准确性,从而实现“你关心的,才是头条”的宣传理念”。
1.3 研究内容
深入学习LSTM算法的原理和特性,了解模型的结构和参数配置。收集大量的影评数据作为训练集,对LSTM模型进行训练。对模型进行优化和调参,提高模型的训练效率和预测准确性。利用训练好的模型对新的影评进行情感分析,并输出情感倾向结果。深入研究推荐系统的基本原理和常用算法,如协同过滤、基于内容的推荐等。结合用户的喜好和情感偏好,设计个性化的电影推荐算法。将情感分析的结果融入推荐算法中,以提高推荐的准确性和用户满意度。对推荐算法进行测试和评估,根据测试结果进行改进和优化。利用Vue前端框架和Flask后端框架进行系统开发,实现数据采集、情感分析、推荐算法等功能模块。
1.4 本章小结
在绪论部分,首先阐述基于深度学习的豆瓣豆瓣影评数据的研究背景及意义。接着,将概述国内外在豆瓣影评数据领域的研究现状,分析当前研究的热点、难点以及存在的不足。最后,明确论文研究内容,即设计并实现一个基于深度学习的豆瓣豆瓣影评数据,并对其性能进行深入分析。
第2章 关键技术介绍
2.1 Scrapy 爬虫技术
Scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架,主要包括引擎、调度器、下载器、爬虫、项目管道等组件。
- Scrapy 的组件与运行流程
在电影数据的爬取过程中,Scrapy的各个部分都起到了不可或缺的角色。作为核心的组件,引擎负责各模块间的调度和数据传输。调度器的主要功能是缓存请求和执行请求去重操作,而下载器则负责发送请求、收集响应数据,并将其封装为Response格式。爬虫的主要任务是解读 Response 数据并从中提取信息,而项目管道则负责实体的处理。
Scrapy的操作步骤是这样的:首先,引擎定位到需要执行的爬虫,并按照爬虫的 start_requests 方法进行操作,从而获得一个迭代器。在迭代器的循环过程中,会获得一个名为Request的对象,这个对象已经封装了需要访问的URL以及回调函数。接下来,所有的 Request 对象(任务)都被放置在调度器里,以供未来的下载器使用。下载器会从调度器中提取待下载的任务(即 Request 对象),并在下载完毕后执行相应的回调功能。回调函数返回到爬虫内部,在该爬虫内部执行数据解析、URL提取、封装请求或者数据提取等各种操作。提取出来的URL将会被重新封装为Request对象,并通过爬虫中间件传送至引擎,随后会被送入调度器以等待下载。从项目管道中提取的数据会通过引擎进行处理,例如数据保存。 - Scrapy 在电影数据爬取中的作用
在这个项目里,Scrapy 的主要任务是从多个电影相关的网站上收集大量的电影信息,包括电影的名称、种类、演员的详细资料以及剧情概述等。具体的执行步骤是这样的:首先,你可以编写一个启动代码,然后发送“all”或spider的名称来启动爬虫。在系统的启动阶段,会生成一个名为CrawlerProcess的对象,该对象会从其设定中提取数据并生成引擎。在爬取过程中,引擎会生成crawler,而在crawler初始化阶段,它会初始化其他可能需要的组件,例如用于管理和处理Scrapy扩展的ExtensionManager、用于收集和报告爬虫运行期间统计数据的StatsCollector、用于格式化日志消息的LogFormatter、用于生成请求唯一标识符的RequestFingerprinter、定义爬虫行为和逻辑的Spider,以及负责管理和协调爬虫执行的ExecutionEngine。
ExecutionEngine 在其初始化过程中,会特别关注调度器、下载器以及 Scraper的创建。调度器的主要职责是缓存请求以及执行请求的去重操作,而下载器则负责发送请求并收集相应的响应数据,Scraper则主要负责处理这些响应数据。在获取电影数据的过程中,首先会创建 spider ,将自己设定的 setting 与 Scrapy 自身的 setting 进行整合,接着创建 engine,然后调用引擎的 open_spider 方法,并启动引擎。在open_spider方法的应用中,item pipeline需要经过open_spider的处理,而start_requests则需要进行相应的调度,对其状态进行统计,并发送spider_opened的信号。
在爬取的过程中,引擎定位到需要执行的电影数据爬虫,并按照其 start_requests 策略进行操作,从而获得了一个迭代器。在迭代器的循环过程中,获取Request对象,并对电影网站的URL和回调函数进行封装。这批 Request 对象已被安置在调度器里,正等待下载设备的下载。下载器在从调度器中提取任务后,完成下载并执行回调函数,然后返回爬虫进行数据的解析和抽取。从项目管道中提取的电影资料经由引擎进行处理和保存,为接下来的数据分析和建议提供了必要的数据支持。
接下来,将通过图2.1来所示爬虫的具体行为 :
图2.1 爬虫概念
2.2 传统的推荐算法
2.2.1 基于内容的推荐算法
内容为基础的推荐算法(Content-Based Recommendations CB)可以被视为最具代表性的推荐方法,它基于用户过去对某一物品(item)的兴趣,为用户推荐与他们之前所喜欢的相似物品。其核心思想在于如何计算推荐物品与其先前喜好物品之间的相似度。标签是它的一个核心部分。以蜡笔小新为例,它被贴上了卡通、搞笑、儿童等各种标签,基于这些标签,推荐系统会为你推送这些相关的内容。该系统的推荐流程分为三个主要步骤:首先是物品的表示,接着是特征的学习,最后是生成推荐列表。首先,需要识别出item的某一特性或属性,然后将这个特性与用户之前偏好的item特性进行对比,以深入了解用户的偏好。最终,通过对用户喜好特性和潜在item特性的分析,可以生成一组相关性极高的推荐列表。
2.2.2 协同过滤推荐算法
协同过滤推荐算法(Collaborative Filtering Recommendation)被认为是推荐系统领域中最早、最经典且最具可行性的算法之一。该算法的工作原理主要是基于用户与用户或各个项目之间的相似度来进行的。采用相似度的测量手段,如欧氏距离、皮尔逊相关系数以及余弦的相似度等。该系统首先对用户和用户的数据进行比较和相似性查询,然后根据相似度的高低对推荐内容进行排序。它致力于深挖用户的隐藏特性,识别出用户的喜好,并按照这些喜好进行分类。简而言之,它是按照“物以类聚,人以群分”的原则来组织的,从而使英雄们的观点大致一致。
图2.2 CF推荐过程
CF的核心思想是基于向量来计算相似度,也就是说,两个向量在空间上的距离越近,它们的相似度就越高。这里不再详细描述具体的计算方法,仅提供了它们的公式:
欧氏距离(Euclidean Distance):
dx,y= xi−yi2
simx,y= 11+dx,y
皮尔逊相关系数(Pearson Correlation Coefficient):
px,y= xiyi−nxyn−1SxSy=nxiyi−xiyinxi2−xi2 nyi2−yi2
与CB相比,CF也存在一些不足之处,普通用户对item的行为有两种不同的反馈方式:一种是隐性的,另一种是显性的。显式反馈意味着用户会明确地告诉你他们对某个item的偏好,而隐式反馈则不会这样做,它只会留下一些历史浏览记录和页面浏览行为等信息,这些信息往往含有较大的水分和噪音,需要经过特殊的处理和转化,才能发挥其应有的价值。
CF的优缺点如下图所示:
图2.3 CF优缺点
图2.4 基于物品的协同过滤
2.2.3 基于知识的推荐算法
基于知识的推荐方法(Knowledge-based Recommendation)通常是通过构建特定领域的本体或者制定特定规则来进行推荐。另一种解释是,这是一种非常熟悉的推理方法,与CF和CB算法有所不同。它不需要预先了解用户的需求和偏好,而是根据特定领域的知识来评估所选候选集是否满足用户的知识需求。由于知识的领域功能不同,因此推荐的结果也是特定的,具有个性化的一面。
图2.5 基于知识的推荐
2.4 推荐算法的常用评价指标
2.4.1 准确性指标
在推荐系统里,准确性指数被视为最关键的评价标准。最常被采用的准确度衡量标准是准确性和召回率。
准确率[17]:推荐清单中用户喜欢的item所占的比值。
针对单个用户u的推荐准确率: