NLP学习笔记05:命名实体识别(NER)入门——从规则方法到 BERT

NLP学习笔记05:命名实体识别(NER)入门------从规则方法到 BERT

作者:Ye Shun

日期:2026-04-16

一、前言

命名实体识别(Named Entity Recognition,简称 NER)是自然语言处理(NLP)中的一项基础任务。它的核心目标,是从文本中识别出具有特定意义的实体,并将这些实体归入预定义的类别。

例如,在句子:

Apple is looking at buying U.K. startup for $1 billion.

中,模型可能识别出:

  • Apple → 组织机构
  • U.K. → 地点
  • $1 billion → 货币

如果把文本分类理解为"给整段文本贴标签",那么 NER 更像是在文本内部做"局部高亮标注"。它关注的不是一整句话属于什么类别,而是句子里哪些词或短语是重要实体,它们分别是什么类型。

这篇笔记将围绕以下几个问题展开:

  1. 什么是命名实体识别
  2. NER 在实际中有哪些应用
  3. 规则方法、统计学习和深度学习方法各自怎么做
  4. NER 的评估指标和常见难点是什么
  5. 如何快速上手做一个简单的 NER 示例

二、核心概念

1. 什么是命名实体

命名实体,通常指文本中表示特定对象的专有名词或具有明确指代意义的片段。例如:

  • 人名:张三Elon Musk
  • 地名:北京New York
  • 组织机构名:清华大学Apple
  • 时间日期:2026年4月16日12/15/2023
  • 货币金额:5000元$1 billion

这些信息在很多应用场景里都非常重要,因为它们往往承载了文本中的关键信息。

2. 什么是实体类别

NER 的第二个目标不是只把实体"找出来",还要把它们分配到类别中。常见类别包括:

  • PER:人名
  • LOC:地点
  • ORG:组织机构
  • DATE:日期
  • TIME:时间
  • MONEY:金额

不同数据集和工具采用的标签体系会有所不同,但思路都是一样的:先定位边界,再判断类别。

3. 一个直观类比

可以把 NER 理解成文本里的"高亮标记工具"。

就像人在读文档时,会用不同颜色的荧光笔标记人名、公司名、时间、金额等关键信息一样,NER 做的也是类似的事,只不过是让机器自动完成这个过程。

三、NER 的应用场景

NER 虽然是基础任务,但在很多实际系统里都扮演着关键角色。

1. 信息提取

在新闻、公告、论文和报告中,NER 可以自动提取:

  • 关键人物
  • 地点
  • 时间
  • 组织机构

这样就能把原始非结构化文本转成更容易分析的结构化信息。

2. 搜索与检索增强

搜索引擎如果能识别用户查询中的实体,就能更好理解搜索意图。例如:

  • "北京大学校长是谁"
  • "苹果公司市值"

这类查询中,"北京大学"和"苹果公司"都是实体,识别出来后能显著提升检索效果。

3. 客户支持与智能问答

在客服系统中,NER 可以从用户问题中识别:

  • 产品名称
  • 订单号
  • 时间
  • 地点

这样系统就能更快定位问题,提高自动回复和工单流转效率。

4. 专业领域应用

在垂直领域中,NER 的价值更明显:

  • 医疗:识别病历中的疾病、药物、检查项目
  • 金融:识别公司名、股票代码、金额、事件
  • 法律:识别合同中的参与方、日期、关键条款
  • 电商:识别品牌、商品、规格、用户提到的产品特征

可以说,NER 是很多知识抽取和知识图谱系统的入口。

四、NER 的技术实现

从方法发展路径来看,NER 大致经历了三类思路:

  • 规则匹配方法
  • 统计学习方法
  • 深度学习与预训练模型方法

1. 规则匹配方法

规则方法通常基于人工编写的规则、模板和词典来识别实体。

例如:

  • 用正则表达式匹配日期
  • 用货币符号匹配金额
  • 用词典匹配人名、地名、机构名

这类方法的特点是:

  • 实现简单
  • 可解释性强
  • 对固定格式信息效果不错

但局限也很明显:

  • 规则编写成本高
  • 泛化能力弱
  • 难以覆盖复杂语言现象

它更适合处理格式清晰、模式稳定的实体,如时间、日期、货币、编号等。

2. 统计学习方法

统计学习方法通常把 NER 看作一个序列标注问题。也就是说,句子中的每个词都要分配一个标签,例如:

  • B-PER:人名开始
  • I-PER:人名内部
  • O:非实体

这类方法的代表包括:

  • 隐马尔可夫模型(HMM)
  • 条件随机场(CRF)
  • 最大熵模型等

其中,CRF 曾经是 NER 的经典主力方法,因为它能较好利用上下文特征,也适合建模标签之间的依赖关系。

统计学习方法通常依赖人工设计特征,例如:

  • 当前词本身
  • 前后词
  • 词性
  • 词形特征
  • 是否大写
  • 是否在某个词典中

它们的优点是:

  • 在中小规模任务中仍然有效
  • 训练成本低于深度模型
  • 可解释性相对较好

缺点则是:

  • 依赖特征工程
  • 对复杂语义建模能力有限

3. 深度学习方法

随着神经网络方法的发展,NER 逐渐从"人工特征工程"转向"自动表示学习"。

比较常见的深度学习方法包括:

  • BiLSTM
  • BiLSTM-CRF
  • Transformer
  • BERT 及其变体

其中:

  • BiLSTM 可以从双向上下文中学习词表示
  • CRF 层可以帮助建模标签约束
  • BERT 则利用预训练语言模型提供更强的上下文表示能力

目前在大多数通用 NER 场景里,BERT 类方法已经成为主流。

五、使用 spaCy 做一个简单的 NER 示例

如果想快速体验 NER,可以直接使用现成工具,比如 spaCy。

示例代码如下:

python 复制代码
import spacy

nlp = spacy.load("en_core_web_sm")
text = "Apple is looking at buying U.K. startup for $1 billion"
doc = nlp(text)

for ent in doc.ents:
    print(ent.text, ent.label_)

输出可能类似于:

text 复制代码
Apple ORG
U.K. GPE
$1 billion MONEY

这个例子虽然很简单,但已经说明了 NER 的基本形式:

  • 先处理文本
  • 再自动找出实体边界
  • 最后给出类别标签

六、NER 的评估指标

NER 的评估重点,不只是有没有识别出实体,还包括:

  • 边界是否正确
  • 类型是否正确

因此最常见的指标仍然是:

1. 精确率(Precision)

精确率表示:模型识别出来的实体中,有多少是真的正确实体。

2. 召回率(Recall)

召回率表示:真实存在的实体中,有多少被模型成功识别出来。

3. F1 分数

F1 是精确率和召回率的调和平均,更适合综合衡量模型表现。

例如,假设测试集中一共有 100 个实体:

  • 系统识别出 90 个实体
  • 其中 80 个是正确的

那么:

  • Precision = 80 / 90 ≈ 89%
  • Recall = 80 / 100 = 80%
  • F1 ≈ 84%

在 NER 中,通常只有"边界和类型都完全正确"才算命中,因此评估往往比普通文本分类更严格。

七、NER 的常见挑战

虽然 NER 是经典任务,但要真正做好并不容易。

1. 实体边界识别

例如:

  • New York Times

到底应该整体识别成一个组织机构,还是拆成地点加其他词?这类边界问题在 NER 中非常常见。

2. 实体歧义

例如:

  • Apple

它可能表示水果,也可能表示公司。只有结合上下文,模型才能判断它的真实含义。

3. 领域适应问题

通用领域训练好的 NER 模型,拿去处理医疗、金融、法律文本时,效果往往会下降。因为这些领域有大量专有术语和不同表达习惯。

4. 未登录实体问题

很多新公司名、新产品名、新药物名在训练数据里并没有出现过,但模型在真实环境中仍然需要识别它们。

5. 嵌套实体与长实体

一些文本中会出现较长、结构复杂甚至嵌套的实体,这会让边界识别变得更难。

八、常见解决思路

针对上面的难点,实践中常见的改进方向包括:

1. 上下文建模

通过 BiLSTM、Transformer 或 BERT 等模型充分利用上下文信息,帮助消解歧义、提升边界判断能力。

2. 领域迁移学习

先在通用语料或通用 NER 数据集上预训练,再在专业领域数据上微调,可以显著提升垂直领域效果。

3. 规则与模型结合

很多工业系统不会只用单一模型,而是把:

  • 规则方法
  • 词典方法
  • 统计或深度学习模型

结合起来,兼顾稳定性和泛化能力。

4. 数据增强与标注规范

对于 NER 来说,数据质量非常重要。明确一致的标注规范,往往和模型本身一样关键。

九、实践练习建议

如果想真正把 NER 学会,我建议可以按下面的顺序练习。

练习1:使用现有工具快速体验

先安装 spaCy:

bash 复制代码
pip install spacy
python -m spacy download en_core_web_sm

然后尝试分析不同类型文本,例如:

  • 新闻文本
  • 科技论文摘要
  • 社交媒体短文本

这样可以直观感受到不同领域文本对 NER 的影响。

练习2:构建简单规则系统

对于格式明显的实体,可以先用规则法实现一个基础版 NER:

python 复制代码
import re

def rule_based_ner(text):
    dates = re.findall(r"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}", text)
    currencies = re.findall(r"\$\d+\.?\d*", text)
    return {"日期": dates, "货币": currencies}

sample = "会议定于12/15/2023举行,预算为$5000"
print(rule_based_ner(sample))

这个练习的重点,不是"规则法最先进",而是帮助我们理解:NER 首先是在识别文本中的特定片段。

练习3:尝试深度学习或预训练模型

等把规则法和现成工具跑通之后,可以继续尝试:

  • BiLSTM-CRF
  • BERT NER 微调

这样就能逐步理解现代序列标注模型是怎样工作的。

十、总结

命名实体识别(NER)是 NLP 中非常重要的一项基础任务。它的核心,是从文本中自动找出关键实体,并识别这些实体属于什么类别。

从方法发展来看:

  • 规则方法简单直观,适合固定模式信息抽取
  • 统计学习方法把 NER 形式化为序列标注问题
  • 深度学习和 BERT 等预训练模型进一步提升了上下文建模能力

从应用角度看,NER 几乎是很多信息抽取系统、知识图谱系统和行业 NLP 系统的基础模块。只要需要从文本里"找出关键对象",NER 大概率就是必须掌握的一步。

相关推荐
XS0301061 小时前
agent笔记(二)Langchain关键对象
人工智能·笔记·langchain
The Chosen One9851 小时前
【实物图讲解】硬盘的工作原理笔记
笔记
海海不掉头发1 小时前
【AI-大语言模型】医疗问诊AI大模型从0到1实战手册
人工智能·语言模型·自然语言处理
遗憾随她而去.2 小时前
react学习(一)
javascript·学习·react.js
Darkershadow2 小时前
蓝牙学习之通过OP CODE解析输入输出数据
学习·蓝牙·ble·mesh
不会聊天真君6472 小时前
介绍(gin笔记第一期)
笔记·gin
MRDONG12 小时前
从 Prompt 到智能体系统:Function Calling、Memory 与 Synthetic RAG 的全栈解析
人工智能·深度学习·神经网络·语言模型·自然语言处理·prompt
m0_716765232 小时前
数据结构--栈的插入、删除、查找详解
开发语言·数据结构·c++·经验分享·学习·青少年编程·visual studio
江苏世纪龙科技2 小时前
【世纪龙科技】给智能网联汽车教学装上一个“数字副驾”
学习