写在前面
- 若有图片加载失败,请科学上网 。
- 本文为对软件学院连老师的PPT课件总结所得的复习笔记,仅供参考。不保证对考点的全覆盖,以PPT为主。
- 对往年考过的题相关知识点前面都标注了“考过”,并高亮,供参考。
- 写的比较匆忙,有遗漏、错误之处敬请指正。
- 笔记中除了LDA的全称,其他的基本都覆盖到了。不要纠结,好好准备下一科。
文章目录
- 二、第二章 网络爬虫
- 1、爬虫定义
- 2、爬虫分类
- 三、第三章 网页分析
- 1、正则表达式
- 2、DOM树
- 3、Beautiful Soup
- 4、scrapy
- 5、元搜索引擎
- 四、第四章 爬虫与网站的博弈
- 1、robot协议
- 2、User-agent
- 3、IP屏蔽
- 4、用户登录
- 5、模拟浏览器
- 6、验证码
- 五、第五章 数据抽取与包装器
- 1、web数据抽取
- 2、web数据抽取方法
- 3、web数据抽取评价标准
- 4、包装器
- 4.1 基于分界符的规则
- 4.2 基于树路经的规则
- 4.3 包装器与爬虫软件的不同
- 六、第六章 包装器页面抽取方法
- 1. 数据抽取对象--网页的分类
- 2. 多记录数据型页面(京东商城)的抽取方法
- 3. 单记录数据型页抽取方法
- 4. 单文档型页面抽取方法
- 七、第七章 web数据存储与应用
- 1、爬取数据存储
- 2、结构化数据处理
- 3、 非结构化数据处理
- 八、第八章 文本表示
- 1、文本预处理
- 2、文本向量化
- 3、文档哈希
- 九、第九章 词嵌入
- 1. 词嵌入
- 2. 语言模型:
- 十、第十章 文本分类
- 1、文本分类
- 2、fastText
- 3、TextCNN
- 十一、第十一章 web链接分析
- 1、链接分析
- 2、PageRank算法
- 3、TextRank算法
- 十二、第十二章 WEB 图片数据
- 1、图像检索
- 2、图像特征
- 3、颜色特征
- 4、纹理特征
- 5、形状特征
二、第二章 网络爬虫
1、爬虫定义
-
爬虫定义:一种自动获取网页内容的程序,通过HTML源码解析获得想要的内容
考过
-
文档指纹FP:快速对文档进行判重。
-
URL判重:建立散列存放访问过的网址。(经过MD5等散列函数后的值)
考过
-
爬虫礼貌性、鲁棒性、性能和效率、分布式、新鲜度、功能可扩展性
考过
-
BFS优于DFS:可以在有限的时间内最多地爬下最重要的网页。(首页)
层次越深一般可用信息就越少。
-
DFS优于BFS:避免握手次数太多,可以提升一些性能。
-
分布式带来的问题:
- 用于判重的哈希表太大,一台服务器放不下。
- 每台下载服务器都要维护这张哈希表,这个通信就成为了整个系统的瓶颈。
2、爬虫分类
- 基于整个web的信息采集
- 基于增量式web信息采集
- 用户个性化web信息采集
- 主题web信息采集
开源工具 Nutch (基于整个web):
- 多线程
- 宽度优先
- 遵循robots协议,先读取robots.txt再判断是否访问。
- 采用socket连接。
三、第三章 网页分析
1、正则表达式
考过
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,进行组合,组成一个“规则字符串”,用来表达对字符串的一种过滤逻辑。
构造正则表达式的方法是用多种元字符与运算符将小表达式结合在一起创建更大的表达式。
- 在获取数据前去除无用部分
- 提取网页内的链接
- 提取网页标题
- 提取网页内文本
正则表达式特点:
- 速度快。
- 表达能力弱,只有正规文法的表示能力。
2、DOM树
文档对象模型,将xml文档转换成对象集合,然后任意处理该对象模型,称为随机访问机制。
- DOM将HTML视为树状结构的元素,所有元素以及他们的文字和属性可通过DOM树来操作与访问。
正则表达式与DOM树比较:
-
正则表达式匹配速度快,但表达能力较弱,又有正规文法表示能力
-
在对网页内容信噪比要求不高的情况下可以使用基于正则表达式匹配的爬取程序
-
DOM树在解析HTML时速度较慢,但其表达能力相当于上下文无关文法
-
网页自动分类等需要进行网页去噪处理的情况时使用基于HTML DOM树的爬取程序、
jsoup、HTMLParser、lxml等
3、Beautiful Soup
是一个工具箱,通过解析文档为用户提供需要抓取的数据。
构造DOM树时,可选择解析器:
- 使用自带的html.parser:
- 速度慢但通用
- 使用HTML5Lib
- 不规范的html文本需要先转换为规范的文本再解析
- lxml
- python的解析库,支持 html 和 xml 的解析
- 支持xpath的解析方式
- 解析效率非常高
- 只会局部遍历
ansi、unicode、utf8编码。
ANSI:中文操作系统默认
Unicode :国际通用编码
utf8:是 Unicode编码在网络传输时的一种变通,可以节约数据量。
BS4简单,但是在操作时会将整个文档树加载,再进行查询匹配,使用过程中消耗资源过多。
4、scrapy
快速、高层次的屏幕抓取和web抓取框架。用于抓取结构化的数据。可复用的设计。七大架构。
- 引擎:负责数据和信号在不同模块间传递。
- 调度器:存放引擎发过来的request请求。
- 下载器:下载引擎发过来的requests请求,并返回给引擎。
- 爬虫:处理引擎发来的response,提取数据,提取url,交给引擎。
- 管道:处理引擎发来的数据。
- 下载中间件:自定义下载拓展,设置代理等。
- 爬虫中间件:自定义request请求和response过滤。
实现了底层多线程请求,异步网络框架处理网络通讯。
制作scrapy爬虫需要四步:
- 新建项目:新建爬虫项目。
- 明确目标:编写items.py,明确要抓取的目标(结构)。
- 制作爬虫:制作爬虫开始爬取网页。
- 存储内容:设计管道存储爬取内容。
爬虫爬取数据时,使用yield返回,利用框架优势。scrapy自动地发现网页上的所有链接,再去抓取链接内容。
若解析的数据不在同一张页面中,可以通过meta参数进行数据传递。
- 本层meta传递到response中,下层解析函数获取response时获取meta和item。
考过
request和bs4:
- 页面级爬虫,功能库。
- 并行性考虑不足,性能差
- 重点在于页面下载,初学容易上手
- 大型开发较困难
Scrapy:
- 网站级爬虫,框架
- 并行性好,性能高
- 重点在于爬虫结构
- 初学较麻烦,但使用方便
5、元搜索引擎
又称多搜索引擎
通过一个统一的用户界面帮助用户在多个搜索引擎中选择和利用合适的搜索引擎来实现检索操作,是对分布于网络的多种检索工具的全局控制
考过
四、第四章 爬虫与网站的博弈
反爬虫策略:希望能够在用户面前正常显示,同时不给爬虫机会。
后端策略:
- User-Agent + Referer检测
- 账号及Cookie验证
- 验证码
- IP限制频次
前端策略:
- FONT-FACE拼凑式:对于数据,并不展示纯数字,要同时查询字符集,才能识别出数字。
- 懒加载
1、robot协议
网站通过该协议告诉搜索引擎哪些页面可以抓取,哪些不可抓取。
2、User-agent
简称UA,是HTTP请求头的一部分,向网站提供访问者的信息,浏览器类型、语言、插件;操作系统版本、CPU类型等。每次请求都会发送到服务器。通过该标识,用户访问的网站可以显示不同排版从而为用户提供更好的体验。
网站可以通过此来过滤爬虫,而爬虫可以修改此来伪装。
3、IP屏蔽
同一IP频繁访问,封IP。
爬虫则可以通过多IP并行、增大爬取时间间隔、连接代理服务器来对抗。代理池:从各大网站上爬取可用IP,定期检查是否可用。
4、用户登录
用户输入:用户名、口令,通过GET或者POST提交参数,登陆成功后带着cookie继续访问其他网页。
Cookie:小文本文件,服务器在HTTP响应头中发送给用户浏览器,浏览器保存在本地,用于维护客户端与服务端的状态。
-
记录了用户ID,密码、浏览过的网页、停留的时间等信息。
-
通常命名为user@domain
-
流程
- 第一个网页通过求情提交用户名口令
- 后台接收请求,生成cookie,发给用户
- 保存cookie,并从文件中读取,携带cookie访问其他网页。
-
工具:
- cookiejar
5、模拟浏览器
selenium:模拟用户进行交互,登陆输入,键盘动作,鼠标动作,ajax响应等。
ajax,传统的网页如果需要更新,需要重载整个网页页面。但是用AJAX可以进行少量数据交换,异步加载,对页面某部分进行更新。 || 程序不知道何时某个元素是否加载出来,如果还未加载就定位,可能就报错,selenium提供了两种等待方式:显示、隐式等待。
懒加载,为了避免页面一次性向服务器发送大量请求造成拥堵,需要按照需要去加载——预加载、懒加载(当对象需要的时候再加载),提升前端性能。原理:
- src路径的值默认是正在加载中的gif图,而真正的图片路径是保存在暂存器中,当滚动条一定到可视区域,暂存器赋值src。
爬取懒加载图片:
寻找代替src属性的 data-属性、src2、original属性数值。而模拟浏览器可以直接解决多种反爬虫。
可以将selenuim与scrapy结合起来,selenium进行登录等操作,然后保存cookie,scrapy利用cookie进行爬取。
6、验证码
获取图片(下载或截图)——图片处理——获取图片中文字内容。
-
获取图片
selenium可以通过元素的尺寸坐标定位到图片,进行截图获取。
-
图片处理
Pillow和PIL模块,旋转、缩放、二值化等。
-
OCR
光学字符识别,将图像中的文字转换成文本格式。百度、谷歌、微软。
滑动验证码:
- 判断验证码什么时候出现。
- 验证码出现时,判断何时加载完成。
- 自动识别出鼠标拖拽轨迹的初始位置和终止位置。
- 用鼠标模拟拖动。
- 检验是否成功。
selenium处理方式:
获取不带缺口的图片,再获取带缺口的图片,灰度比较得到缺口的各个坐标,进行滑动。(滑动不能过于匀速,可以滑过头再返回)。
由于selenium是在后台完成的滑动,而有些平台会检测鼠标光标未移动,可以使用pyautogui。
五、第五章 数据抽取与包装器
1、web数据抽取
考过
web 数据抽取是指从页面中将用户感兴趣的数据利用程序自动抽取到本地的过程。为了确保准确性,必须能够识别页面模板。
给定页面集合W={ w i w_i wi},它通过页面模板 T 生成,包含数据D={ d i d_i di},即 W = { w i ∣ w i = T ( d i ) w_i| w_i = T(d_i) wi∣wi=T(di) },web数据抽取问题可以定义为通过一定的技术手段,从W中逆向推导出T,还原数据D。
抽取方式:手工爬虫、机器学习爬虫。
页面模板 T = < C, L, S >
- 是不完全的页面
- 是相似页面之间不变的部分
- 用来按照结构化数据生成共用户浏览的页面
- C是内容,L是定义的格式,S是数据格式
- C包含导航、版权声明、固定页面修饰等不变的内容
- L包含页面数据的格式规范
- S是能够从页面数据中观察到的模式
2、web数据抽取方法
Web数据抽取的目的是获得页面中的数据,需要借助一个或多个页面逆向推导出页面模板T。
- 人工抽取
- 人工分析出页面模板
- 针对具体问题生成具体的包装器
- 人工包装的途径容易采纳,在具体问题上可以取得满意的结果
- 只适合小规模的即时的数据抽取,不适合大规模的、持续性的数据抽取
- 半自动抽取
- 由计算机应用页面模板抽取数据生成具体包装器,而页面模板的分析仍需要人工参与
- 设计一个描述页面模板的概念模型和一套用来描述抽取意图的规则语言,用户通过一定的辅助工具利用该概念模型分析页面推导出页面模板,并使用规则语言表明其抽取意图。
- 计算机系统根据用户描述的页面模板和抽取意图,生成包装器,完成抽取任务。
- 这种途径相比手工包装而言更加系统化,也能大大减少工作量。
- 自动抽取
- 仅仅需要很少的人工参与(例如检查结果进行校准) 或者完全不需要人工参与,
- 因而更加适合大规模、系统化、持续性的Web数据抽取。
- 自动抽取工作中,页面模板的分析通过序列匹配、树匹配或者利用可视化信息完成,并且直接给出抽取结果。
3、web数据抽取评价标准
-
召回率
抽取到的正确结果与要抽取页面的全部结果的比。即 R=|Ra| / |R|
-
准确率
指抽取到的正确结果与抽取到的全部结果的比。即 P=|Ra| / |A|
-
F 值
召回率R和查准率P的加权调和平均值,综合考虑了二者
-
抽取的自动化程度
这项标准用来衡量用户在抽取过程中的参与程度,分为手工、半自动和全自动三类。
-
适应性
指在该页面的内容和结构有较小变化的情况下,该抽取方法或工具具有自适应能力,仍然能够正常工作。
-
修正率
其含义是需要手工调整使得准确率和召回率达到100%的Web数据库数量。
4、包装器
包装器是针对某一类特定的网页、计算机可以理解并执行的程序或抽取规则,任务就是负责将HTML格式的数据抽取并转化为结构化的格式。——模板T的表示形式。
在半自动化抽取系统中,需要通过和用户的交互生成。
包装器的核心:抽取规则。
4.1 基于分界符的规则
将HTML文档看作字符流,给出数据项的起始和结束分界符,将其中的数据抽取出来。
例如,某一个数据项的起始规则是"SkipTo<i>“,结束规则是"SkipTo</i>”。
意味着从文档的起始忽略所有的字符直至找到HTML标签 <i>,接着,忽略所有字符直至 </i>,中间部分即所需的字符串。(基于正则表达式的网页分析)
4.2 基于树路经的规则
将文档看作一个树结构。所抽取的数据存储在树节点中,因而可根据其路径来定位。
首先根据HTML标签将文档分析成树结构,如DOM树,然后通过规则中的路径在树中搜索相应的节点,最终得到所需数据。(基于DOM树的网页分析)
4.3 包装器与爬虫软件的不同
包装器是一个能够将数据从HTML网页中抽取出来,并且将他们还原为结构化的数据的软件程序。
手工方法:爬虫
包装器归纳:使用机器学习的方法产生抽取规则,基于有监督学习的,用于从其他相同标记或相同网页模板抽取目标数据。步骤:
-
网页清洗:有些网页结构不规范,例如前后标签不对称,没有结束标签符,不规范的网页结构容易在抽取过程中产生噪声。
-
网页标注:给网页中的某个位置打上特殊的标签表明这是要抽取的数据。
-
包装器空间的生成:
对标注的数据生成XPath集合空间,对生成的集合进行归纳,形成若干子集。
归纳的规则是在子集中的XPath能够覆盖多个标注的数据项,具有一定的泛化能力。
包装器评估:准确率和召回率。
自动抽取:通过挖掘多个数据记录中的重复模式来寻找这些模板,是无监督学习,步骤:
- 包装器训练:
- 将一组网页通过聚类将相似的网页分成若干组。
- 每组相似的网页将获得不同的包装器。
- 包装器应用:
- 将需要抽取的网页与之前生成包装器的网页进行比较。
- 在某个分类下则使用该分类下的包装器来获取网页中的信息。
六、第六章 包装器页面抽取方法
1. 数据抽取对象–网页的分类
按照页面内的数据组织形式不同,分为:
-
单记录页面(页面中只嵌入了唯一的记录)
- 详情页 A Authority
- 每一页只关注一个特定对象,也有其他相关和非相关信息。
-
多记录页面(页面嵌入了数量不等但由相同模板生成的记录,记录按照单列或者多列布局整齐排列)
- 同结构的记录在页面内重复排列出现。
- 列表页 H Hub
- 列表在页内的特定位置
- 每页有多个数据记录
按照页面内的承载内容不同,分为:
考过
- 数据型页面
- 页面中嵌入了一个或多个结构化的数据记录
- 页面展示的是带有属性标签和数据值的信息
- 数据记录按照一定的格式规范和属性次序被载入在页面中,部分属性名称出现在页面中。
- 结构化实体
- 如产品价格页面等
- 保存到数据库
- 文档型页面
- 这类页面嵌入的是半结构化文档内容或文档标题.
- 页面展示的是文本型信息,如新闻网站等
2. 多记录数据型页面(京东商城)的抽取方法
多条结构相同的数据记录组成。
-
观察
-
对于对应相同模板的多个网页,其不同之处主要在于这些页面中所包含的数据。
-
如果是多记录数据型页面,则在DOM 树上包含这些记录的子树通常处于同一层,并且这些记录具有共同的父节点。
-
如果是多记录数据型页面,则这些记录无论在DOM树上的结构,还是记录本身所包含的内容,都具有相似性。
-
-
数据记录抽取
在网页中,一个数据记录对应着现实世界的一个实体。
如果把一个网页解析成DOM树结构,一个数据记录则对应着一棵子树或多棵相邻的子树。
数据记录抽取问题事实上就是如何找出包含数据记录的这些子树。
步骤:
-
确定数据区域(比较多个例子页面,发现可能包含数据记录的父节点)
如果两个节点是相同的,则必须满足:若节点都是元素节点,则必须 名称相同;若为文本节点,则值相同。
从两颗DOM树根节点进行递归深度遍历,如果两个节点相同则递归下一层,否则记为不同子树返回上层。输出:不同的子树
-
计算数据记录的边界(对一系列节点进行聚类并得到数据记录)
语义块:HTML文档的一个片段,如果内容满足模式定义,则为语义块,一个语义块可能包含若干子语义块,不能划分的成为最小语义块。最小语义块是在包装器的生成维护中的最基本的抽取单位。
1、发现语义块集合所在层次。
2、计算语义块边界,得到这个集合所包含的记录。
-
去除噪声数据记录
-
-
数据项抽取
数据项边界–指的就是判断一个数据项应该覆盖HTML树结构上的多少个节点。位置相同,标签序列相同,就是不同数据记录的同一个字段。
给定两个模板项t1和t2,则在所有的语义块中,t1和t2之间包含的数据项都表达了相似的信息。
3. 单记录数据型页抽取方法
增量式抽取,从多个连续页面中抽取同结构的记录
4. 单文档型页面抽取方法
七、第七章 web数据存储与应用
1、爬取数据存储
-
结构化数据
-
结构化文件:Excel、CSV、JSON、XML、PICKLE
-
数据库
-
CSV以逗号相隔、存储容量小、被很多应用支持
-
JSON是存储和交换文本信息的语法,比XML小,最常用键值对。在数据交换中起到载体的作用。
-
XML,数据重用,用来存储携带交换数据,不是用来展示数据。
-
pickle文件:用于序列化和反序列化python对象结构。pickle是二进制序列化格式,json是文本序列化。json可读,pickle不可读。json可互操作,广泛使用,pickle特定于python。
-
数据库:提供了更强有力的数据存储和分析能力,
- 例如:数据索引、排序、查找、相关一致性等,
- 它不仅仅是存储数据。
关系型(使用关系模型存储)、非关系型(键值对存储)
-
-
非结构化数据
-
Pipeline
- 非结构化文件:txt、JPG
-
2、结构化数据处理
-
数据清洗
- 缺失值处理:直接删除、插值
- 异常值处理:识别、直接删除、极值处理到一个正常区间
-
结构化数据应用
- 数据集成,展示;
- 用机器学习处理数据,展示结果
-
特征工程
-
特征:在观测现象中的一种独立、可测量属性。
-
特征工程:把原始数据变成特征的过程,目的是获取更好地训练数据。
- 特征选择、特征提取、特征组合、特征构造。
-
主成分分析法(PCA):无监督学习,将互相相关的特征,通过线性组合,使得数据变换到新的空间,可能最大程度保持原来的信息,并且特征之间互相不相关。
取最大的r个特征向量张成的矩阵来做低维投影降维,将多元数据的特征在低维空间里直观地表示出来(本质上是基的变换)。输出的数据方差很大,对训练模型有意义。
-
-
机器学习的数据预处理
- 归一化:把数据特征转换为相同尺度的方法。最近邻分类器就是尺度敏感的,尺度大的特征起主导作用,也有尺度不变性算法(不敏感的)。线性分类器尺度不变。
- 标准化:Z-score, x ( n ) = x ( n ) − μ σ x^{(n)} = \frac{x^{(n)}-\mu}{\sigma} x(n)=σx(n)−μ ,每个特征均值为0,方差为1。
- 标准欧氏距离
- 白化:
- 消除不同特征之间的相关性
- 降低输入数据特征之间的冗余性.
- 输入数据经过白化处理后,特征之间相关性较低,并且所有特征具有相同的方差
- 白化的一个主要实现方式是使用PCA方法
-
连续值与离散值
- 离散值:二元制、有限的离散集
- 缺失数据处理
- 归一化
- 离散化
- 连续性数据:股价、利率
- 若离散种类较多,则高稀疏化。
- 低洗漱,高压缩。
- 离散值:二元制、有限的离散集
3、 非结构化数据处理
文本数据:SQL查询、NLP文本特征:分词、预处理、向量描述。
文本特征:IR:IR模型、倒排表、搜索引擎;文本处理:文本分类、文本聚类、情感分析。
非结构化数据特征描述:图像数据——图像特征——图像识别、检索;文本+图片特征——跨模态检索、文本生成图片。
八、第八章 文本表示
1、文本预处理
语言是具有组合型的,将这些文档拆解成各个组件或单词,然后从左往右阅读,意义也是具有组合型的。预处理:将文档拆解成单词以便计算机程序能够解释。
考过
步骤:
-
文档解析(移除不需要的格式,比如HTML标签)
-
句子分割(文档拆成句子)
-
分词(句子变成单词)
考过
三种方法:
- 基于词典的分词
- 基于统计的分词
- 基于深度学习的分词
词条化:将给定的字符序列拆分成一系列子序列的过程,其中每一个子序列称之为一个“词条”Token。
-
词规范化
归一化:词条的不同表示方式“归一化成一致的形式”,建立同义词词表
词干还原:通常指去除单词两端词缀的启发式过程。
-
去停用词
考过
查表法:停用词表:介词、冠词。
利用词频去除。
预处理结果:文档——词条集合:词袋、搜索引擎、文档——词条序列(用于序列很重要的情况)。开源库:nltk、spacy
2、文本向量化
文本数据往往是非结构化,杂乱无章。分为两类:有语序信息、无语序信息。
-
构造词汇表
语料库——建立词汇表、文档——词包
-
文本表示
one-hot:
考过
-
TF-IDF(Term frequency 、inverse document frequency)
是一种统计方法,用以评估一个字词对于一个文件集或者语料库中的一份文件的重要程度。
-
词项频率:
-
词项t在文档d中出现的次数,记为 t f t , d tf_{t,d} tft,d
-
向量第 i 维上的数字代表 ID 为 i 的词语在文本里的 t f t , d tf_{t,d} tft,d
-
对数词频:采用原始tf值,相差太大,取对数+1
-
-
文档频率:出现词项的文档数目 d f t df_t dft ,文档集合中包含t的文档数目,与此项 t 包含的信息量成反比。 d f t ≤ N df_t \leq N dft≤N
-
逆文档频: i d f t = l o g 10 ( N d f t ) idf_t = log_{10}(\frac{N}{df_t}) idft=log10(dftN) ,是反映词项 t 的信息量的指标。
例子:
-
词项在多个文件中出现——重要,词项在语料库中频繁出现——不重要。
- t f − i d f tf-idf tf−idf 综合两者:
- W t , d = ( 1 + l o g 10 t f t , d ) × l o g 10 ( N d f t ) W_{t,d} =(1+log_{10} tf_{t,d}) \times log_{10}(\frac{N}{df_t}) Wt,d=(1+log10tft,d)×log10(dftN)
-
-
离散表示文本:one-hot、词袋模型(BOW)
- 缺点:不考虑词与词之间的顺序,假设词之间相互独立,维度灾难。
-
分布式表示:LDA、文档哈希、语言模型(N-GRAM、Word2Vec、Doc2Vec)
-
LDA:无监督学习算法,在语料库上进行训练。指定主题的数目K,文档表示就是K维向量。缺点:非常耗时
-
-
3、文档哈希
把任意长度的输入转化成固定长度的输出。
目标:哈希码的相似程度能直接反映输入内容的相似程度。
应用:通过编辑距离计算语法上的相似性、通过阈值来检测近似(不可传递)。
思路:为每一个web文档进行hash,得到一个指纹。将高维特征向量映射成一个f-bit指纹,比较两篇文章的海明距离,来确定是否重复或者高度近似。
-
shingle(搭叠)算法:
-
LSH 局部敏感哈希
-
一种常见的处于处理高维向量的索引方法,
-
LSH是指
面对海量高维数据时,一般的算法无法快速降维查询相似度高的数据子集,利用特定的hash算法,将高维数据映射到低维空间,以较高概率快速寻找相似度高的数据子集。
-
minhash算法:
- 方法一:使用 K 个 Hash 函数,用这 K 个哈希函数对集合 A、B 求哈希值,然后分别取 K 个集合的最小值。Min(A)={a1, a2, …, ak},Min(B)={b1,b2, …, bk},相似度定义为两集合的 jaccard 系数。计算复杂度较高。
- 方法二:使用单个 hash 函数,对集合分别进行一次哈希,取 hash 后值最小的 k 个元素(不是hash值)组成集合,相似度定义为两集合的 jaccard 系数。
-
Simhash算法
- 分词、hash、加权、合并、降维
- 1、分词,并为每个词设置权重
- 2、hash, 01组成的 n-bit 。
- 3、在哈希的基础上,给所有特征向量加权。(遇到1就是正权重,0就是负权重)
- 4、对多个词按位加,
- 5、大于0的位置1,否则置0。
- 6、比较两个文档的 simhash 的海明距离。
- 大规模数据下的海明距离计算,建立倒排索引,利用鸽巢原理简化算法
- 倒排索引:普通的搜索算法是从文档里搜索关键字,而倒排索引是事先知道了每个关键词出现的文档,从关键词搜索文档。
-
九、第九章 词嵌入
1. 词嵌入
将离散变量转换成连续向量:one-hot表示、分布式表示。是将词汇映射到实数向量的方法总称。
2. 语言模型:
考过
-
统计语言模型:一种用来描述词、语句或文档的概率分布的模型。
- 应用:文本生成、机器翻译,拼写纠错,语音识别。
- n-gram语言模型:unigram、bigram、trigram,一个词依赖于前面出现的n个词。
-
指数语言模型
-
神经网络语言模型:nnlm、word2vec
-
nnlm解决了n-gram的缺点。
-
word2vec:
- CBOW模型:利用周围词来计算中心词的概率。
- Skip-Gram 模型:根据某个词来计算周围词的概率。用成对的单词进行训练:(input word,output word)。速度较慢。改进方法:
- 负采样。即训练时不让模型从整个词表找最可能的词,而是直接给出这个词,再给几个噪声词,能找出来就成功。
- 层次Softmax:训练的时候先统计词频,建立霍夫曼树,根据霍夫曼编码进行softmax回归,更快。
- word2vec应用:用于词粒度上的机器翻译、用于推荐系统的Item2Vec。
-
Doc2Vec:不仅能学习单词的向量,还能学习文本的向量表示。用于聚类、分类。训练过程时,同时训练词向量和段落向量。词向量随着滑动窗口的改变而改变,而只要滑动窗口还在本段落,段落向量不变(表示段落主题,之随着模型参数更新而改变)。
-
Glove:改进了word2vec的只利用局部信息的缺陷,成功利用语料库的全局信息。词共现矩阵,表示了两词不同文档出共现次数。
-
文本特征表示
-
目的:将文本转变成一种能够让计算机更容易处理的形式,同时减少信息的损失。
-
十、第十章 文本分类
1、文本分类
-
定义:用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。
-
应用:
- 情感分析(Sentiment Analyse)
- 积极、消极、中性
- 主题分类(Topic Labeling)
- 金融、体育、军事、社会
- 意图识别(Dialog Act Classification)
- 天气查询、歌曲搜索、随机闲聊
- 问答任务(Question Answering)
- 是、否
- 自然语言推理(Natural Language Inference)
- 导出、矛盾、中立
- 情感分析(Sentiment Analyse)
-
基本结构:
-
特征表示:词袋模型、TF-IDF……
-
分类模型:
-
浅层学习模型
依赖于人工获取的文本特征(难点),参数较少,但领域适应性强,在小规模数据上表现较好。
KNN、SVM、决策树、随机森林、PGM等
-
深度学习模型
结构相对复杂,不依赖人工获取的文本特征,可对文本直接进行学习建模,对数据依赖性高,领域适应性不强
MLP、RNN、CNN、Attention等
-
-
-
用Doc2vec进行文本分类:数据预处理(分词)、训练Doc2vec模型,得到文档嵌入向量、创建数据集文档向量、划分数据集、训练分类器
-
用Word2vec进行文本分类:将文档的所有单词的向量进行加权平均得到一个文本向量表示。
2、fastText
在skip-gram的基础上进行改进,利用了子单词的信息(eat、eating在word2vec中没有进行任何参数共享)。
fastCNN整合了上下文信息,子单词的信息。中心词的嵌入是通过取字符的n-ram的向量和整个词本身进行计算,上下文单词是从嵌入表示中直接获取单词向量。
fastCNN比Word2vec慢,因为增加了子词的开销,但是有更好地句法词类比任务的性能,但是降低了语义类比任务的性能。
3、TextCNN
对CNN的输入层做了一些变形。
自然语言是一维数据,卷积核在一个方向上移动。
输入:通过词向量文件及词向量矩阵,将文本向量化,支持后续进行卷积池化等操作。
十一、第十一章 web链接分析
1、链接分析
希望排序靠前的文档既是相关的,又是权威的。相关性可以通过余弦相似度度量,而权威性可以由文档本身属性决定,一个文档的外部链接越多,网站的权威性越高。
将整个WEB看成是通过超链接互相连接的有向图。每个网页是顶点,超链接是边。
考过
2、PageRank算法
对每个网页给出一个正实数,表示网页的重要程度,整体构成一个向量。PR值越高,网站越重要。Pagerank 的计算是一个迭代的过程,直到收敛。在有向图上的随机游走构成马尔科夫链,每经历一个单位时间就转移一个状态。若当前节点在 i, 则下一个节点的概率是 m i , j m_{i,j} mi,j 这一概率只依赖当前状态,与过去无关。具有马尔科夫性。
但是web图一般不满足强连通,故要导入平滑项。
代数优化:
考过
3、TextRank算法
TextRank算法基于PageRank,用于为文本生成关键字和摘要。
使用TextRank进行关键字提取:
-
把给定的文本 T 按照完整句子进行分割。
-
对每个句子,进行分词和词性标注处理
- 过滤掉停用词
- 只保留指定词性的单词
-
构建关键词图 G = (V, E)
-
V 为节点集合,由候选关键词组成
-
采用共现关系构造两点的边
- 两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现。K表示窗口大小,即最多共现K个单词。
-
迭代传播权重,直至收敛。
-
十二、第十二章 WEB 图片数据
1、图像检索
考过
CBIR 的关键技术: 图像特征提取和匹配
2、图像特征
特征:颜色特征、纹理特征、形状特征(低级)、CNN特征
3、颜色特征
颜色是彩色图像最底层、最直观的物理特征,通常对噪声,图像质量的退化,尺寸、分辨率和方向等的变化具有很强的鲁棒性,是绝大多数基于内容的图像和视频检索的多媒体数据库中使用的特征之一。
-
颜色空间:在某些标准下用通常可接受的方式对彩色加以说明。
- RGB空间:三种原色光描述自然界所有颜色,用相互垂直的坐标轴来表示,是一种加光模式。并不符合人类对颜色相似性的视觉感知,故提出了HSV等其他颜色空间。
- HSV空间:人的视觉对亮度的敏感程度远强于对颜色浓淡的敏感程度。三种分量:色调、饱和度、亮度。
- 模型:HSI、HSV
- 转换公式
-
颜色直方图:在颜色空间中采用一定的量化方法对颜色进行量化,然后统计每一个量化通道在整幅图像中所占的比重。
- 描述的是不同色彩在整幅图像中所占比例
- 统计分布特性
- 具有平移、尺度、旋转不变性
- 适合描述那些难以自动分割的图像
- 但是可能不同的图像可能有相同的颜色分布
- 可以将图像分割成子图像,一一建立索引
考过
-
颜色矩:在颜色直方图的基础上计算出每个颜色的矩估计。颜色信息主要分布在低阶矩中。
- 一阶矩:均值 1 n ∑ i − 1 n x i \frac{1}{n} \sum^{n}_{i-1} x_i n1∑i−1nxi
- 二阶矩:方差 1 n 2 ∑ i = 1 n ( x i − x ‾ ) 2 \frac{1}{n^2} \sum^{n}_{i=1}(x_i-\overline{x})^2 n21∑i=1n(xi−x)2
- 三阶矩:斜度 1 σ 3 ∑ i = 1 n ( x i − x ‾ ) 3 \frac{1}{\sigma ^3} \sum^{n}_{i=1}(x_i - \overline{x})^3 σ31∑i=1n(xi−x)3
- 峰态/峭度: 1 σ 4 ∑ i = 1 n ( x i − x ‾ ) 4 \frac{1}{\sigma ^4} \sum^{n}_{i=1}(x_i - \overline{x})^4 σ41∑i=1n(xi−x)4
- 用这些统计量代替颜色的分布来表示颜色特征,特征量少,处理简单,不需要颜色空间量化,特征向量维数低(三个颜色分量,每个分量三个低阶矩 3 * 3 = 9),但该方法检索效率比较低,往往用来过滤图像。
4、纹理特征
一般说纹理就是指在图像中反复出现的局部模式和它们的排列规则,描述了图像或者图像区域所对应景物的表面性质。并不反映本质属性,随分辨率变化而有较大偏差,受光照反射等影响,造成误导。
不是基于像素点的,是统计计算包含多个像素点的区域,具有旋转不变性,对噪声有较强抵抗力。通常用于检索粗细、疏密等易于分辨的信息,
-
基于信号处理的方法:对图像信号的频率和方向进行选择性滤波,
考过
-
LBP特征:局部二值模式
- 结合了纹理图像结构和像素统计关系的纹理特征描述方法,记录像素点与周围像素点的对比信息。
- 优点:对光照具有不变性、旋转不变性、灰度不变性。
- 一般不用LBP图谱作为特征向量用于分类识别,而是采用它的统计直方图作为特征向量。
- 跟位置有很大关系,会因为位置没有对准而产生很大误差,可以将图片划分为若干子区域,然后每个子区域建立LBP的统计直方图。
5、形状特征
-
局部形状特征:基于内容的图像检索方法利用从图像提取的特征来检索。
- LBP、HOG、SIFT
-
全局特征对图像的压缩率较高,但区分度不强。
考过
-
HOG特征:通过计算和统计图像局部区域的梯度方向直方图来构成特征。
- 梯度的概念就是像素值变换最快的方向。
- 在一幅图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好的描述。
- HOG步骤
- 灰度化
- 采用Gamma矫正法对输入图像进行颜色空间标准化,目的是降低图像局部阴影、光照变化造成影响,抑制噪音。
- 计算图像每个像素的梯度。
- 将图像划分为小 cell(比如6 * 6)
- 统计每个 cell 的梯度直方图
- 将每几个 cell 组成一个block,得到该block的HOG特征表述。
- 将图像内的所有 block 的HOG特征描述串联起来就得到该图像的HOG特征。
- 优点
- 由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不 变性,这两种形变只会出现在更大的空间领域上。
- 在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿 势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。特别适合人体图像检测。
-
SIFT特征
-
尺度不变的特征变换
-
在空间尺度中寻找极值点,提取出其位置、尺度、旋转不变量。
-
应用:物体便是、机器人地图感知导航等
-
尺度是客观存在的,尺度空间的获取要用高斯模糊来实现。高斯卷积是表现尺度空间的一种形式。
-
SIFT算法四个步骤:
- 建立尺度空间(高斯差分金字塔)
- 在尺度空间中检测极值点,进行精确定位和筛选
- 特征点方向赋值(每个特征点有三个信息:位置、尺度、方向)
- 计算特征描述子
-
特征点的确认两个过程:
- 与同尺度的8个相邻点、上下相邻尺度的9 × 2个点共26个点比较,以确保在尺度空间和二维图像控件都检测到极值点。
- 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点
可以精确确定特征点的位置和去除不稳定特征点
-
一特征点为中心,根据梯度方向直方图确定当前特征点的方向
使用图像梯度的方法求取局部结构的稳定方向——旋转不变性
-
SIFT优点:旋转、尺度、亮度不变性,稳定。
-
SIFT缺点:实时性不够高,有时特征点较少,对边缘光滑的目标无法准确提取特征点。
-