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 更像是在文本内部做"局部高亮标注"。它关注的不是一整句话属于什么类别,而是句子里哪些词或短语是重要实体,它们分别是什么类型。
这篇笔记将围绕以下几个问题展开:
- 什么是命名实体识别
- NER 在实际中有哪些应用
- 规则方法、统计学习和深度学习方法各自怎么做
- NER 的评估指标和常见难点是什么
- 如何快速上手做一个简单的 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 大概率就是必须掌握的一步。