跳到主要内容
Web 数据管理:爬虫、网页分析与文本处理技术详解 | 极客日志
Python Nuct AI 算法
Web 数据管理:爬虫、网页分析与文本处理技术详解 Web 数据管理涵盖网络爬虫构建、网页分析解析、数据存储与预处理及文本图像特征表示等核心内容。重点涉及爬虫分类、反爬策略应对(如验证码、懒加载)、包装器抽取方法(基于分界符或树路径)。文本处理流程包括分词(HMM、BPE)、向量化(TF-IDF、Word2Vec、Doc2Vec)及主题模型(LSA、LDA)。此外还包含文本分类算法(fastText、TextCNN)及 Web 图片数据的颜色、纹理、形状特征提取技术。适合计算机专业学生复习参考。
DataScient 发布于 2026/4/10 更新于 2026/5/24 20 浏览
第二章 网络爬虫
爬虫的三个任务:
输入 URL,爬取网页内容(HTML)
网页解析(从 HTML 中获得想要的东西)
数据存储
爬虫基础知识
爬虫定义:一种 自动获取网页内容 的程序,通过解析 HTML 源码 获得想要的内容。
**判重技术(URL 判重、文档判重):**1.文档指纹:每一个文档生成一个指纹用来快速判重吗,例如 MinHash,SimHash 算法;2. URL 判重:建立散列存放访问过的网址。例如 MD5 等散列函数。
**爬虫必须具有的功能:**礼貌性(显式和隐式礼貌、robots 协议)、鲁棒性、性能和效率、分布式、新鲜度、功能可拓展性
**爬虫过程:**1.选择一个或多个 URL 作为 seed url;2.获取 URL 中的文档内容;3.解析文档内容,判重后选择性保留;4.提取文档中指向其他网页的 URL,在判重后选择性放入队列中;5.从队列中持续选择 URL 并重复 2.3.4 步骤。
**性能和效率:**性能考虑充分利用系统资源的程度;效率考虑是否优先爬取'有用的网页'。爬取网页的方式分为 BFS 和 DFS 。
**BFS 爬取网页优于 DFS:**可以在有限时间内爬取更重要的网页(我们认为一个网站的首页最重要)。
**DFS 爬取网页优于 BFS:**避免握手次数太多,提升性能(一个网站一般只用一个服务器搭建,如果一直在该网站深度爬取,则只要握手一次)。
**分布式(意味着多台机器一起爬虫,那他们的哈希表就要共享)带来的问题:**1、分布式后有很多机器,用于判重的哈希表太大一台服务器放不下;2、每台下载服务器都要维护一张哈希表,通信就成了分布式系统的瓶颈。
**分布式问题解决:**1、明确下载服务器的分工,看到某个 URL 就知道要交给哪台服务器执行;2、批量处理,减少通信次数。
爬虫分类
基于整个 web 的信息采集(门户搜索引擎和大型 web 服务提供商才会去干)
开源工具 Nutch Nutch 是一个基于整合 Web 的信息采集工具:
多线程
宽度优先
遵循机器人协议
采用 socket 连接
边爬取边解析
页面评分
第三章 网页分析 **爬虫包括:**选择 URL、获取网页、网页分析、数据存储。
**网页分析:**基于网页 HTML 文档格式,从每个 HTML 中抽取相关信息。角度有三个:1.将 HTML 看作字符流,使用正则表达式从字符中提取信息;2.将 HTML 看作树结构,使用 DOM 树来提取信息;3.使用外部工具来提取信息
正则表达式 定义:正则表达式是对 字符串操作 的一种逻辑公式 。就是用实现定义好的一些特定字符进行组合,根据自己想要提取的字符串特点按照逻辑定义好一个'规则字符串 ',用来表达对字符串的一种过滤逻辑 。
**如何使用正则表达式:**用多种元字符与运算符将小的表达式结合在一起来创建更大的表达式。
获取数据前(网页分析)去除无用部分
提取网页内的链接
提取网页标题
提取网页内的文本
正则表达式匹配速度快。
表达能力弱,只有正规文法 的表达能力。
在网页内容信噪比要求不高的情况下可以使用基于正则表达式的网页分析。**网络噪声:**导航元素、广告、用户交互模块、无关文本块。
DOM 模型
DOM(文档对象模型)是处理结构化文档的一个模型,其可以将文档转化为树结构存储,从而实现任意处理该对象,这称为'随机访问'机制。
DOM 将 HTML 处理为树状结构 ,然后所有的元素以及他们的文字和属性都可以通过 DOM 树来操作和访问。
正则表达式匹配速度快,但表达能力弱,相当于正规文法。
DOM 在解析 HTML 时速度慢,但其表达能力相当于上下文无关文法。
正则表达式适用于信噪比要求不高时;网页自动分类等需要进行网页去噪处理时用 DOM 树。
jsoup、HTMLParser 等 HTML 解析器用于解析树,是 DOM 模型的一部分。
Beautiful Soup 工具 **定义:**是一个工具箱,为用户解析文档得到想要抓取的数据提供工具。
从 HTML 文档构造 DOM 树
构造 DOM 树可以选择解析器:1.自带的 html.parser(速度慢但通用);2.HTML5Lib(不规范 html 文本不行);3.lxml(python 解析库;适用于 html 和 xml 解析;解析效率高;只会局部遍历);
中文操作系统默认:ANSI 编码
Unicode:国际通用编码
utf8:是 Unicode 编码在网络传输的一个变体,节约数据量
操作简单,使用方便。
在操作过程中,会将整个文档树都进行加载,然后再查询匹配,因此消耗资源较多。
Scrapy 框架 Scrapy 是一个快速、高层次的屏幕抓取和 Web 抓取框架;框架意味着整个或部分系统以及思想都是可以复用的,仅仅需要修改/编写部分代码即可实现爬虫。
引擎:负责数据和信号在不同模块间传递(总指挥)。
调度器:一个队列,存放引擎发过来的 request 请求。
下载器:处理引擎发送过来的 request 请求(其实是调度器发来的),并将结果返回给引擎。
爬虫:处理引擎发送过来的 respond(其实是下载器发来的),并将结果返回给引擎。
管道:接受引擎传过来的数据(其实是爬虫处理的结果)。
下载中间件:自定义下载拓展。
爬虫中间件:自定义 respond 和 request 请求的过滤。
Scrapy 实现了底层多线程请求 ,异步网络框架处理网络通讯 。
新建项目:新建爬虫项目(scrapygenspider爬虫名 域名)
明确目标:编写 items.py,明确要抓取的目标
制作爬虫:制作爬虫开始爬取网页
存储内容:创建管道存储爬取的内容
我们需要手动写的只有 Item 和 spider:
用户关心的只有自己想要爬什么东西,这些东西怎么存下来,其他的部分都不关心。
特别的,CSV 文件是目前比较流行的一种文件存储格式(以逗号为间隔)
yield 是一种特殊的 return 方法。两者都会返回后面的值但是存在下面不同:
return 一次性返回所有的值,并销毁局部变量;yield 返回的是一个迭代器,里面包括所有 yield 的值。
return 后程序停止运行;yield 后程序继续运行。
若解析的数据不在同一张页面中,可以通过 meta 参数来传递数据。在向下一页发起请求的时候,将本层数据以 meta 形式传入,那么下一页的返回 response 中就会有 meta 字典的数据。
不同爬虫工具比较 前面介绍了几个不同的爬虫工具,不同工具在上面三个方面存在不同。包括:
利用 request 直接获取页面,然后使用正则表达式解析 html 获取想要的东西,存储数据。
利用 request 获取页面,使用 bs4 来解析 html 建立 DOM 树,直接获得想要的东西。
利用 scrapy 框架获取信息,解析信息,存储信息。
页面级爬虫,功能库
并行性考虑不足,性能较差
初学容易上手
大型开发比较麻烦,需要自己造轮子
重点在于页面下载
网站级爬虫,框架
并行性考虑好,性能高
初学比较麻烦
大型开发比较容易,很多轮子和功能都是已经封装好的
重点在于爬虫结构
元搜索引擎 通过一个统一的用户界面帮助用户在多个搜索引擎中选择和利用合适的搜索引擎来实现检索,是对分布于网络的多种检索工具的全局控制机制。
元搜索引擎 == 一个搜索引擎包含多个搜索引擎
结果合并 和 结果筛选/处理
第四章 爬虫与网站的博弈 **反爬虫策略:**希望能够在用户面前正常显示,同时不给爬虫显示。
user-agent 检测
referer 检测
cookie 检测和账号密码检测
IP 限制批次
懒加载
FONT-FACE 拼凑式:对于数字不直接展示,而是需要查询字符集才能识别数据
Robot 协议
也称为爬虫协议、机器人协议等
网站通过 Robots 协议告诉搜索引擎哪些页面可以抓取,哪些页面不可以抓取
User-agent 简称 UA,是 HTTP 请求头的一部分,向网站提供访问者的信息,包括:浏览器类型、语言、操作系统、CPU 类型等等。每次请求都会发送给服务器,通过这个标识,服务器能够提供不同排版适应不同的浏览器给用户更好的体验。
IP 屏蔽
同一个 IP 频繁访问,封 IP
限制某些 IP 访问
多 IP 并行
使用 IP 代理池
增大爬取时间间隔
代理池:从各大网站上爬取可用 IP,定期检查是否可用。
用户账号密码登录与 cookie 验证
通过第一个网页提交用户名和口令。
后端接受请求后生成 cookie,和其他信息一起发给用户。
用户保存 cookie,从文件中读取,在访问其他页面时携带 cookie 信息。
记录了用户 ID、密码、浏览过的网页、停留的时间等信息
小文本文件,服务器在 HTTP 响应头中发送给用户浏览器,浏览器保存在本地,用于维护客户端与服务端的状态。
模拟浏览器
**selenium:**模拟用户进行交互,登录输入,键盘动作,鼠标动作,ajax 响应等等。
**ajax:**传统网页如果需要更新就要加载整个页面,使用 AJAX 可以异步加载页面。
这就导致了爬虫程序并不知道元素何时加载。因此如果还未加载就去定位爬取则会出现问题,selenium 提供了三种等待方式:强制、显式、隐式等待 :
懒加载 **定义:**为了避免页面一次性向服务器发送大量请求导致问题,可以采用预加载和懒加载。懒加载是指在对象需要时再加载,可以提升前端性能也可以反爬虫
**简单方法:**寻找 data、src2 等暂存器属性。
**模拟浏览器方法:**通过 selenium 去模拟浏览器页面上下滑动,然后获取 src。
**Selenium 优点:**模拟浏览器操作,可以直接获得渲染后真正的网页代码。绕过 Ajax 和一些 JavaScript 逻辑。
**Selenium 缺点:**速度太慢。经常会更新。太老的东西了,很多网站有针对 Selenium 的反爬。
验证码
获取图片:Selenium 可以通过尺寸坐标定位到图片。然后截图获取。
图片处理:Pillow 和 PIL 模块可以对图片做很多处理,方便下面的 OCR。
OCR:光学字符识别,将图像中的文字转化为文本。
判断验证码什么时候出现。
验证码出现时,判断何时加载完成。
自动识别出鼠标拖拽的初始位置和终止位置。
模拟鼠标拖动。
检验是否成功。
获取不带缺口的图片,再获取带缺口的图片。比较两种图片各个坐标的灰度值,找到初始位置和终止位置,进行滑动。
滑动不能过于匀速,同时要伴随 y 轴上下抖动。 由于 selenium 是在后台完成的滑动,而有些平台会检测鼠标光标未移动,可以使用 PyAutoGUI。
假如不能获得不带缺口的图片,则可以将缺口图片和滑块进行图像匹配。
第五章 数据抽取与包装器 信息抽取:把文本里包含的 信息 进行结构化处理 ,变成表格一样的组织形式。输入是原始文本;输出是固定格式的信息。
**信息抽取包括:**实体抽取、关系抽取、事件抽取(多元关系)。
信息抽取
NER 是 NLP 中一项非常基础的任务。NER 是信息抽取、问答系统、句法分析等众多 NLP 任务的重要基础工具。
从狭义来说实体是指现实世界中的具体或抽象实体;广义来说包含时间、数量表达式。
NER 是一种序列标注 问题。
Web 信息抽取 Web 信息抽取是将 Web 作为信息源的一类信息抽取,就是从半结构化的 Web 文档中抽取信息。其核心:
将分散 Internet 上的半结构化的 HTML 页面中隐含的的信息点抽取出来。
并将其转化为更加结构化语义更清晰的形式表示。
为用户在 Web 中查询数据,应用程序直接利用 Web 中的数据提供便利。
将 Web 网页进行预处理
使用模式匹配方法识别指定的信息模式的各个部分
对文本进行合理的词法、句法及语义分析
进行上下文分析和推理,确定信息的最终形式
将结果输出成结构化的描述形式以便于查询分析
Web 数据抽取 **基本前提:**包含数据的页面是通过页面模板生成的。
Web 数据抽取定义 Web 数据抽取是指从页面中将用户感兴趣的数据利用程序自动抽取到本地的过程。为了能够保证抽取的准确性,必须能够识别页面模板:
T 是页面模板。W=T(d),W 为页面,d 为数据。
C 是相似页面之间不变的部分,包括导航、版权声明等。
L 是页面的格式规范(数据的格式规范)。
S 是从页面数据中观察到的数据模式。
Web 页面定义
Web 数据抽取问题可以转化为从已知的 W 中逆向推导出 T ,然后还原出 D 的部分。
包装器 包装器是一个软件过程 。过程:工程开发中的最佳实践称为过程。
这个过程使用已经定义好的信息抽取规则 ,将 Web 页面中的信息数据抽取出来,转化为结构化的格式去描述。
因为是最佳实践,因此一个包装器一般仅仅针对某一种数据源中的一类页面。
包装器运用规则执行程序对实际要抽取的数据源进行抽取。
包装器的核心是抽取规则。抽取规则的定义取决于你怎么看待 HTML 文档 。
基于分界符规则 **方法:**给出数据项的起始和结束分界符,将其中的数据抽取出来
例如:某一个数据项的起始规则是"SkipTo',结束规则是"SkipTo '。意味着 从文档的起始忽略所有的字符 直至找到 HTML 标签 ,接着,忽略所有字符直至 ,中间部分即所需的字符串 。
基于树路径规则 **方法:**将文档看作树结构,将所抽取的数据存储在树节点中
首先根据 HTML 标签将文档分析成树结构,如 DOM 树
包装器分类
**爬虫分为三步骤:**下载页面页面数据提取数据存储
**包装器归纳:**使用机器学习的方法产生抽取规则,属于有监督学习:
**网页清洗:**有些页面结构不规范,例如前后标签不对称,没有结束标签等。
**网页标注:**给网页中的某个位置打上特殊标签表明这是要抽取的数据。
包装器空间生成:对标注数据生成 XPath 集成空间(候选规则);对生成的规则进行归纳,形成若干个子集;归纳的规则是 在子集中 XPath 能够覆盖多个标注的数据项。
**自动抽取:**通过挖掘多个数据记录中的重复模式来寻找这些模板,是无监督模型,步骤:
**包装器训练:**将一组网页通过聚类将相似的网页分成若干组;每组的页面获得不同的包装器。
**包装器应用:**将需要抽取的网页和之前聚类后的网页进行比较;在某个分类组下则使用该分类下的包装器来获取网页中的信息。
Web 数据抽取方法 Web 数据抽取目的是获得页面数据,需要借助一个或多个页面的逆向推导得到页面模板 T。
人工分析出页面模板(XPATH、正则表达式)(页面模板 + 抽取规则=包装器)。
针对具体问题生成具体的包装器(人工包装途径容易采纳,在具体问题上可以得到满意的结果)。
只适合小规模的即时的数据抽取,不适合大规模的数据抽取。
由计算机页面模板抽取数据生成具体的包装器,但页面模板分析还需要人工参与。
设计一个描述页面模板的概念模型和一套用来描述抽取意图的规则语言,用户通过一定的辅助工具利用概念模型分析出页面模板,使用规则语言表面抽取意图。
计算机根据分析出的页面模板和抽取意图,生成包装器,完成抽取。
这种途径比手工包装更加系统化,能大大减少工作量。
仅仅需要很少的人工参与或者完全不需要人工参与。
更加适合大规模、系统化、持续性的 Web 数据抽取。
自动抽取工作中,页面模板的分析通过序列匹配、树匹配或利用可视化信息完成 ,并且直接给出抽取结果。
Web 数据抽取评价标准
**召回率:**抽取到的正确结果和要抽取页面的全部结果的比,即 R=|Ra| / |R|。
**准确率:**指抽取到的正确结果和抽取到的全部结果的比,即 P=|Ra| / |A|。
**抽取的自动化程度:**这项标准用来衡量用户在抽取过程中的参与程度,分为手工、半自动和全自动三类。
**适应性:**指在该页面的内容和结构有较小变化的情况下,该抽取方法或工具有自适应能力,仍然能够正常工作。
**修正率:**其含义是需要手工调整使得准确率和召回率达到 100% 的 Web 数据库数量。
**F 值:**召回率R 和查准率P 的加权调和平均值,综合考虑了二者
第六章 包装器页面抽取方法 第五章本质上是在带大家入门一下数据抽取的概念,以及包装器的概念。然后简单说了包装器按自动化程度分为人工编写、半自动化编写、全自动化编写;按实现方法分为人工编写、包装器归纳、自动生成。本章我们会真正来带大家看看如何用包装器来实现页面抽取。首先从人工编写(爬虫)方法生成包装器完成数据抽取和信息抽取开始!!!
网页分类 想要实现手工编写,我们首先要对网页进行一个分类,不同类型的网页使用不同的包装器方法去提取信息和数据。
详情页 A Authority
每一页只关注一个特定对象,也有其他相关和无关信息
同结构的记录在页面内重复排列出现。
列表页 H。列表在页内的特定位置。每一页有多个数据记录。
页面中嵌入了一个或多个 结构化的数据记录 。
页面展示的是带有属性标签和数据值的信息。
数据记录按照一定的格式规范和属性次序被载入在页面中。
页面嵌入的是半结构化文档内容或文档标题。
页面展示的是文本型信息。
多记录数据型页面的抽取方法 多记录数据型页面是指页面由多条结构相同的数据记录组成,抽取方法:
首先从网页中识别数据记录边界,抽取数据记录
从数据记录中抽取数据项
**1.数据记录抽取 == 抽取数据 == 获得页面模板 == 逆推导
2.数据记录抽取 == 抽取数据 == 直接抽取数据**
数据记录抽取 人工处理包装器也就是爬虫。主要有两个角度的思路:1.看成字符流用正则表达式;2.看成树结构用 DOM 树完成。这里我们想要从树结构角度去看看怎么抽取数据记录。抽取数据记录步骤如下:
确定数据区域:比较 DOM 树算法、语义块算法
计算数据记录的边界:利用规则得到数据记录
**方法 1·比较 DOM 树算法:**从两颗 DOM 树根节点开始递归深度遍历,如果两个节点相同则递归下一层,否则标记为不同子树返回上一层。
**语义块:**HTML 文档的片段,是逻辑上满足模式定义的一个 HTML 文档子集。一个语义块可以进一步划分为最小语义块。最小语义块是包装器在生成和维护中的最基本抽取单位。
**方法:**计算数据记录边界本质上就是确定语义块所在的层次。首先初始化 DOM 树的路径组;从 DOM 树根开始逐棵子树去考察,不断将树比较结果划分到各个路组;直到发现某一层次存在语义块集合(需要设定好阈值 M)
**规则 1、2:**关键字频率 + 共同路径【关键字频率多那就是数据记录的共同路径,可以下一层去找;如果少了很多那就说明进入数据项内部了;回溯确定语义块层次】
**方法:**利用规则 3、4、5 来划分数据记录边界
数据项抽取
数据项边界 –指的就是判断一个数据项应该覆盖 HTML 树结构上的多少个节点。**
**规则 6:**位置相同,标签序列相同就是不同数据记录的同一个字段。
除了直接使用规则 6 来判断数据项是否是同一个字段。还可以使用两个数据项之间的相似性来判断是否是同一个字段:
出现路径规则:来自不同语义块的两个数据项如果具有相同的角色,则它们具有相同的出现路径。
视觉规则:来自不同数据记录的两个数据项如果是相同角色 (是相同字段),则它们有相同的视觉信息。
上下文规则:来自不同数据记录的两个数据项如果是相同角色,则它们具有相同的上下文信息。
文本特征规则:来自不同数据记录的两个数据项如果是相同角色,则它们具有相似的文本特征。
单记录数据型页抽取方法
连续性数据抽取最好的办法就是确定页面模板,然后根据页面模板 + 页面来逆推导页面数据 。
页面模板存在变化的可能性。虽然单记录数据型页面仅仅有一个记录,页面模板相对固定,但是也有变化的可能性,因此引入部分树对齐算法(增量推导网页模板) :
首先选择一棵树作为对齐开始的种子
接下来,将剩下的树逐个和种子进行对齐
首先处理其中一棵树 T2。T2 无法和种子 T1 对齐,属于歧义情况。于是跳过 T2.
接下来 T1 和 T3 对齐,也就是通过 T1 和 T3 的网页模板,我们推导出了一个新的网页模板。
用新生成的网页模板和 T2 继续对齐
如果还剩下跳过的页面,就继续对齐,直到不能生成新的页面模式为止。
部分树对齐后,会产生唯一页面模式,用来抽取数据
单文档型页面抽取方法
基于一个观察结果:网站中正文普遍占据绝大部分位置,文本块长度最长
短正文没法很好的提取到
包含大量评论的页面没法很好提取到
**抽取路径学习:**除了使用种子点 seedElement 找出正文内容外,在内容返回前,还将正文的抽取路径保存到数据库中。
按照基于视觉信息的抽取抽取出的路径与数据库比对,一致时就没问题,不一致就需要进行选择(如果页面发生变化则选择基于视觉信息;如果是短正文/评论页则选择基于数据库信息)
本质是抽取路径法中的数据库信息和视觉信息的自动选择,基于贝叶斯最优决策的方法
所用的特征包括:
第七章 Web 数据存储
爬取数据存储
结构化文件:Excel、CSV、JSON、XML、PICKLE
CSV:以逗号相隔、存储容量少
JSON:是存储和交换文本信息的语法,比 XML 小在数据交换中起到载体的作用
XML:用来交换数据而不是展示数据
PICKLE:用于序列化和反序列化 python 对象。pickle 是二进制序列化格式,json 是文本序列化。JSON 可读,pickle 不可读。JSON 可互操作,PICKLE 仅仅在 python 中使用。
Sqlite:python 内置的一个轻量型关系数据库。
MySQL
MongoDB
txt 文件
JPG 文件
Hbase 等非结构化数据库
第八章 Web 数据预处理
结构化数据处理
**缺失值处理:**直接删除/填充新值
**噪声处理:**识别、直接删除、极值处理到一个正常区间
**不一致处理:**删除再填充新值
特征:在观测现象中一种独立、可测量属性
主成分分析法(PCA):无监督学习,将互相相关的特征,通过线性组合,使得数据变换到新的空间,可能最大程度保持原来的信息,并且特征之间互相不相关。
特征工程:把原始数据变成特征的过程 ,目的是为了更好的训练数据
方法包括:特征选择、特征提取、特征组合、特征构造
**标准化:**Z-score,让每一个特征均值为 0,方差为 1
白化:消除不同特征之间的 相关性 ;降低输入数据特征之间的冗余性 ;输入数据经过白化处理后,特征之间的相关性较低,并且特征具有相同的方差;白化的一个主要方法就是 PCA。【特征去相关 + 方差归一化】
归一化:把数据特征转化为相同尺度的方法。最近邻分类器就是尺度敏感的,尺度大的特征起主导作用,也有 尺度不变性 算法。线性分类器尺度不变。【加速收敛、统一尺度、减少冗余信息、提高泛化能力、不能直接解决过拟合问题】
**离散值:**类别特征编码(标签编码、独热编码)
非结构化数据处理
SQL 查询
NLP 文本特征:分词、预处理、向量描述
IR:IR 模型、倒排表、搜索引擎
文本处理:文本分类、文本聚类、情感分析
图像数据——图像特征——图像识别、检索
文本 + 图片特征——跨模态检索、文本生成图片
第九章 文本预处理
语言是具有组合性 的,只有组合在一起语言才有意义。
**预处理:**将文档拆解成单词以便计算机程序能够解释。
**文档解析:**移除文档中不必要的格式,比如 HTML 标签。
**句子分割:**从文档拆成句子。
**分词(词条化):**句子变为单词【基于词典的分词、基于统计的分词、基于理解的分词】。
**词规范化:**归一化(不同表达方式归一化)、词干还原(去除单词两端词缀的过程)。
**去停用词:**删除不需要的词(冠词、介词、代词等)。
基于词典的分词(字符串匹配)
按照一定策略拿出汉字串,然后与'词典'中的词条进行匹配
如果匹配成功,那么这个汉字串就是一个词
遇到不认识的字串就分割
基于统计的分词方法 **思想:**如果相连的字在不同的文本中出现的次数越多,就证明这相连的字很可能就是一个词。因此,我们只要判断各个字组合出现的频度就可以判定是否为一个词。
N 元文法模型
隐马尔可夫模型
条件随机场模型
深度学习模型
基于 HMM 的分词 **马尔可夫过程:**未来只与现在有关与过去无关;具有无后效性特点的过程称为马尔可夫过程。
**举一个例子:**天气预测可以认为就是一个马尔可夫过程(今天的天气不会影响后天,只会影响明天)
**HMM:**Hidden Markov Model 隐马尔可夫过程(状态隐藏马尔可夫过程)
**概率计算问题:**模型 AB 矩阵 + 观察值(输入) + 状态值(输入) ——》 观察值概率。
**模型训练:**梯度下降最大化观察值概率
**模型使用:**观察值 + 模型 AB 矩阵 ——》 状态值
**本质上:**模型在通过学习明白观察值和状态值之间的联系,然后我们给出观测值模型就能够预测出状态值。
例如:给定一个天气的隐马尔可夫模型,包括第一天的天气概率分布,天气转移概率矩阵,特定天气下树叶的湿度概率分布。求第一天湿度为 1,第二天湿度为 2,第三天湿度为 3 的概率。
找到所有状态序列,得到各状态概率,得到每种状态概率对应的观察概率,求和。
已知第一天湿度为 1,第二天湿度为 2,第三天湿度为 3。求得一个天气的隐马尔可夫模型,包括第一天的天气,天气转移概率矩阵,特定天气下树叶的湿度概率分布。
如果产生观察序列 O 的状态已知 (即存在大量标注的样本), 可以用最大似然估计来计算 的参数:Baum-Welch 算法 (前向后向算法) 描述
如果不存在大量标注的样本:期望值最大化算法 (Expectation-Maximization, EM)
在模型已经训练好的前提下,观测值和状态值已经得到绑定。
通过 AB 矩阵将状态值和观测值在向量空间中相当靠近
对于分词任务:观察值为所有的汉字;状态值为 BMES(begin\middle\end\single)。
本质就是动态规划算法,计算得到最优的路径,也就是状态值集合。具体可以看博客:
**动态规划算法:**带有记忆功能不会重复计算子问题的穷举法
第十章 文本表示 在预处理后,我们得到这个文档处理后非常干净的一堆词语。但是这些词语仍然不能被模型直接使用,因此本章来学习文本表示,把词语转化为可以被模型使用的表示形式。
文本向量化
把字词处理成向量或矩阵,以便计算机能进行处理。
**上一章预处理的结果:**词条集合、词条序列。
**文本向量化:**文档——词条集合——无语序信息;文档——词条序列——有语序信息
对于给定文本。
忽略单词出现的顺序和语法等因素。
将其视为词汇的简单集合。
文档中每个单词的出现属于独立关系。
使用低维向量来表示文本。
每一维表示一个词的语义或主题信息
隐语义分析 LSA **离散文本表示有:**词袋模型和 TF-IDF 模型
**分布式文本表示有:**LSA、主题模型、文档哈希
**LSA:**对文本进行降维,仅仅考虑其中主要的语义,因此称为隐语义分析。
使用转化后的新向量表示文档进行后续计算
使用新的 A 来表示各个文档的向量
对于每一个文档,进行提取部分特征值后形成的新向量代替原有向量。
文章和单词都能映射到一个语义空间
语义空间的维度能够明显少于原向量空间,缓解了词袋法造成稀疏矩阵的问题
无法解决多义词问题。
特征向量语义空间等没有对应的物理解释。
LSA 和词袋模型一样没有考虑词语的先后顺序,也没有考虑句子/词语的相似关系。
SVD 计算复杂度高。
主题模型 LSA 是纯粹从数学矩阵分解保证最小损失的角度去处理,而pLSA 则是从统计学/概率学的角度去看待 LSA 。
根据文档 - 单词信息训练出单词 - 主题信息 + 主题 - 文档信息。
我们想要实现的是文档的主题划分(模型) 。也就是主题 - 文档信息,但是手头只有单词 - 文档信息(数据),缺少单词 - 主题信息(不完整)。因此需要 EM 算法在 E 步估计单词 - 主题信息(伪标签)。
可以把 EM 理解为深度学习中的伪标签。他们都是处理数据信息不完整的问题。
LSA 隐含高斯分布假设,pLSA 多分布假设更符合文本特性。
不再是人为限制 r 的数量,而是从统计学去学习。
在数据不充足的情况下,没有引入先验经验,而是直接用模型估计。受初始值影响大。
LDA 和 PLSA 思想一致,仅仅是将 S 改为 D,也就是引入先验分布(狄利克雷分布,Beta 分布)
文档哈希 **思想:**把任意长度的输入(文字、图像)转化为固定长度的输出。
**目标:**哈希码的相似程度能够直接反映输入内容的相似程度
文本预处理(文档理解、句子分割、分词、词规范化、去停用词)
文本表示(特征表示)
将高维特征向量映射成指纹
通过比较两篇文章的 f-bit 指纹的汉明距离来判断是否重复
**分词:**将语句分词;计算词的特征向量;为每一个特征向量设置权重。
**hash:**选择 simhash 的位数;通过 hash 函数为每一个特征向量计算 hash 值。
**降维:**对于合并后的结果,如果大于 0 则置 1,否则置 0.
**合并:**将上述各个特征向量的加权结果累加,变成一个序列串。
**加权:**在 hash 值基础上给特征向量加权;遇到 1 则 hash 值直接乘权重,遇到 0 则取 -1 乘权重。
第十一章 语言模型(统计语言模型、神经网络语言模型) 对于文本这个非结构化数据,我们前面几章研究的算是比较透彻了。从一开始文本预处理 (文档解析、句子分割、分词(基于词典的匹配算法、基于统计的方法)、词规范化、去停用词)到文本表示 (文本向量化、LSA、Plsa、LDA、主题模型、文档哈希)。
接下去,我们来学习语言模型,算是文本表示之后的应用部分 。在我们得到文本的向量表示之后,可以利用这个信息来训练一个语言模型。它能够反馈一个句子的可信度,也可以生成新的句子(看具体任务)。
根据大数定理,只要统计量足够,相对频度就等于概率。
但是当句子长了之后,w1,w2.....wn 组合实在太多了会导致概率几乎为 0。
**解决办法:**1.增加数据量;2.平滑技术(降低已出现的概率,从而使未出现的非 0);3.神经网络模型
理论上 n 越大越好。
经验上,trigram 用的最多。
尽管如此能用 bigram 绝不使用 trigram。
N-gram 模型无法建模更远的依赖关系。
N-gram 模型无法建模出词之间的相似度。
N-gram 模型泛化能力不够强。
词语之间的相似性可以通过词向量来体现。
自带平滑功能。
第十二章 词嵌入和文档嵌入 文字在经过预处理的五个阶段,然后利用比较合适的方法进行文本表示。之后想要使用这些文本进行应用,因此设计语言模型。当然,在语言模型中延申出更好的文字表示(词向量)。语言模型分为:统计语言模型(n-gram 语言模型)、指数语言模型、神经网络语言模型(nnlm,word2vec)。
其实文本表示章节就是在研究怎么把文本这个非结构数据表示为向量。但是无论我们用什么办法,都无法很准确的描述(向量表达能力不够,例如无法表达相似关系)。直到深度学习的出现,其在应用的过程中,首先就会将事物映射为相当复杂的向量,然后再做处理(特征提取)。可以这么说:
深度学习 = 特征提取 + 特征使用
深度学习模型 = 特征提取 + 特征使用
特征提取就是转化为合适的向量
特征使用就是利用这些特征完成具体的任务(分类、目标检测、自然语言生成等)
对预测任务的理解:材料罐 = 特征(铁矿石/木炭/石英)炼金炉 = 模型(不同配方函数)每个材料提炼后的精华 = 模型特征提取 精华的融合 = 模型特征使用 改进炼丹炉 = 反向传播训练模型 从初级升到高级炼丹炉 = 换模型温度控制 = 学习率 目标产物 = 预测值(黄金)
**人类说话本质上:**输入是前面说过的话输出是要说的下一个字例如'我要去',通过前面这三个字大脑这个模型就会输出我心中最想去的地方作为输出,'拉萨'!那如果我去过'拉萨'了,我的大脑模型就变了,我会输出'云南'!
**NNLM 存在的问题:**需要对词典中所有 word 都算一遍概率,训练、推理速度都太慢。
前半部分训练词语的特征向量。
后半部分通过词向量训练神经网络语言模型。
CBOW 模型:利用周围词来计算中心词概率,特征融合方法采用点对点加法。
Skip-Gram 模型:根据某个词来计算周围词的概率。用成对单词进行训练(input word,output word) 输出是概率分布。引入层次和负采样来解决 NNLM 计算词典所有 word 的问题。
不仅能学习单词得向量,还能学习文本的向量表示。用于聚类、分类。训练过程时,同时训练词向量和段落向量。词向量随滑动窗口的改变而改变,而段落向量只要在本段就不会改变。
改进了 word2vec 只能利用窗口中的局部信息的缺陷,成功利用全语料库的信息。词共现矩阵,表示了两词不同文档出共现次数。
**词嵌入:**使用深度学习来进行文本表示(将文本转化为词向量,同时尽可能减少信息损失)
第十三章 文本分类
文本分类 **定义:**用计算机对文本(或其他实体)按照一定的分类体系或标准进行自动分类标记。
情感分析:积极、消极、中性
主题分析:金融、体育、军事
意图识别:天气查询、歌曲搜索
问答任务:是、否
自然语言推理:导出、矛盾、中立
**特征表示:**词袋模型、TF-IDF、统计语言模型(n-gram 模型)、神经网络语言模型(nnlm 等词嵌入)。
**分类模型:**浅层深度学习(参数较少,在小规模上效果好)、深度学习模型(结构复杂,对数据依赖性强)
数据预处理
训练 Doc2Vec 模型,得到文档嵌入向量
创建文档向量并划分数据集
训练分类器
方法流程同 Doc2Vec 类似,区别在于是对文档中所有单词的嵌入向量加权平均得到文档向量。
fastText
Word2Vec 需要为每一个单词创建嵌入,它不能处理任何在训练中没有遇到过的单词。
对于词根相同的单词如 eating、eat 和 eaten,这些单词应该彼此有联系,存在参数共享。
找特征向量的时候以字符级去确定特征向量,而不是整个单词。
在训练中,由于利用 n-gram 提取单词中子部分特征,因此存在许多共享的部分(eat 和 eating 存在共享)。因此训练速度更快。
存储空间更大了,因为需要存储更多词向量。
TextCNN
将计算机视觉中用于图像识别的 CNN 迁移到自然语言领域。(改进的是特征使用这一块 )。
准备不同大小的卷积核,提取不同的信息,然后利用池化层和全连接层来使用这些信息。
TextCNN 的卷积核只能在序列方向移动。
大语言模型中的 Token 化 前面我们对文字这个非结构数据的处理流程是:文本预处理、文本表示、文本应用。
文本预处理里面提到分词,从基于词典模型 到 基于统计模型(HMM 模型)
词典依赖性。
形态处理能力不足。
歧义处理能力弱。
跨语言适配差。
于是 分词中的全新流派——Token 出现了!!!
从此以后我们是按照 Token 去分词,而不是按照词去分词 ~~
自由把词组合或拆分作为 Token 单位
开放词汇表
形态处理能力强
跨语言适配性强
本质就是在 考虑字符 和 考虑词符 之间去找了一个平衡点。
**核心思想:**出现频率高 + 相邻则合并有两个目的:1.参考哈夫曼树的思想;2.相邻意味着是一个词本身就要合并。需要 Token 细粒化到什么程度由预设词汇量决定。
**优点:**从字符层级去考虑分词。变为开放词汇表同时提高了形态处理能力。进行了有效压缩,减少了全局分词的弊端。
第十四章 Web 图片数据 前面好多章,我们一直在讲非结构数据中的文本部分。本章开始,我们就来讲讲图片这个非结构数据。
web 图像 位图图像(Bitmap):使用颜色网格(像素,bit)来表现图像。JPEG 和 GIF 格式都是位图。
SVG 图片:基于 XML;可以用代码来画图;随时插入到 HTML 中;文字保留可编辑可搜寻状态
图像特征
颜色特征
颜色是彩色图像最底层、最直观的物理特征
通常对噪声,图像质量的退化、尺寸、分辨率等变化有很强的鲁棒性 。
全局特征
HSV 空间:人类视觉对亮度的敏感度大于色相的敏感度,因此分为三种分量:色相、饱和度、亮度。
RGB 空间:三种原色光描述自然界所有颜色,用相互垂直的坐标轴来表示,是一个加光模式 。并不是完全符合人类对颜色相似性的视觉感知。
**颜色直方图:**在颜色空间中采用一定的量化方法对颜色进行量化,然后统计每一个量化通道在整个图像中所占的比重。
描述的是不同色彩在整幅图像中所占比例。
描述分布特性。
具有平移、尺度、旋转不变性。
适合描述那些难以自动分割的图像。
任何图像都有唯一一个直方图,但是可能不同图像有相同的颜色分布直方图(可以分割承子图像,建立索引来区分)。
**颜色矩:**在颜色直方图的基础上计算出每个颜色的矩估计。直方图是各个像素颜色的统计数据,颜色矩是各个像素颜色的统计摘要(用特征来表示)。前者是全部说出来,后者是把颜色统计信息转为数学特征去表示。前者是全部说出来,后者是把颜色统计信息转为数学特征去表示。
使用这些特征量,代替颜色的统计值从而代表一张图片。可以减少特征量(三个颜色分量,每一个使用三个低阶矩 3*3=9 就可以表示),减少存储空间。
纹理特征 纹理特征:指在图像中反复出现的 局部模式 和它们的排列规则 ,描述了图像或者图像区域所对应的景物的表面性质 。并不反映本质属性,随分辨率变化有较大偏差,受光照反射等影响,造成误导。
不是基于像素点的特征,而是基于像素区域的特征。
是一种统计特征,具有旋转不变性,但是平移会发生改变。
对图像信号的频率和方向进行选择性滤波。
基于信号处理的方法也称为滤波方法。
常见的图像滤波方法有傅里叶变换和 Gabor 滤波器。
LBP 特征:局部二值模式 。结合了纹理图像结构 和像素统计关系 的纹理特征描述方法。
一种有效的纹理描述算子
对光照具有不变性
具有旋转不变性
灰度不变性
一般不用 LBP 图谱作为特征向量用于分类识别,而是采用它的统计直方图作为特征向量。
图谱和位置有很大关系,会因为位置没有对准产生很大误差,可以将图片划分为若干个子区域,为每一个子区域建立 LBP 统计直方图。
形状特征
低级图像特征主要有颜色、纹理和形状。
**低级图像特征包括局部特征和全局特征:**全局特征是基于整幅图像提取的;局部特征是基于图像的某个区域提取的。
局部形状特征:LBP、HOG、SIFT
**HOG 特征(方向梯度直方图):**计算和统计图像局部区域的梯度方向直方图来构成特征
梯度概念就是像素值变换最快的方向。
在一幅图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好的描述
灰度化:将图像看作(灰度)三维图像。
采用 Gamma 矫正法对输入图像进行颜色空间标准化:减少噪音、局部阴影等干扰。
计算图像每个像素的梯度
将图像划分为小 Cell
统计每个 cell 的梯度直方图:为每一个局部区域保留一个编码,充分考虑局部信息。
将每几个 cell 组成一个 block,得到该 block 的 HOG 特征表述:从局部信息中提炼稍大一点的全局信息(非完全全局)。
将图像内所有 block 的 HOG 特征描述串联起来得到该图像的 HOG 特征。
由于 HOG 是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持比较好的不变性,因为这两种形变只会出现在更大的空间领域上。
在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿 势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。特别适合人体图像检测。
尺度不变特征转换。
在空间尺度中寻找极值点,提取出其位置、尺度、旋转不变量。
应用:机器人地图感知导航。
尺度是客观存在的,尺度空间的获取要用高斯模糊来实现。高斯卷积是表现尺度空间的一种形式。
建立尺度空间(高斯差分金字塔)。
在不同尺度空间中检测极值点,进行精准定位和筛选。
特征点方向赋值(位置、尺度、方向等)
计算特征描述子
总结 终于更新完了,不得不说 Web 数据管理的知识体量还是大的,比数据可视化大多了。希望这篇博客能够给未来的学弟学妹们一点帮助。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online