第四讲 · 半结构化知识抽取

(updated 2026年8月23日)

对应 PPT:第4讲 主要内容:百科类抽取(DBpedia)、Web 包装器、Web Table 抽取


1. 什么是半结构化数据

半结构化数据:用**标签(tag)**对数据进行结构划分或分离语义元素的数据。和结构化数据相比,没有严格的数据结构和关系定义。

  • 包括:HTML、JSON、XML、NoSQL 数据库
  • 标签划分了页面元素的层次(<table>, <div>, <h1>)
  • 优点:扩展性强、灵活性好
  • 缺点:结构可变,模板可能随时改

半结构化 vs 结构化 vs 非结构化

类型结构例子抽取方法
结构化严格 schema关系数据库D2R(DM/R2RML)
半结构化标签+自由HTML/JSON/XML包装器 / 模板 / 实体链接
非结构化无结构文本NER/RE/EE

2. 百科类知识抽取:DBpedia 框架

2.1 背景

  • Wikipedia 是最大的半结构化知识源之一
  • DBpedia = Wikipedia 知识图谱化,从 Wikipedia 抽取结构化数据,发布为 RDF

2.2 DBpedia 总体框架

DBpedia 百科知识抽取框架

页面集合先经过不同提取器与解析器,再被统一序列化为 RDF 数据。

页面集合(Page Collections)         目标数据(RDF 三元组)
  ├─ 本地 Wiki 文章                       ↑
  └─ 远程 Wiki 文章                       │
                                          │
        提取器(Extractors)→  解析器(Parsers)→ 三元组
        (特定类型 Wiki 标记)  (类型判断/转换)
  • 页面集合:本地 + 远程 Wikipedia 文章
  • 提取器(Extractors):把特定类型的 Wiki 标记转成三元组
  • 解析器(Parsers):判断数据类型、不同单元间转换值
  • 目标数据:存储或序列化为 RDF 三元组

2.3 DBpedia 抽取的 12 类信息

#信息含义例子
1标签(Labels)词条标题 → 实体名”蒂姆·伯纳斯-李” → rdfs:label
2摘要(Abstract)词条第一段长文本描述
3跨语言链接不同语言版词条互链en: ↔ zh:
4图片(Image)词条中的图片链接File:Sir_Tim_Berners-Lee.jpg
5重定向(Redirects)同义词条关联”TimBL” → “蒂姆·伯纳斯-李”
6消歧(Disambiguation)同名歧义实体的内部链接”苹果”:公司/水果/报纸/电影/艺人
7外部链接词条 → 外网论文/官网
8页面链接(Pagelinks)词条 → 其他 Wiki 词条蕴含实体间关系
9主页(Homepage)公司/机构的官网北航词条中计算机学院主页
10分类(Categories)词条所属类别可用于构建本体
11地理坐标经纬度城市/地标
12信息框(Infobox)词条的结构化属性最重要:作为实体的属性

这几类信息的用途容易混淆:

  1. Infobox 是 Wikipedia 右侧的属性表,最重要的结构化知识源
  2. Pagelinks 蕴含实体间关系(链入 = 有关联)
  3. Categories 可用于构建本体(分类层级 = 本体的 subclass)
  4. Disambiguation 是消歧任务的关键数据源
  5. Redirects 是共指消解的关键数据源

Wikipedia 分类可以帮助建立概念层次,但它并不天然等于严格本体,仍需要清洗。Redirects 处理别名,Disambiguation 处理同名不同实体,两者不要混用。


3. 包装器(Wrapper)——Web 网页数据抽取的核心

3.1 什么是包装器

包装器(Wrapper)是一种将数据从 HTML 网页中抽取出来,并将其结构化的软件。

  • 同一网站页面通常用少量模板编码
  • 包装器 = 一组”抽取规则”(XPath / CSS 选择器 / 正则),定位并抽取目标数据

3.2 包装器生成的 3 种方法

方法类型核心思路优点缺点
手工方法人工人工查看 HTML,写 XPath/CSS 选择器准确率高慢、难维护、不能扩展
包装器归纳监督学习标注样本 → 学习 XPath 规则 → 泛化比手工快需标注、跨模板泛化差
自动抽取无监督学习聚类相似页面 → 自动学模板无需标注准确率低

从手工、监督到无监督,人工成本逐步降低,自动化程度逐步提高。

3.3 手工方法

  • 步骤:
    1. 打开 Chrome → F12(开发者工具)
    2. Elements 标签看 HTML
    3. 找到目标元素 → 右键 → Copy XPath
    4. 把 XPath 喂给爬虫,循环跑
  • 例子:“万维网”标题的 XPath://*[@id="mw-content-text"]/div[1]/p[1]/a[1]

3.4 包装器归纳(4 步)

① 网页清洗(Tidy 工具)→ 规范 HTML
② 网页标注 → 给目标数据加 Label
③ 包装器空间生成 → 生成 XPath 集合 + 归纳规则
④ 包装器评估 → 准确率 + 召回率

归纳示例:

  • 标注两个相同类型元素的 XPath:
    • A: //*[@id="mw-content-text"]/div[1]/table[4]/tbody/tr[2]/td[2]
    • B: //*[@id="mw-content-text"]/div[1]/table[4]/tbody/tr[3]/td[2]
  • 归纳后://*[@id="mw-content-text"]/div[1]/table[4]/tbody/*/td[2]
  • 把 tr[2]、tr[3] 泛化为 *(任意行)——这是监督学习的归纳偏置。

评估规则:

  • 选准确率更高的(包装器 A 优于 B)
  • 召回率相同时选准确率高的

3.5 自动抽取(无监督)

  • 思路:同一网站页面用少量模板,通过学习网页的重复模式找模板
  • 步骤:
    1. 包装器训练:聚类相似网页 → 一组相似网页 → 一个包装器;不需要先验知识和人工标注
    2. 包装器应用:把目标网页与训练样本比较 → 分类 → 选对应包装器

三类方法分别依赖人工规则、标注样本和页面结构聚类。


4. 网络表(Web Table)抽取

4.1 什么是 Web Table

  • Web Table = 网络中内嵌的表格(HTML <table>)
  • 特点:使用便利灵活
  • 应用:电商、百科、微博、腾讯文档、Wikipedia 等

4.2 数量和价值

  • 全球电子表格活跃用户 >40 亿
  • 2019 年口径:Wikipedia 52 万篇文章中可抽取 323 万+ 张表
  • 有价值信息占比小:141 亿 HTML 表中只有 1.54 亿(1.1%) 是高质量

后一组是 Cafarella 等人 2008 年 WebTables 工作的口径。两组数字不能共用一个年份,但都在说明:网络表数量很大,真正承载高质量关系数据的比例很低。

4.3 网络表分类:4+2 个维度

维度类型描述
内容关系(relational)描述一系列实体和其属性
实体(entity)描述一个特定实体(学生表、老师表)
矩阵(matrix)三维数据集(标题+行+列)
其它日历、清单等
布局导航(navigational)用作网页内容导航
格式化(formatting)用作展示信息

实体表 vs 关系表(数据库类比):

  • 实体表:存一个对象的属性(Student 表:stuId、stuName、age)
  • 关系表:存对象间多对多关系(StudentCourse 表:stuId、courseId)

4.4 网络表的元素(7 个)

元素含义
Tp表网页题目
Tc表题注
TH表标题(列头)
TE表实体(行/单元)
T[:j]表列
T[i:]表行
T[i,j]表单元

4.5 网络表相关任务

任务层级说明
网络表抽取底层从网页中识别、分类、存储表(表语料库构建)
网络表阐释底层表内容 → RDF 三元组
网络表搜索上层找特定的表
网络表增广上层用表增强 NLP
知识库增广上层用表补充 KG
问答上层表上做 QA

可以分成 2 个底层任务(抽取、阐释)和 4 个上层应用。

4.6 网络表抽取的 3 个子任务

子任务目标特征方法
关系表分类预测表是否含关系数据表大小、标签规则 / 分类器(Cafarella 2008)
标题检测识别列头行类似表元数据复用关系表特征
表类别分类按预定义分类法分类语法+语义规则 / 深度神经网络

5. 网络表阐释

5.1 目标

把表的隐含语义显式表达成 RDF 三元组。

5.2 过程(3 步)

① 候选实体生成:单元格字符串 → 知识库候选实体集合
② 实体链接:字符串 → 知识库中具体实体
③ 实体消歧:候选集合多于一 → 选唯一

5.3 实体链接的影响因子(2 个)

因子含义
提及重要性(mention importance)每个字符串本身的重要性
语义相关度(semantic relatedness)不同节点之间的语义相关度

5.4 实体消歧

  • 用 PageRank 算法整合两个影响因子 → 选得分最高的实体作为链接
  • PageRank 完成后,删除其他候选实体和相关边,更新图中的边权值

完整的表语义阐释还要继续做关系与类型解释:先恢复题目、题注、列头、行和单元格,再生成候选实体、完成消歧,最后利用列头和同列类型确定谓词并生成三元组。例如“姚明|上海|2.26 米”只有在列头被解释为“人物|出生地|身高”后,才能可靠生成事实。


6. PageRank 算法(重要基础)

6.1 思想

重要性(importance)评价网页(实体)。这是一个递归过程:页面从指向它的页面接收权重,再把自己的权重分给它所指向的页面。

6.2 物理意义

  • 想象用户在网上随机浏览
  • 一个网页的 rank = 随机游走达到稳态后,浏览者处于该页面的长期概率
  • 高质量页面的链接比低质量页面的链接贡献更大

6.3 算法步骤

① 初始化:rank = 1/N(N 个实体,每个 rank = 1/N)
② 权重更新:每个实体的 rank = Σ 来自指向它的实体的 rank 贡献
   例:E 被 C 和 D 指向
     - C 有 3 个外链 → C 把 1/3 rank 贡献给 E
     - D 有 2 个外链 → D 把 1/2 rank 贡献给 E
③ 处理"死胡同":无外链的实体把 rank 平均分给图中所有其他实体
④ 迭代到收敛(实践中加衰减系数加速)

课件的五节点例子中,出边为:

A → B, C
B → A, C, D
C → A, D, E
D → A, E
E 无出边

初始时五个节点都是 0.20.2。按课件规则,E 把权重平均分给其余四个节点,每个得 0.050.05。一轮更新为:

PR1(A)=0.2/3+0.2/3+0.2/2+0.05≈0.28,PR1(B)=0.2/2+0.05=0.15,PR1(C)=0.2/2+0.2/3+0.05≈0.22,PR1(D)=0.2/3+0.2/3+0.05≈0.18,PR1(E)=0.2/3+0.2/2≈0.17.\begin{aligned} PR_1(A)&=0.2/3+0.2/3+0.2/2+0.05\approx0.28,\\ PR_1(B)&=0.2/2+0.05=0.15,\\ PR_1(C)&=0.2/2+0.2/3+0.05\approx0.22,\\ PR_1(D)&=0.2/3+0.2/3+0.05\approx0.18,\\ PR_1(E)&=0.2/3+0.2/2\approx0.17. \end{aligned}

五个结果之和约为 1,与课件图中的 0.28、0.15、0.22、0.18、0.17 一致。

6.4 关键规则

  • 课件对无外链节点的处理:该实体的 rank 平均分给图中其他实体
  • 物理直觉:用户”找不到目标”时会”随机跳到别处”
  • 实践中:用阻尼系数 d(通常 0.85)控制跳转概率: PR(p) = (1-d)/N + d * Σ PR(q)/L(q)

标准实现通常把 dangling node 的权重均匀分给全部 NN 个节点,并加上随机跳转项。考试若明确给出课件的“分给其他节点”规则,就按题面计算。

6.5 PageRank 在 KG 中的应用

  • 实体消歧:用 PageRank 整合 mention importance + semantic relatedness → 选唯一实体
  • 图节点重要性:评估哪个实体/概念”更重要”

7. 作业中的两个问题

  1. 包装器归纳法中可以使用哪些有监督模型? 答:决策树、SVM、CRF、BiLSTM-CRF、序列标注模型等。
  2. 大模型能否实现包装器? 答:可以,LLM(如 GPT-4)能根据 HTML + 抽取需求直接生成结构化数据。是否合适取决于页面模板、校验要求、调用规模和延迟预算:固定模板下传统包装器通常更稳定、成本更低;页面差异较大时 LLM 更灵活,但仍需结构约束和结果校验。

课件还布置了两项实践:以大作业小组为单位提交领域本体模型和有向图可视化;针对小组领域的开放网页手工构造包装器,同时提交原始网页与实体、关系、属性抽取结果。


8. 方法脉络

半结构化知识抽取
├── 什么是半结构化数据
│   └── 标签划分+无严格 schema
│
├── 百科类抽取(DBpedia 框架)
│   ├── 页面集合 → 提取器 → 解析器 → RDF
│   └── 12 类抽取信息
│       ├── Labels(实体名)
│       ├── Abstract(摘要)
│       ├── 跨语言链接
│       ├── Image / Redirects
│       ├── Disambiguation(消歧关键)
│       ├── External / Pagelinks(蕴含关系)
│       ├── Homepage / Categories(可构本体)
│       ├── Geo / Infobox(属性表,最重要)
│
├── Web 网页数据抽取
│   ├── 包装器 = 抽取规则(XPath/CSS)
│   └── 3 大方法
│       ├── 手工(人工 XPath)
│       ├── 包装器归纳(监督)
│       └── 自动抽取(无监督聚类)
│
└── Web Table
    ├── 4 类内容(关系/实体/矩阵/其他)
    ├── 2 类布局(导航/格式化)
    ├── 6 大任务
    │   ├── 2 底层:抽取、阐释
    │   └── 4 上层:搜索、增广、KG 增广、问答
    ├── 抽取 3 子任务(关系表分类/标题检测/表类别)
    └── 阐释 = 实体链接 + 消歧(PageRank)

评论