命名实体识别 (NER)

从文本中自动识别和分类人名、地名、组织名等命名实体的自然语言处理技术。

命名实体识别 (NER: Named Entity Recognition) 是从文本中自动识别人名、地名、组织名、日期、金额等命名实体,并将其分类到预定义类别中的自然语言处理技术。例如,从 "张三于 2024 年加入了位于北京的 ABC 公司" 这句话中,可以提取出 "张三" 为人名、"2024 年" 为日期、"北京" 为地名、"ABC 公司" 为组织名。它是信息提取中最基本的任务之一,被定位为文本挖掘的起点。

要分成哪些类别并不是固定的,而是随所采用的标签体系而变化。日语方面有像关根的扩展命名实体层级那样细致分层的体系,而 spaCy 标准使用的 OntoNotes5 类别数量则少得多,属于较粗的分类。日语分析库 GiNZA 在官方文档中说明,它把基于扩展命名实体层级的抽取结果映射到 OntoNotes5 之后再输出。也就是说,即使用同一个模型处理同一段文本,返回的标签有多细也要看体系。

NER 技术大致可分为三代。早期采用基于规则的方法,使用正则表达式和词典进行模式匹配。之后 CRF (条件随机场) 和 HMM (隐马尔可夫模型) 等统计方法成为主流。截至 2026 年,基于 BERT 和 GPT 等预训练语言模型进行微调的深度学习方法报告出了最高的精度。

NER 是众多 NLP 应用的基础技术。在问答系统中,通过问题中的命名实体作为线索检索答案;在知识图谱构建中,NER 是提取实体间关系的必要前置步骤。从新闻文章的自动分类,到医疗文档中药品名和疾病名的提取,再到金融报告中公司名和数值的提取,NER 在各行各业都有广泛应用。spaCy、Stanford NER 和 Hugging Face 的 Transformers 库是代表性工具。

日语的 NER 有其特有的课题。由于日语不用空格分隔单词,面向日语的实现大多依赖形态素分析器,其分割精度会直接影响 NER 的结果。GiNZA 在官方文档中记载,词元化 (形态素分析) 的处理使用 SudachiPy;东北大学的日语 BERT (在 Hugging Face 上的仓库名为 tohoku-nlp/bert-base-japanese,旧为 cl-tohoku) 则在模型卡中说明,先用 MeCab 与 IPA 词典切分单词,再用 WordPiece 做子词切分。人名与普通名词的区分 ("松" 是人名还是植物名)、新词和缩写的应对、敬称的处理等也都是困难的问题。面向日语的 NER 模型中,GiNZA 以及使用上述日语 BERT 的模型被广泛采用。

一个常见的误解是认为 NER 可以完美运行,但实际上精度因领域而异。对于新闻文章等结构规范的文本,容易达到较高精度;而对于社交媒体帖子和聊天消息等非正式文本,精度往往会下降。此外,处理训练数据中不存在的新命名实体 (新成立的公司名、新人名等) 也是一个挑战,需要定期重新训练模型。

在阅读精度的数值时,需要连它是在哪一套标签体系下得出的值一并看清。GiNZA 官方文档公开的扩展命名实体抽取精度 (ENE) 为:ja_ginza (v5) 是 53.9,ja_ginza_electra 是 61.3,测试版的 ja_ginza_bert_large 是 70.8。同一份文档还明确写出,OntoNotes5 的类别数比扩展命名实体层级少得多 (更粗),因此映射到那里之后的抽取精度,一般会高于扩展命名实体下的数值。也就是说,"NER 的精度是多少" 这个提问,不指定体系与评测数据就定不出答案。在考虑引入的场合,现实的做法是不要把公开的数值直接当成自己用途的预期值,而是先用自己要处理的文档试一遍,并事先定好抽取遗漏与误检哪一边在业务上更痛。

从字符计数的角度来看,分析 NER 提取的命名实体的字符数分布有助于了解文本的信息密度和构成。命名实体丰富的文本表明具体信息充足,而命名实体较少的文本则暗示内容以抽象为主。将字符计数工具与 NER 结合使用,可以实现文本的定性分析。不过被抽取出的命名实体的件数与合计字符数,会受标签体系与分割粒度的左右。把 "ABC 公司" 当作 1 个组织名来取,还是只取 "ABC",件数与字符数都会随之改变。若要用于追踪趋势,前提就是持续用同一个模型与同一套体系来数。

分享这篇文章