一、命名实体识别简介
文本分类是一种对文本的宏观理解。
命名实体识别则,则是深入内部理解,学习如何精准是被出句子中的人名、地名等具有特定意义的词语或短语。是作为信息抽取、知识图谱构建、智能问答等众多高级应用的关键环节,NER的目标是从非结构化文本中,精准地定位并分类出业务所关心的实体对象。
1.1 什么是命名实体?
命名实体就是现实世界中事物的名称,是文本中哪些指向特定对象、具有可识别性和唯一性的词语或短语。NER任务就是找出这些名字并贴上预先定义好的标签。
常见实体类型:

词是否被视为实体,以及它属于哪种实体,完全由业务场景的需求来决定。
不同数据集的实体类型定义差异较大,实际项目应先明确标签集合。
1.2 NER的应用价值
文本分类是抓住主旨大衣,NER就是学会从文本中抓住重点,找出谁在那儿做了什么等关键信息。
NLP应用:
- 知识图谱构建: 海量文本中抽取实体以及其关系
- 信息抽取: 帮助机器从无结构文本中,整理出结构化信息
- 搜索引擎优化: 识别查询中的实体,提供精准、更结构化的搜索结果
- 智能问答/对话系统: 理解用户意图,从用户提问中抽取出关键实体,给出准确答案。
二、命名实体识别的应用场景
2.1 智能搜索
三、NER的数据标注
- 人工标注: 质量高且可靠,但是成本高、耗时长
- 大语言模型辅助标注: LLM对数据进行标注,然后再由人工进行校对和修正。 效率提高,但是需要人工审核。
- 半监督/迭代式标注:人工标注一部分数据来训练一个学生模型,接着用这个模型去预测大量未标注的数据,然后人工检查和修正这些预测结果;最后将修正后的数据加入训练集,训练处更强的“学生”模型,并重复以上的过程。
四、命名实体识别的方法
4.1 基于字典和规则的匹配
维护包含各种实体词汇的字典,然后在文本中进行字符串匹配。
优点:实现简单、速度快,对与特定、封闭领域的实体,准确率可能很高。
缺点:泛化能力差,无法识别出字典外的新词,规则维护成本高。
4.2 序列标注模型
常见的NER视线方式。 将NER任务转化为了一个序列标注问题——即未文本序列中的每一个token打上了一个预定义的标签。
4.2.1 方案一:Token级别的标签预测 (BMES/BIO)
每个Token预测其在实体中扮演的橘色,是序列标注最经典的思想。

BMES 常用于文本分词和命名实体识别。
模型结构: Token Embedding 层 -> 序列模型层 -> Token 分类层
- Token Embedding/Encoder表示: 可以使用静态nn.Embedding; 常见的是直接使用预训练Encoder(如BERT/RoBERTa/DeBERTa等)的上下文表示。
image.png
nn.Embeding 虽是科学系的向量表示,但是无法不同上下文语境的向量表示是一样的,所以是静态的。 预训练模型使用注意力机制,会包含上下文语境。
- Token Classify:
- Softmax: 对每个Token独立分类,类别总数为1(非实体)+ 实体类别数*4(以BMES为例)
- CRF: 在Softmax基础上,额外学习标签之间的注意概率,对整个序列进行全局最优解码。对RNN/CNN等编码器通常有效,但在强大预训练Encoder 如BERT上收益在不少数据集上以改变,是否采用以实验为准。
CRF与HMM区别
序列模型层?
- 缺点: 无法解决实体嵌套问题。 如北京,北京大学。 无法同事识别出地名和机构名。
4.2.2 方案二: 指针网络与片段网络
主要是为了解决实体嵌套问题,是当前处理复杂NER场景的主流方案之一。
- 片段网络:
- 思路: 枚举所有可能的连续片段,然后用一个分类器去判断每一个片段属于哪个实体类型(或是“非实体”)
- 优点: 理论上可以解决实体嵌套问题
- 缺点: 计算量大,样本不均衡(大多数都是非实体,政府样本严重失衡)
- 指针网络:
- 思路:为每个token训练多个独立的二分类器,分别判断是否是某类实体的开头以及某类实体的结尾。
- 候选生成:得到预测之后,后处理程序会按实体类型分别进行开头结尾配对。
-
缺点: 有边界模糊问题,比如北在北京和北京大学里,在北这个词进行分类的时候边界模糊,导致影响结果。
image.png
这种配对方式,可以生成所有可能的实体片段,包括嵌套的。
- 指针网络+判断网络:
- 思路: 结合两者的长处,形成一个高效的两阶段流程。
- 候选生成(指针网络):预测所有可能的实体开头和结尾
- 候选组合: 配对,获取所有获选片段
- 候选分类(片段网络):再使用片段网络对这些候选片段进行分类。
优点: 既能解决嵌套问题,有降低了计算量,是解决复杂NER有效方案。

4.2.3 方案三: 基于分词的分类
- 思路: 将NER任务分解为两步:先用分词模型将文本切分成词语,然后对每个词语进行分类
- 缺点: 依赖上游分词模型,分词出错,实体识别就不准确。
4.3 生成式模型
将NER任务统一到生成框架下,通过精心设计Prompt来指令模型完成任务。
- 思路: 将原始文本作为输入的一部分,让模型直接生成包含实体信息的结构化文本。
- 实现方式: 思路是设计不同的输入输出格式,将NER任务转化为一个seq2seq的生成任务。
- 方式一: 标准Encoder-Decoder模式
- 思路: 原始文本未给Encoder,训练Decoder生成格式化实体字符串。
- 方案二: 带实体清单提示的Encoder-Decoder
- 思路: 在原始文本后附加上下文提示,明确告知模型需要关注哪些实体类型,以约束模型的输出空间,提高准确性。
- 方案三:续写式生成(Decoder-only)
- 思路: 将输入和输出拼接成一个完整的字符串,训练一个GPT风格的自回归模型来续写出实体。
- 优缺点:
优点: 统一的生成框架: 实体抽取任务完全转化为一个文本到文本的任务,单个模型能直接生成包含复杂结构的结果,输出形式非常灵活。
Few-shot/Zero-shot强大的LLMs能极大减少数据标注成本,很多场景下无序训练就能获得不错的效果。 - 缺点: 输出不稳定,幻觉问题
- 方式一: 标准Encoder-Decoder模式
五、项目实现思路
数据处理-> 模型构建-> 训练、评估与持久化
5.1 数据处理与增强
- 主要流程:
- 分词/分Token: 原始文本切分为Token序列
- Token与ID映射: 构建词表,将每个Token映射为一个唯一的数字ID
- 标签与ID映射: 构建标签表,将B-LOC,I-LOC等映射为唯一的数字ID
- 数据增强: 标注数据有限的情况下,通过代码创造一个新的、合理的数据,以提升模型的泛化能力和鲁棒性
- 实体替换: 同类型实体的词典,随机替换原始文本中的实体
- 引入噪声: 模拟真实输入数据中的错误,随机地对文本进行微小改动
- 随机遮盖:训练时随机将文本中的一小部分(非实体)词元替换为<UNK>未知标记; 目的是为了在部分确实的情况下依赖上下文做出判断,提升模型泛化能力
- 拼音替换: 将少量中文词替换为拼音,模拟弱规范输入。
在医疗等强约束领域做实体替换时,应确包替换后的样本不破坏实体间的真是语义关系,否则引入反效果。
5.2 模型构建与迁移学习
NER模型的经典组合:Embedding层+ 动态词向量编码器(BERT,Bi-LSTM等)+ Token分类层(如全连接层+Softmax/CRF)。
输入: [Batch_size, Seq_len] 内容是tokenId
输出:[Batch_size,Seq_len, Num_classes] 代表每个token在所有num_classes个类别上的置信度得分。
迁移学习与微调:
通常使用通用预训练好的模型作为初始化参数,常见微调策略:
- 冻结参数: 预训练参数冻结,只训练新增的分类层,速度快但效果受限
- 同等处理: 一起学习,有相同学习率和更新逻辑进行训练
- 差分学习率微调: 为迁移过来的参数设置非常小的学习率,保留通用知识基础上向任务靠近,新增参数设置正常学习率使其快速收敛。
- 分层冻结/部分冻结:例如仅冻结BERT的前所感层,让后几层与分类头共同更新,在算力有限或数据较少时是较好的这种。
5.3 训练、评估与持久化
训练循环: 迭代train_dataloader, 在每个批次上执行模型前向传播、计算损失、反向传播和参数更新。
-
评估循环与指标:
- 迭代 eval_dataloader, 计算模型在验证集上的性能
- Token级别指标: 计算Token分类的准确率、F1值,用于监控训练过程。
- 实体级别指标(核心):计算实体片段的精确率、召回率和F1值。很广效果的核心标准。
-
标签序列-> 实体片段
- 从左到右扫描标签序列,遇到B-T开始新片段
- 在BMES中,M-T继续片段,E-T结束片段;S-T表示单字实体;O表示非实体。
- 在BIO中,I-T继续片段,遇到类型不一致或O时关闭当前片段
- 记录每个片段(start,end,type)边界与类型,用于标注集对齐,计算评估回指标。
持久化: 评估过程中,根据实体级别的评估指标结果(如F1值达到新高),决定将当前模型参数保存到磁盘。
总结
NER: 目的是为了微观理解,精准识别出句子中的人名、地名等特定词语或短语。
应用: 知识图谱,信息抽取,搜索引擎优化,智能问答等 意图识别
NER数据标注: 人工标注、大语言模型辅助标注,半监督/迭代式标注(学生模型)
实现方法:
a. 基于字典和规则
b. 序列标注模型:Token级别标签预测,指针网络与片段网络,基于分词的分类
c. 生成式模型: Encoder-Deocder, Decoder-only等。设计prompt来指令模型完成任务。项目实现:
5.1 数据处理与增强:符号化过程,数据增强(实体替换,拼音替换,引入噪声,随机覆盖)
5.2 模型构建与迁移学习
5.3 训练、评估与持久化
评估指标: eval性能, token级别(分类准确率,F1等),实体级别(精确率、召回率和F1)

