【命名实体识别(NER)】(1):命名实体识别综述

article/2025/9/19 7:51:06

什么是命名实体识别?

命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是自然语言处理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代性强的实体,通常包括 人名地名机构名日期时间专有名词等。通常包括两部分:

  • 实体的边界识别
  • 确定实体的类型(人名、地名、机构名或其他)

NER系统就是从非结构化的输入文本中抽取出上述实体,并且可以按照业务需求识别出更多类别的实体,比如产品名称、型号、价格等。因此实体这个概念可以很广,只要是业务需要的特殊文本片段都可以称为实体。

学术上NER所涉及的命名实体一般包括3大类(实体类,时间类,数字类)7小类(人名、地名、组织机构名、时间、日期、货币、百分比)

实际应用中,NER模型通常只要识别出人名、地名、组织机构名、日期时间即可,一些系统还会给出专有名词结果(比如缩写、会议名、产品名等)。货币、百分比等数字类实体可通过正则搞定。另外,在一些应用场景下会给出特定领域内的实体,如书名、歌曲名、期刊名等。

命名实体识别的价值和应用领域

命名实体识别是NLP中一项基本性的关键任务,是关系抽取事件抽取知识图谱信息提取问答系统句法分析机器翻译等诸多NLP任务的基础,被广泛应用在自然语言处理领域,同时在自然语言处理技术走向实用化的过程中占有重要地位。

  • 事件检测: 地点、时间、人物是事件的基本构成部分,在构建事件的摘要时,可以突出相关人物、地点、单位等。在事件搜索系统中,相关的人物、时间、地点可以作为索引关键词。通过事件的几个构成部分之间的关系,可以从语义层面更详细地描述事件。
  • 信息检索: 命名实体可以用来提高和改进检索系统的效果,当用户输入“重大”时,可以发现用户更想检索的是“重庆大学”,而不是其对应的形容词含义。此外,在建立倒排索引的时候,如果把命名实体切成多个单词,将会导致查询效率降低。此外,搜索引擎正在向语义理解、计算答案的方向发展。
  • 语义网络: 语义网络中一般包括概念实例及其对应的关系,例如“国家”是一个概念,中国是一个实例,“中国”是一个“国家”表达实体与概念之间的关系。语义网络中的实例有很大一部分是命名实体。
  • 机器翻译: 命名实体的翻译(尤其像人名、专有名词、机构名等),常常会有某些特殊的翻译规则(例如中国的人名翻译成英文时要使用名字的拼音来表示,有名在前姓在后的规则),而普通的词语要翻译成对应的英文单词。准确识别出文本中的命名实体,对提高机器翻译的效果有直接的意义。
  • 问答系统: 准确识别出问题的各个组成部分问题的相关领域相关概念是问答系统的重点和难点。目前,大部分问答系统都只能搜索答案,而不能计算答案。搜索答案进行的是关键词的匹配,用户根据搜索结果人工提取答案,而更加友好的方式是把答案计算好呈现给用户。问答系统中有一部分问题需要考虑到实体之间的关系,例如“美国第四十五届总统”,目前的搜索引擎会以特殊的格式返回答案“特朗普”。

命名实体识别的研究现状和难点

命名实体识别当前并不是一个大热的研究课题,因为学术界部分学者认为这是一个已经解决了的问题,但是也有学者认为这个问题还没有得到很好地解决,原因主要有:

  • 命名实体识别只是在有限的文本类型(主要是新闻语料中)和实体类别(主要是人名、地名)中取得了效果
  • 与其他信息检索领域相比,实体命名评测语料较小,容易产生过拟合
  • 命名实体识别更侧重高召回率,但在信息检索领域,高准确率更重要
  • 通用的识别多种类型的命名实体的系统性很差。

同时,中文的命名实体识别与英文的命名实体识别相比,挑战更大,目前未解决的难题更多。英语中的命名实体具有比较明显的形式标志,即实体中的每个词的第一个字母要大写,所以对实体边界的识别相对容易,任务的重点是确定实体的类别。和英语相比,汉语命名实体识别任务更加复杂,而且相对于实体类别标注任务而言,实体边界的识别更加困难。汉语命名实体识别的难点主要存在于:

  • 汉语文本没有类似英文文本中空格之类的显式标示词的边界标示符,命名实体识别的第一步就是确定词的边界,即中文分词
  • 汉语分词和命名实体识别互相影响
  • 除了英语中定义的实体,外国人名译名地名译名是存在于汉语中的两类特殊实体类型
  • 现代汉语文本,尤其是网络文本,常出现中英文交替使用,此时汉语命名实体识别的任务还包括识别其中的英文命名实体
  • 不同的命名实体具有不同的内部特征,不可能用一个统一的模型来刻画所有的实体内部特征
  • 现代汉语日新月异的发展给命名实体识别也带来了新的困难:(1)标注语料老旧,覆盖不全。譬如说,近年来起名字的习惯用字与以往相比有很大的变化,以及各种复姓识别、国外译名、网络红人、流行用语、虚拟人物和昵称的涌现。(2)命名实体歧义严重,消歧困难

命名实体识别解决方案

命名实体识别(NER)一直是NLP领域中的研究热点,从早期基于词典和规则的方法,到传统机器学习的方法,到近年来基于深度学习的方法,命名实体识别(NER)研究进展的大概趋势大致如下图所示:
在这里插入图片描述

基于规则和字典的方法

基于规则的方法多采用语言学专家手工构造规则模板,选用特征包括统计信息标点符号关键字指示词和方向词位置词(如尾字)中心词等方法,以模式和字符串相匹配为主要手段,这类系统大多依赖于知识库和词典的建立。基于规则和词典的方法是命名实体识别中最早使用的方法,它们依赖于手工规则的系统,都使用命名实体库,而且对每一个规则都赋予权值。当遇到规则冲突的时候,选择权值最高的规则来判别命名实体的类型。一般而言,当提取的规则能比较精确地反映语言现象时,基于规则的方法性能要优于基于统计的方法。但基于规则和字典的方法也有其缺陷:

  • 规则往往依赖于具体语言、领域和文本风格,制定规则的过程耗时且难以涵盖所有的语言,特别容易产生错误,系统可移植性差,对于不同的系统需要语言学专家重新书写规则
  • 代价太大,存在系统建设周期长、需要建立不同领域知识库作为辅助以提高系统识别能力等问题

基于统计机器学习的方法

基于统计机器学习的方法主要包括:隐马尔可夫模型(Hidden Markov Moder, HMM)最大熵模型(Maximum Entropy Model, MEM)支持向量机(Support Vector Machine, SVM)条件随机场(Conditional Random Field, CRF)等等。在基于机器学习的方法中,NER被当作序列标注问题。利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。NER 任务中的常用模型包括生成式模型HMM、判别式模型CRF等。条件随机场(Conditional Random Field,CRF)是NER目前的主流模型。

条件随机场(CRF) 的目标函数不仅考虑输入的状态特征函数,而且还包含了标签转移特征函数。在训练时可以使用SGD学习模型参数。在已知模型时,给输入序列求预测输出序列即求使目标函数最大化的最优序列,是一个动态规划问题,可以使用维特比算法进行解码。CRF的优点在于其为一个位置进行标注的过程中可以利用丰富的内部及上下文特征信息。
在这里插入图片描述

在传统机器学习方法中,常用的特征如下:
在这里插入图片描述

四种学习方法的优缺点分析

  • 最大熵模型结构紧凑,具有较好的通用性,主要缺点是训练时间复杂性非常高,有时甚至导致训练代价难以承受,而且最大熵模型需要归一化计算,导致开销比较大
  • 条件随机场为命名实体识别提供了一个特征灵活、全局最优的标注框架,但同时存在收敛速度慢、训练时间长的问题
  • 一般说来,最大熵和支持向量机在正确率上要比隐马尔可夫模型高一些,但是隐马尔可夫模型在训练和识别时的速度要快一些,主要是由于在利用Viterbi算法求解命名实体类别序列的效率较高
  • 隐马尔可夫模型更适用于一些对实时性有要求以及像信息检索这样需要处理大量文本的应用,如短文本命名实体识别

基于统计的方法对特征选取的要求较高,需要从文本中选择对该项任务有影响的各种特征,并将这些特征加入到特征向量中。依据特定命名实体识别所面临的主要困难和所表现出的特性,考虑选择能有效反映该类实体特性的特征集合。主要做法是通过对训练语料所包含的语言信息进行统计和分析,从训练语料中挖掘出特征。有关特征可以分为具体的单词特征上下文特征词典及词性特征停用词特征核心词特征以及语义特征等。基于统计的方法对语料库的依赖也比较大,而可以用来构建和评估命名实体识别系统的大规模通用语料库又比较少,这是此种方法的又一大制约。

基于深度学习的方法

NN/CNN-CRF模型

《Natural language processing (almost) from scratch》 是较早使用神经网络进行NER的代表工作之一。在这篇论文中,作者提出了窗口方法与句子方法两种网络结构来进行NER。这两种结构的主要区别就在于窗口方法仅使用当前预测词的上下文窗口进行输入,然后使用传统的NN结构;而句子方法是以整个句子作为当前预测词的输入,加入了句子中相对位置特征来区分句子中的每个词,然后使用了一层卷积神经网络CNN结构。
在这里插入图片描述

在训练阶段,作者也给出了两种目标函数:

  • 词级别的对数似然,即使用softmax来预测标签概率,当成是一个传统分类问题
  • 句子级别的对数似然,其实就是考虑到CRF模型在序列标注问题中的优势,将标签转移得分加入到目标函数中。后来许多相关工作把这个思想称为结合了一层CRF层,所以我这里称为NN/CNN-CRF模型。
    在这里插入图片描述

在作者的实验中,上述提到的NN和CNN结构效果基本一致,但是句子级别似然函数即加入CRF层在NER的效果上有明显提高。

RNN-CRF模型

借鉴上面的CRF思路,出现了一系列使用RNN结构并结合CRF层进行NER的工作。模型结构如下图:
在这里插入图片描述
它主要有Embedding层(主要有词向量,字符向量以及一些额外特征),双向RNN层,tanh隐层以及最后的CRF层构成。它与之前NN/CNN-CRF的主要区别就是他使用的是双向RNN代替了NN/CNN。这里RNN常用LSTM或者GRU。实验结果表明RNN-CRF获得了更好的效果,已经达到或者超过了基于丰富特征的CRF模型,成为目前基于深度学习的NER方法中的最主流模型。在特征方面,该模型继承了深度学习方法的优势,无需特征工程,使用词向量以及字符向量就可以达到很好的效果,如果有高质量的词典特征,能够进一步获得提高。

近期工作

Attention-based

《Attending to Characters in Neural Sequence Labeling Models》 该论文还是在RNN-CRF模型结构基础上,重点改进了词向量与字符向量的拼接。使用attention机制将原始的字符向量和词向量拼接改进为了权重求和,使用两层传统神经网络隐层来学习attention的权值,这样就使得模型可以动态地利用词向量和字符向量信息。实验结果表明比原始的拼接方法效果更好。
在这里插入图片描述
另一篇论文《Phonologically aware neural model for named entity recognition in low resource transfer settings》,在原始BiLSTM-CRF模型上,加入了音韵特征,并在字符向量上使用attention机制来学习关注更有效的字符,主要改进如下图:
在这里插入图片描述

少量标注数据

对于深度学习方法,一般需要大量标注数据,但是在一些领域并没有海量的标注数据。所以在基于神经网络结构方法中如何使用少量标注数据进行NER也是最近研究的重点。其中包括了迁移学习《Transfer Learning for Sequence Tagging with Hierarchical Recurrent Networks》和半监督学习。这里我提一下最近ACL2017刚录用的一篇论文《Semi-supervised sequence tagging with bidirectional language models》。该论文使用海量无标注语料库训练了一个双向神经网络语言模型,然后使用这个训练好的语言模型来获取当前要标注词的语言模型向量(LM embedding),然后将该向量作为特征加入到原始的双向RNN-CRF模型中。实验结果表明,在少量标注数据上,加入这个语言模型向量能够大幅度提高NER效果,即使在大量的标注训练数据上,加入这个语言模型向量仍能提供原始RNN-CRF模型的效果。整体模型结构如下图:
在这里插入图片描述

总结

对于统计机器学习方法而言,将 NER 视作序列标注任务,利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。常用的应用到 NER 任务中的模型包括生成式模型HMM、判别式模型CRF等。比较流行的方法是特征模板 + CRF的方案。

随着硬件能力的发展以及词的分布式表示(word embedding)的出现,神经网络成为可以有效处理许多NLP任务的模型。通过将神经网络与CRF模型相结合的NN/CNN/RNN-CRF模型成为了目前NER的神经网络领域的主流模型。基于神经网络结构的NER方法,继承了深度学习方法的优点,无需大量人工特征。只需词向量和字符向量就能达到主流水平,加入高质量的词典特征能够进一步提升效果。

近年来,命名实体识别在多媒体索引、半监督和无监督的学习、复杂语言环境和机器翻译等方面取得大量新的研究成果。随着半监督的学习和无监督的学习方法不断被引入到这个领域,采用未标注语料集等方法将逐步解决语料库不足的问题,将会成为未来NER研究领域的热点和重点。

在后续博客中,我会陆续更新利用HMM、CRF、神经网络+CRF的解决方案解决中文领域命名实体识别任务。请随时关注。

参考资料

  • 《统计自然语言处理》

  • 神经网络结构在命名实体识别(NER)中的应用

  • 一文详解深度学习在命名实体识别(NER)中的应用

  • DL4NLP —— 序列标注:BiLSTM-CRF模型做基于字的中文命名实体识别


http://chatgpt.dhexx.cn/article/StD6bCGk.shtml

相关文章

一文读懂命名实体识别

本文对自然语言基础技术之命名实体识别进行了相对全面的介绍,包括定义、发展历史、常见方法、以及相关数据集,最后推荐一大波 Python 实战利器,并且包括工具的用法。 01 定义 先来看看维基百科上的定义:Named-entity recognition …

自然语言处理——命名实体识别

命名实体识别 命名实体识别(Named Entity Recognition,NER),指识别文本中具有特定意义的实体,包括人名、地名、机构名、专有名词等。 常用的方法如下。 数据集一览 数据集下载地址 提取码:s249 看一下我们的数据集,分为句子…

NLP算法-命名实体识别

命名实体识别 什么是命名实体识别?NER 研究的命名实体NER研究目前所遇到的问题命名实体识别的主要方法: 基于条件随机场的命名实体识别常用的NER模型1、Spacy NER 模型2、斯坦福命名实体识别器 中文人名识别中文姓名的构成规律姓名的上下文环境分析Hanlp…

命名实体识别(NER)综述

本文是中文信息处理课程的期末考核大作业&#xff0c;对于自然语言处理主流任务的调研报告 ———————————————— 版权声明&#xff1a;本文为CSDN博主「<Running Snail>」的原创文章&#xff0c;遵循CC 4.0 BY-SA版权协议&#xff0c;转载请附上原文出处链接…

命名实体识别

转载https://blog.csdn.net/fendouaini/article/details/81137424 link 作者&#xff1a;Walker 目录 一&#xff0e;什么是命名实体识别 二&#xff0e;基于NLTK的命名实体识别 三&#xff0e;基于Stanford的NER 四&#xff0e;总结 一 、什么是命名实体识别&#xff1f; 命名…

NER入门:命名实体识别介绍及经验分享

每天给你送来NLP技术干货&#xff01; 来自&#xff1a;AI有温度 大家好&#xff0c;我是泰哥。本篇文章从什么是命名实体讲到为什么要做命名实体&#xff0c;然后讲到了NER数据处理及建模经验&#xff0c;对于做NER的同学&#xff0c;不论你是新手还是老手都非常值得一看&…

命名实体识别主要方法

命名实体识别主要方法 命名实体识别&#xff08;Named Entity Recognition&#xff0c;简称NER&#xff09;&#xff0c;又称作“专名识别”&#xff0c;是自然语言处理中的一项基础任务&#xff0c;应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代性强的实体…

【实体识别】深入浅出讲解命名实体识别(介绍、常用算法)

本文收录于《深入浅出讲解自然语言处理》专栏&#xff0c;此专栏聚焦于自然语言处理领域的各大经典算法&#xff0c;将持续更新&#xff0c;欢迎大家订阅&#xff01;个人主页&#xff1a;有梦想的程序星空个人介绍&#xff1a;小编是人工智能领域硕士&#xff0c;全栈工程师&a…

命名实体识别(二)——基于条件随机场的命名实体识别

一、条件随机场 首先&#xff0c;我们看一下条件随机场的定义&#xff1a;在给定一组输入序列的条件下&#xff0c;另一组输出序列的条件概率分布模型。设X和Y是联合随机变量&#xff0c;若随机变量Y构成一个无向图G(V,E)表示的马尔科夫模型&#xff0c;则其条件概率分布P(Y|X…

正则表达式字符数字匹配

基础知识 数字&#xff1a;[0-9]或者[\d],不止一个就用 字母&#xff1a;[a-z]或者[A-Z]区分大小写 |&#xff1a;或的意思 工具 在线测试网站 拿不准的先可以测试一下&#xff0c;输入输出如下&#xff1a; 实战 改名字&#xff0c;其中注意正则式的小括号括起来的才可…

1.3 正则表达式【匹配数字】

数字匹配符 \d \d 可以配置 0到9的整数&#xff0c;等价于上一节 中的 [0-9] 。 测试实例 被匹配字符串 private static final String test1 "a12adf31d2tt"; 匹配公式1 匹配公式&#xff1a; String expression1 "\\d"; 匹配结果&#xff1a; 匹…

1.4 正则表达式【匹配非数字】

数字匹配符 \D \D 可以配置非数字&#xff0c;等价于上一节 中的 [^0-9] 。 测试实例 被匹配字符串 private static final String test1 "a12adf31d2tt"; 匹配公式3 匹配公式 String expression3 "\\D"; 匹配结果 匹配公式4 匹配公式 String exp…

1.6 正则表达式【匹配非字母和数字】

字母和数字匹配符 \W \W 可以配置 非字母和数字&#xff0c;等价于 [^a-zA-Z0-9] 。 测试实例 被匹配字符串 private static final String test1 "a12.a,df3.1d-2tt.*"; 匹配公式3 匹配公式 String expression3 "\\W"; 匹配结果 匹配公式4 匹配…

Python正则表达式匹配字符串中的数字

导读这篇文章主要介绍了Python正则表达式匹配字符串中的数字&#xff0c;本文通过实例代码给大家介绍的非常详细&#xff0c;具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用“\d”匹配全数字 代码&#xff1a; import re zen "Arizona 479, 501, 870. Carliforn…

正则表达式匹配数字、字母和汉字等各类汇总

最近在开发中遇到一个需求是只匹配字母和汉字&#xff0c;于是在网上找了一个比较全的记录一下。日后再用~ 正则表达式来匹配规范一段文本中的特定种类字符&#xff0c;下面是对常用的正则匹配做了一个归纳整理。 1、匹配中文:[\u4e00-\u9fa5] 2、英文字母:[a-zA-Z] 3、数字…

类加载机制、类加载顺序

1 类加载顺序 Java 的类加载过程可以分为 5 个阶段&#xff1a;载入、验证、准备、解析和初始化。这 5 个阶段一般是顺序发生的&#xff0c;但在动态绑定的情况下&#xff0c;解析阶段发生在初始化阶段之后。 1&#xff09;Loading&#xff08;载入&#xff09; JVM 在该阶段…

深入理解——Java类加载机制

我们知道&#xff0c;我们写的java文件是不能直接运行的&#xff0c;我们可以在IDEA中右键文件名点击运行&#xff0c;这中间其实掺杂了一系列的复杂处理过程。这篇文章&#xff0c;我们只讨论我们的代码在运行之前的一个环节&#xff0c;叫做类的加载。按照我写文章的常规惯例…

理解类加载机制

一般来说&#xff0c;我们日常的开发都是在IDE上进行的&#xff0c;这能让我们将更多的注意力放在业务的处理上&#xff0c;但是久而久之我们就忘记了其底层的实现原理。这是一把双刃剑&#xff0c;我们看不到底层实现&#xff0c;但是当有某些问题出现的时候&#xff0c;也只有…

谈谈类加载机制

前言 类的加载其实就是将.class文件加载的jvm的内存之中。在JVM中并不是一次性把所有的文件都加载到&#xff0c;而是一步一步的&#xff0c;按照需要来加载。JVM启动时会通过不同的类加载器加载不同的类&#xff0c;而且同一个类也不可能由多个加载器来进行加载。正是这种分级…

【JVM】详解类加载机制

JVM的类加载机制 一、类的生命周期二、类加载的过程1.加载2.连接3.初始化 三、类加载器的介绍3.1 启动类加载器&#xff08;根类加载器/引导类加载器&#xff09;&#xff08;Bootstrap ClassLoader&#xff09;3.2 扩展类加载器3.3 系统类加载器 四、双亲委派模型4.1 双亲委派…