电子科技大学 计算机学院 综合课程设计 报告_第1页
电子科技大学 计算机学院 综合课程设计 报告_第2页
电子科技大学 计算机学院 综合课程设计 报告_第3页
电子科技大学 计算机学院 综合课程设计 报告_第4页
电子科技大学 计算机学院 综合课程设计 报告_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选文档摘 要本系统以一个大规模网络爬虫程序所猎取的网络评论数据为基础,使用了词向量,用户画像等技术,构建了一个基于影评的推举系统。主要的工作分为两部分,首先是争辩分析了豆瓣电影网站是如何防备网络爬虫程序已经应对策略,其次依据网络爬虫程序猎取的大量数据构建了一个推举系统。关键词:关键词:大规模爬虫,用户画像,推举系统精选文档目 录摘 要 .I目 录 .II第一章 绪 论 .11.1 背景与意义.11.2 本系统的总体设计构思.11.3 本文的主要贡献与创新.1其次章 大规模数据猎取 .22.1 网络爬虫程序的原理.22.2 网络爬虫程序的设计方案.22.3 豆瓣电影网站爬虫可行性分析.32.3

2、.1 豆瓣电影网站页面分析.32.3.2 豆瓣电影网站反爬虫策略分析 .32.3.3 豆瓣电影网站爬虫策略的设计 .42.4 网络爬虫性能优化.42.5 本章小结.5第三章 影评分析推举系统 .63.1 推举系统综述.63.1.1 推举系统的概念和定义.63.1.2 推举系统的形式化定义.73.2 推举系统用户模型设计.73.2.1 文本分析简介.73.2.2 文本分析操作.83.3 推举系统推举对象模型设计.83.3.1 评分机制建模.83.3.2 影片分类特征建模.93.4 推举系统算法.93.4.1 协同过滤算法.93.4.2 基于项目的协同过滤算法.93.5 推举系统推举关键算法部分.

3、103.5.1 距离定义部分.10精选文档3.5.2 近邻查找部分.113.5.3 评分向量的构建.12第四章 课程设计总结与展望 .134.1 总结.134.2 后续工作展望.13致 谢 .14参考文献 .15精选文档第一章 绪 论1.1 背景与意义随着中国移动互联网的快速进展,网民数量也在大规模增长,用户在社交与电商网站上的活跃程度日趋增加。随着用户群体的增加,用户在网络上留下的行为数据呈现指数级增长。面对浩大的用户群体以及如此大量的行为数据,如何从中快速、精确、有效的猎取到有价值的数据,分析出用户的行为习惯以及偏好,在大规模内容的场景下,为用户供应精准的推举服务,是现在大数据争辩领域的一

4、个热点和重点。网络爬虫是大规模数据猎取的必要程序。由于网络上数据的高潜在商业价值,商业公司均会对其进行保密,即使能够直接猎取的数据也会给出层层限制。在互联网进展的二十余年里,网络爬虫程序设计和网站反爬虫程序设计共同进步进展。如何有效的进行大规模网络数据爬取,同样是在工程领域的一个热点和重点。1.2 本系统的总体设计构思首先通过设计一个高性能网络爬虫,对部分数据进行爬取。在数据集上进行清洗,选择一些高质量的活跃用户,设计算法,提取特征,进行回测,调整特征的选择。之后再在大规模数据集上进行运算。1.3 本系统的主要贡献与创新本论文以大规模爬虫猎取实时豆瓣电影数据为基础,实现了用户画像系统与推举系统

5、,依据历史数据得到的用户群体行为分析报告,并依据用户行为以及评论数据实现了智能化的电影推举。精选文档其次章 大规模数据猎取在大规模互联网社群站点中,由于网站运营策略以及一些涉及到潜在商业价值的考虑,运营公司通常会设置一些特殊的访问流量识别措施阻挡外界使用程序大规模猎取数据。对于网络爬虫程序设计者来说,必需要识别并且进行肯定的特殊设计,才能高效的大规模并行猎取数据。2.1 网络爬虫程序的原理网络爬虫程序,也叫网络蜘蛛,在工程界通用简称“爬虫” ,是一种可以自动实现模拟真有用户对网络资源访问并进行数据记录的程序。爬虫程序一般会选择记录目标站点的索引数据,以及所关注的主要内容的完整记录。2.2 网络

6、爬虫程序的设计方案网络爬虫的形式多种多样,从早期的 C、C+设计,到现在主流的Python、Java 设计都有其辉煌的历史。早期网络站点大部分内容、形式单一,静态网页居多,网络中富文本内容较少,计算机资源较少。使用 C、C+编写的程序占用资源小,运行速度快,进行网络通讯的方式机敏,加之语言本身使用广泛,受到大量爬虫程序员的青睐。随着全球互联网产业、互联网基础设施的高速进展,谷歌、百度等搜寻引擎的崛起,互联网上的资源爆炸性增长,基于各种目的,越来越多的程序员开头设计自己的网络爬虫程序。此时 C、C+语言的一些缺点显现出来,集中在编码的不通用,设计繁琐,缺乏高度抽象的类库等。加之大规模数据存储平台

7、的消灭,C、C+爬虫程序日渐削减。爬虫程序主要的任务在于:访问网络资源,解析返回结果,对资源进行合理存储。由于高度抽象以及简洁的语法,Python 以及 Java 等一下代的更加工程化的语言被大家所青睐。网络爬虫的开发极具机敏性,由于现代前端技术的成熟,爬虫程序所猎取的内容可能随时变化,无法使用传统的软件工程方法进行设计开发,通常的做法是迭代式的对网络站点进行交替的探测、开发。网络爬虫的主要模块功能比较固定,遇到的特别状况繁杂,需要有完善的特别处理机制。在对大规模数据设计的爬虫中尤其重要。Python 在网络爬虫类程序的开发效率上有着无可比拟的先天优势,在文本分析、特别处理方面同样有着大量的简

8、洁的设计,使得开发网络爬虫程序的便利程度与机敏程度大大提升。加之有很多特地为 Python 语言精选文档设计的网络访问库,数据库访问框架,扫瞄器模拟器,文本解析器的存在,使得这门语言有着一个完备的网络爬虫程序开发生态环境。本文选择使用 Python3 语言实现一个网络爬虫程序,对豆瓣电影网上 Top250电影榜单上共计一千四百余万条用户对电源的短评进行完全的爬取。在爬取数据的过程中,使用结构化序列化的方式进行数据的存储。2.3 豆瓣电影网站爬虫可行性分析2.3.1 豆瓣电影网站页面分析编写网络爬虫程序,首先要对目标站点进行页面分析。第一个参考页面:豆瓣 Top250 电影榜单其次个参考页面:豆

9、瓣任意电影页面第三个参考页面:豆瓣任意电影短评页面使用 Chrome 扫瞄器的开发者模式观看页面。全部关键信息都以静态方式给出,不需要模拟用户鼠标键盘行为与用户观看延时行为。我们可以直接解析,通过发出 Get 恳求得到的返回页面。榜单页面可解析信息如下:总数,排行榜名称,排行榜排名,电影中文名,电影英文名,电影 id,电影导演,电影主演,电影封面电影详情页面可解析信息如下:电影 id,电影中文名,电影别名,电影豆瓣评分,看过人数,想看人数,评分人数,5 张海报图,条目分类,导演,主演,编剧,官方网站,豆瓣小站,上映时间日期,年月,语言,电影时长,影片类型,制片国家和地区,简介,长评数量,短评数

10、量。电影短评页面可解析信息如下:短评数量,每条短评。对于每条短评:短评id,发布日期,上传用户,短评内容,短评评分,有用数。通过轮询恳求以上页面,我们可以获得几乎全部豆瓣电影公开的数据。2.3.2 豆瓣电影网站反爬虫策略分析豆瓣电影作为国内电影领域最大的在线沟通平台,拥有着大量的电影数据以及观众用户数据,始终被宽敞程序员以及数据分析人员作为目标数据站点使用网络爬虫猎取数据。该网站的反爬虫策略已经比较完善,例如对单个 IP 地址并发访问量的限制,单个 IP 时间段内访问次数限制,用户扫瞄器 Cookie 检测,用户访问页面连续性检测,等等。经过长时间访问的试验,以及编写网络爬虫程序的阅历,总结出

11、了如下规律:精选文档1. 当发起 Get 恳求是不带上 Cookie,连续访问次数稍多,豆瓣网站将直接对操作的 IP 进行封禁。此时无论如何操作都将返回 HTTP403 的结果。需要等待半小时至一小时 IP 才会解除封禁。2. 使用 Cookie 进行访问。第一次发起 Get 恳求任意一个豆瓣页面,豆瓣都会返回一个名为 bid 的 Cookie。之后带上这个 Cookie 恳求页面,可以在约 2 秒一次访问频率上,5 分钟不封禁的结果。但此时的封禁是对于该Cookie 的,只要清空该 Cookie,又可获得一个新的 Cookie 进行访问。IP地址是不会被封禁的。3. 若保持低频率访问豆瓣页面

12、,比如在 10 秒一次的基础上,不论如何都不会被封禁。2.3.3 豆瓣电影网站爬虫策略的设计1. 首先进行多次次无 Cookie 的恳求,猎取多个 bid,对这多个 bid 进行保存,并且进行访问次数的统计。2. 对于每次的 Get 恳求,随机在 bid 池中猎取一个 bid 随恳求发出,并依据返回结果更新次数统计。若该恳求返回 HTTP 403 或者 bid 使用次数到达100 次,即将该次访问操作回滚,将该 bid 抛弃3. 在池中 bid 数量小于一个阈值时,进行一轮无 Cookie 恳求,更新 bid 池在之后的访问试验中,对 bid 进行测试时,发觉豆瓣电影并没有对某个 bid 的第

13、一次使用进行合法性推断。于是修改访问策略为:每次访问前对 bid 进行随机,并随恳求发出,若失败则直接重新随机 bid 到成功为止。2.4 网络爬虫性能优化经过第一轮对电影榜单数据的统计,得到短评总数有一千四百万条。传统单线程爬取完全无法猎取全部的短评信息。针对网络爬虫这种 IO 密集型的应用场景,多线程、多进程能够很好的解决并发访问的问题。使用 Python3 中的 multiprossesing 库对访问进行多线程加速。同时使用 time 库对访问频率进行把握。由于单次恳求返回时间的不确定性(页面大小,网络状况) ,我们统计一段时间内 Get 次数,若超过阈值则在每个恳求完成之后进行一个

14、sleep 操作以降低总体速度。针对单 IP 访问数量的限制,建立了一个 IP 代理池,部署在一台阿里云服务器上,全天候自动在各大代理网站上刺探可用的 HTTP/HTTPS 代理服务器。网络精选文档爬虫程序可直接调用接口猎取一个代理 IP。若某个 IP 连续恳求失败次数超过阈值,可以马上更换代理 IP,以躲过豆瓣晚上对爬虫的限制。针对爬虫需要全天候运行的特点,使用 Git 作为源代码管理工具,分别管理开发分支与稳定版本分支,将稳定版分支实时同步到一台阿里云服务器上,并合理设计数据序列化保存格式,实现全天候运行的力量。2.5 本章小结本章内容从工程的第一个需求动身,逐步迭代开发了一个具有针对目标

15、站点完备功能和高运行效率的网络爬虫程序。在连续运行 4 天后爬取了豆瓣电影Top250 榜单中全部电影共计一千四百余万条影评信息,并构建初步的影评数据库。精选文档第三章 影评分析推举系统3.1 推举系统综述互联网的消灭和普及给用户带来了大量的信息,满足了 用户在信息时代对信息的需求,但随着网络的快速进展而带 来的网上信息量的大幅增长,使得用户在面对大量信息时无 法从中获得对自己真正有用的那部分信息,对信息的使用效 率反而降低了,这就是所谓的信息超载(information overload) 问题。信息超载问题一个格外有潜力的方法是共性化推举系统,它是依据用户的信息需求、爱好等,将用户感爱好的

16、信息、产品等推举给用户的共性化信息推举系统。和搜寻引擎相比推举系统通过争辩用户的爱好偏好,进行共性化计 算,由系统发觉用户的爱好点,从而引导用户发觉自己的信息需求。一个好的推举系统不仅能为用户供应共性化的服务, 还能和用户之间建立亲密关系,让用户对推举产生依靠。3.1.1 推举系统的概念和定义推举系统的定义有不少,但被广泛接受的推举系统的概念和定义 Resnick 和Varian 在 1997 年给出的:“它是利用电子商务网站向客户供应商品信息和建议,挂念用户打算应当购买什么产品,模拟销售人员挂念客户完成购买过程”。推举系统有 3 个重要的模块:用户建模模块、推举对象建模模块、推举算法模块。通

17、用的推举系统模型流程如图所示。精选文档推举系统把用户模型中爱好需求信息和推举对象模型中的特征信息匹配,同时使用相应的推举算法进行计算筛选,找到用户可能感爱好的推举对象,然后推举给用户。3.1.2 推举系统的形式化定义推举系统的形式化定义如下:设 C 是全部用户的集合,S 是全部可以推举给用户的对象的集合。实际上,C 和 S 集合的规模通常很大,如上百万的顾客以及上亿种歌曲等。设效用函数可以计算对象 s 对用户 c 的推举度(如供应商的牢u ()靠性(vendor reliability)和产品的可得性(product availability)等),即 ,R 是肯定范围内的全序的非负实数,推举

18、 要争辩的问题就是找到: 推举度 R 最大的那些对象 S* ,如式: ,= max (,)从上述模型看来,推举系统的构建有三个主要步骤:对用户(服务)对象建模(即用户画像),对推举对象建模,在(离)线推举算法。3.2 推举系统用户模型设计在全部通过网络爬虫程序猎取的数据当中,可以作为用户画像的有两个方向的数据:1. 每个用户对电影的评分2. 每个用户对电影的文字短评依据以上信息,我们可以以上数据构成多维度模型对用户的喜好进行刻画。下文将介绍文本分析以及3.2.1 文本分析简介在自然语言处理领域,传统的词汇语义相像度方法主要是依靠本体词典或学问库的规章方法,利用统计语言模型在大规模语料库上进行分

19、析处理 但是由于词典和学问库大多依靠人工构建,其实时性和扩展性都比较差,因此在互联网文本和专业领域文本处理中很难发挥出作用,在传统争辩方法中,词汇通常用 one-hot 编码形式表示,即假设词表大小为 V,第 k 个词表 示为一个维数为 V 的向量,除了第 k 维为 1,其他维均为 0 一方面,这种表示方法无法刻画两精选文档个词语义上相像性,如“电脑”和“计算机”两个词汇,虽然它们在语义有着相像性,但是由于它们在词表中的位置不同,one-hot 表示是正交的。另一方面,这种方法简洁造成数据稀疏问题。不同的词作为完全不同的特征应用于统计模型中时,由于不常见的词消灭的次数在训练数据中比较少,从而导

20、致对应特征的估量存在偏差。为了解决这个问题,Collober 等人提出利用神经网络语言模型自动学习词汇向量化表示。其基本思想是: 一个词的含义是由它的上下文打算的。将词表中的每一个词随机初始化为一个高维向量,用大量语料进行训练,保证相像的词有相近的向量表示,称之为词向量(word embedding),虽然词向量也是一个高维向量,但与 one-hot 向量表示不同,可以通过计算词向量的余弦相像度衡量词汇语义上的相像度。基于这种思路,Mikolov 等人提出了两种词向量计算模型,一种是从四周词猜测中心词的连续词袋模型(CBOW)。另一种是通过中心词猜测四周词的 Skip-gram 模型,并开发出

21、结合这两种词向量计算模型的开源工具包 word2vec。3.2.2 文本分析操作使用 word2vec 工具包,通过使用网络上大量语料库进行训练,我们可以获得一个泛化力量极强的中文词向量模型。这里使用了维基百科以及搜狗试验室公开的语料库进行了训练。过程中使用了 Jieba 分词工具,并对数据进行清洗,获得接近 2 亿词汇量的已分词数据。在一台双路 E5-2683v3 服务器上,使用三格外钟训练出一个合理的词向量模型,并进行保存。对每一条评论,同样使用 Jieba 分词,并对文本进行清洗,去除不合法字符,并对每个词汇转化为对应的向量进行求和,最终依据向量数量取平均值,获得一个“句子向量” ,代表

22、某个用户的“语言习惯” 。至此,对每个用户,在文本分析方面,获得了一个 400 维度的向量。3.3 推举系统推举对象模型设计3.3.1 评分机制建模对于每部影片,网络爬虫程序可以直接获得站点全部历史用户对该电影的总平均评分,以及全部评分的百分比分布状况。依据用户短评上所附带的评分(星星数量)减去这一电影的平均打分,即可得出对应这部电影的特征量。这样我们获得了一个直接且独立的 250 维度向量。留意,若用户未看过某一部电影,则对应位置设置 0。精选文档3.3.2 影片分类特征建模对于每部影片,网络爬虫程序可以直接获得该影片所属类型。例如喜剧、爱情、恐怖、悬疑等等。依据生活阅历,用户对某一类型电影

23、的喜好极有可能反映出该用户的整个喜好倾向。影片的类型特征对于单一的对某一部影片的喜好来说,很可能更有代表性。这样我们获得了一个直接且独立的 36 维度向量。3.4 推举系统算法3.4.1 协同过滤算法协同过滤,简洁来说是利用某爱好相投、拥有共同阅历之群体的喜好来推举用户感爱好的信息,个人通过合作的机制赐予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而挂念别人筛选信息,回应不肯定局限于特殊感爱好的,特殊不感爱好信息的纪录也相当重要。协同过滤又可分为评比或者群体过滤。其后成为电子商务当中很重要的一环,即依据某顾客以往的购买行为以及从具有相像购买行为的顾客群的购买行为去推举这个顾客其“可

24、能宠爱的品项”,也就是借由社区的喜好供应个人化的信息、商品等的推举服务。3.4.2 基于项目的协同过滤算法传统的以用户为基础的协同推举算法随着用户数量的增多,计算的时间就会变长,所以在 2001 年 Sarwar 提出了基于项目的协同过滤推举算法(Item-based Collaborative Filtering Algorithms)。以项目为基础的协同过滤方法有一个基本的假设“能够引起用户爱好的项目,必定与其之前评分高的项目相像” ,通过计算项目之间的相像性来代替用户之间的相像性。 方法步骤:先计算已评价项目和待猜测项目的相像度,并以相像度作为权重,加权各已评价项目的分数,得到待猜测项目

25、的猜测值。例如:要对项目 A 和项目 B 进行相像性计算,要先找出同时对 A 和 B 打过分的组合,对这些组合进行相像度计算,常用的算法同以用户为基础(User-based)的协同过滤。以项目为基础的协同过滤不用考虑用户间的差别,所以精度比较差。但是却不需要用户的历史数据,或是进行用户识别。对于项目来讲,它们之间的相像性要稳定很多,因此可以离线完成工作量最大的相像性计算步骤,从而降低了在线计算量,提高推举效率,尤其是在用户多于项目的情形下尤为显著。精选文档3.5 推举系统推举关键算法部分3.5.1 距离定义部分在推举系统中常见的四种距离:欧式距离、曼哈顿距离、cos 距离、pearson距离。

26、def euclidean_dis(rating1, rating2): 计算2个打分序列间的欧式距离. 输入的rating1和rating2都是打分dict 格式为电影id1: 1.0, 电影idn: 5.0 distance = 0 commonRatings = False for key in rating1: if key in rating2: distance += (rating1key - rating2key)2 commonRatings = True #两个打分序列之间有公共打分电影 if commonRatings: return distance #无公共打分电影

27、else: return -1def manhattan_dis(rating1, rating2): distance = 0 commonRatings = False for key in rating1: if key in rating2: distance += abs(rating1key - rating2key) commonRatings = True #两个打分序列之间有公共打分电影 if commonRatings: return distance #无公共打分电影 else: return -1def cos_dis(rating1, rating2): distan

28、ce = 0 dot_product_1 = 0 dot_product_2 = 0 commonRatings = False 精选文档 for score in rating1.values(): dot_product_1 += score2 for score in rating2.values(): dot_product_2 += score2 for key in rating1: if key in rating2: distance += rating1key * rating2key commonRatings = True #两个打分序列之间有公共打分电影 if comm

29、onRatings: return 1-distance/sqrt(dot_product_1*dot_product_2) #无公共打分电影 else: return -1def pearson_dis(rating1, rating2): sum_xy = 0 sum_x = 0 sum_y = 0 sum_x2 = 0 sum_y2 = 0 n = 0 for key in rating1: if key in rating2: n += 1 x = rating1key y = rating2key sum_xy += x * y sum_x += x sum_y += y sum_x

30、2 += pow(x, 2) sum_y2 += pow(y, 2) # now compute denominator denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n) if denominator = 0: return 0 else: return (sum_xy - (sum_x * sum_y) / n) / denominator3.5.2 近邻查找部分#查找最近邻def computeNearestNeighbor(username, users): 在给定usern

31、ame的状况下,计算其他用户和它的距离并排序 distances = 精选文档 for user in users: if user != username: #distance = manhattan_dis(usersuser, usersusername) distance = pearson_dis(usersuser, usersusername) distances.append(distance, user) # 依据距离排序,距离越近,排得越靠前 distances.sort() return distances#推举def recommend(username, users)

32、: 对指定的user推举电影 # 找到最近邻 nearest = computeNearestNeighbor(username, users)01 recommendations = # 找到最近邻看过,但是我们没看过的电影,计算推举 neighborRatings = usersnearest userRatings = usersusername for artist in neighborRatings: if not artist in userRatings: recommendations.append(artist, neighborRatingsartist) results = sorted(recommendations, key=lambda artistTuple: artistTuple1, reverse = True) for result in results: print(result0, result1)3.5.3 评分向量的构建# 构建电影评分标准向量vec_std = movie_pos = for index, item in enumerate(movie_data): mov

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论