跳到主要内容

项目:信息抽取【选修】

本节定位

信息抽取项目非常适合做作品集,因为它天然体现:

  • 文本理解
  • 结构化输出
  • 规则与模型结合

而且业务价值也很直观:

  • 从自然语言里提取结构化字段

这节课会把一个最小项目骨架走出来。

学习目标

  • 学会给信息抽取项目定清楚字段边界
  • 学会把文本解析结果组织成结构化输出
  • 学会先做规则基线,再考虑更强模型
  • 通过可运行示例建立一个最小项目闭环

一、项目问题先要定得足够窄

1.1 场景

我们做一个最小公告信息抽取项目。
输入是一段公告文本,输出字段包括:

  • 时间
  • 地点
  • 人物
  • 事件

1.2 为什么这种项目适合练手?

因为它的价值很清楚:

  • 把自然语言变成结构化数据

同时它还能自然承接前面学过的:

  • 序列标注
  • 规则抽取
  • 结构化输出

1.3 先别一上来做太多字段

最稳妥的做法通常是:

  • 先做 3~4 个最重要字段

而不是试图一次把所有信息都抽全。


二、先跑一个最小规则基线

这个例子会用非常简单的规则抽取:

  • 年月日
  • 城市
  • 人名模式
  • 事件文本

它不追求完美,
但能让你先把完整项目结构跑通。

import re

text = "2025年6月1日,张三在北京发布了新课程计划。"


def extract_info(text):
result = {
"date": None,
"person": None,
"location": None,
"event": None,
}

date_match = re.search(r"\\d{4}年\\d{1,2}月\\d{1,2}日", text)
if date_match:
result["date"] = date_match.group()

for city in ["北京", "上海", "广州", "深圳"]:
if city in text:
result["location"] = city
break

person_match = re.search(r"[\\u4e00-\\u9fa5]{2,3}", text)
if person_match:
result["person"] = person_match.group()

if "发布" in text:
result["event"] = "发布课程计划"

return result


print(extract_info(text))

2.1 这个示例为什么值得先做?

因为它已经包含了:

  • 输入文本
  • 字段定义
  • 结构化输出

这三件事清楚后,项目骨架就出来了。

2.2 为什么要先做规则基线?

因为这样你能更快回答:

  • 哪些字段其实很容易抽
  • 哪些字段最难
  • 复杂模型到底应该补哪一块

三、从规则基线到模型抽取,通常怎么走?

3.1 规则适合处理稳定模式

例如:

  • 日期
  • 固定格式编号

3.2 模型更适合处理灵活表达

例如:

  • 人名
  • 事件短语
  • 边界模糊实体

3.3 所以真实项目往往是混合式

最常见的组合不是:

  • 全规则
  • 或全模型

而是:

  • 规则 + NER / 分类 + 后处理

四、一个最小项目展示应该包含什么?

4.1 字段定义

明确告诉别人:

  • 你抽哪些字段
  • 不抽哪些字段

4.2 基线方法

哪怕只是规则,也要讲清:

  • 基线怎么做
  • 为什么先这样做

4.3 样例与错误分析

至少准备:

  • 几条成功样例
  • 几条失败样例
  • 你对失败原因的解释

4.4 下一步升级方向

例如:

  • 用 NER 模型替换规则部分
  • 加实体消歧
  • 增加文档级聚合

五、最容易踩的坑

5.1 误区一:字段定义太多

字段一多,项目容易失控。

5.2 误区二:一开始就上复杂模型

没有基线时,很难判断复杂模型到底补了什么。

5.3 误区三:只看抽取结果,不看结构化输出质量

真实业务很在意:

  • 字段是否为空
  • 类型是否一致
  • 结构是否稳定

小结

这节最重要的是建立一个信息抽取项目习惯:

先把字段、规则基线和结构化输出做清楚,再决定哪些部分需要用更强模型补上。

这样你做出来的项目会更像真正可交付的信息抽取系统,而不是只会跑一段 demo。


练习

  1. 给示例再增加一个字段,例如 organization,尝试补规则。
  2. 想一想:哪些字段适合用规则先做,哪些更适合交给模型?
  3. 如果规则基线已经能很好抽日期,但人名总不稳,你下一步最该补哪一部分?
  4. 用自己的话解释:为什么信息抽取项目特别适合“规则 + 模型”混合路线?