命名实体识别

1. 问题定义

广义的命名实体识别是指识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、日期、货币和百分比)命名实体。但实际应用中不只是识别上述所说的实体类,还包括其他自定义的实体,如角色、菜名等等。

2. 解决方式

命名实体识别其本质是一个序列标注问题,序列标注就是对给定文本中每一个字符打上标签。标签的格式可以分为BO,BIO和BIEO三种形式。对于数据集较少的情况,建议使用BO,如果有大量数据可以选用BIEO格式。
命名实体识别的解决方案有三种:基于词典规则匹配、基于特征的机器学习方式和基于深度学习的方式。目前基于深度学习的命名实体是主流方式,现在做的实体识别也是基于深度学习方式。
评测指标
识别识别任务中的评测指标是F1,F1 = 2 * (precison + recall) / (precision * recall),precision(精准率)是指在所有预测出的标签中正确的label个数, 召回是指在真实的标签中预测正确的label个数,这是整体的准召,如果想细致的分析,可以求每种label的准召及F1

3. 基于深度学习的命名实体识别

3.1 经典结构

Neural Architectures for Named Entity Recognition 经典论文,2016NAACL
该论文主要提出两种结构,一种是LSTM-CRF,另一种是 Stack-LSTM,该论文中的输入主要是时word embedding

.

LSTM后面为什么接CRF?
如何理解LSTM后接CRF?简单说就是LSTM可以学习到上下文特征,CRF可以学习到label的特征,比如状态转移矩阵,tensorflow中训练时也是获得转移矩阵。

3.2 字符级别结构

这种是以字符作为基本输入,在char embedding基础上经过LSTM得到字符的label

3.3 字符和词融合的结构

在这种结构中根据对字符的抽取方式可以分为两种:一是对字符表示层用卷积网络进行提取特征,从而获取基于字符的词语表示,第二种方式是对词语的字符表示用BiLstm进行学习得到词语的表示,然后将词语的embedding与字符学习到的embeddig进行拼接作为词语的基本表示.

3.4 字符、词和词缀融合的结构

Deep Affix Features Improve Neural Named Entity Recognizers

3.5 加入分词信息

以上四种结构是该论文A Survey on Recent Advances in Named Entity Recognition from DeepLearning models提到的模型结构,自己在做中文任务时又有一些的感受。
针对中文NER,LSTM-CRF也是一个标准的模型结构,根据任务选择输入时word embedding还是char embedding,对于中文来说,多数还是以char embdding,因为分词可能会将一些实体给切分开,后续就是在embedding的基础上使用BiLSTM进行学习上下文特征,最后接一层CRF。
加入分词信息
Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning
思想同上文中提到的字符和词融合的结构类似,这种方式是使用分词后,对每一个字符都使用BIES的标记格式进行标记,这就是分词信息,这种分词信息使用4*20的矩阵进行初始化,并通过loop-up方式查找每个字符的分词信息拼接到char embedding后面作为输入,不论是直接使用lstm还是使用bert,加入分词信息效果均有提升。

3.6 基于字符的部首来做中文命名实体识别

Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition.
2016年中科院,发布地方不详。

本文提出了基于字符的部首来做中文命名实体识别,模型结果挺简单.
第一步获取字符的embedding,这一步是通过对字符预训练词向量和使用bi-lstm对部首学习到的向量拼接得到.
第二步,就是通用的bi-lstm+crf,创新之处就是使用了部首编码那一步。

3.7 BERT

使用bert的产出的字符序列作为输入,bert中是直接对每个字符向量进行分类,我使用同上面一样的模型对字符序列分别经过LSTM和CRF,其实不知道LSTM有没有用,但是在加了之后好像效果是有点提升,但是不太理解,明明bert已经使用transform将上下文特征学的这么好了,lstm的作用几乎就不存在了吧?

3.8 ERNIE

其中也尝试了百度的ernie,但是在预测时很乱,不知道自己哪里改错了,放弃

4.总结

在意图识别和槽位填充时,学习了命名识别实体的方式,虽然之前也有了解,没有具体的写代码实现过。这次通过自己的调研与尝试,了解了深度学习在命名实体识别任务的基本架构: embedding作为输入,使用LSTM提取上下文特征,使用CRF获得label的转移矩阵,即对label的最后输出做一个限制。可做的优化点有:1、对embedding进行增强特征,比如char embedding与word embedding进行拼接,加入分词信息,加入部首信息等;2、多任务学习,经试验对意图和槽位联合训练比两个任务分别学习效果更明显。
后续研究内容是调研tensorflow中crf实现过程。

【参考文献】

[1].Neural Architectures for Named Entity Recognition
[2] Neural Architectures for Named Entity Recognition
[3] A Survey on Recent Advances in Named Entity Recognition from DeepLearning models
[4] Improving Named Entity Recognition for Chinese Social Mediawith Word Segmentation Representation Learning
[5] Character-Based LSTM-CRF with Radical-LevelFeatures for Chinese Named Entity Recognition

【NER】对命名实体识别(槽位填充)的一些认识的更多相关文章

  1. CS224d 单隐层全连接网络处理英文命名实体识别tensorflow

    什么是NER? 命名实体识别(NER)是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词等.命名实体识别是信息提取.问答系统.句法分析.机器翻译等应用领域的重要基础工具,作为结构化 ...

  2. 命名实体识别,使用pyltp提取文本中的地址

    首先安装pyltp pytlp项目首页 单例类(第一次调用时加载模型) class Singleton(object): def __new__(cls, *args, **kwargs): if n ...

  3. 使用Standford coreNLP进行中文命名实体识别

    因为工作需要,调研了一下Stanford coreNLP的命名实体识别功能. Stanford CoreNLP是一个比较厉害的自然语言处理工具,很多模型都是基于深度学习方法训练得到的. 先附上其官网链 ...

  4. 使用哈工大LTP进行文本命名实体识别并保存到txt

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...

  5. NLP入门(五)用深度学习实现命名实体识别(NER)

    前言   在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...

  6. 『深度应用』NLP命名实体识别(NER)开源实战教程

    近几年来,基于神经网络的深度学习方法在计算机视觉.语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展.在NLP的关键性基础任务—命名实体识别(Named Entity Recogni ...

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

    神经网络结构在命名实体识别(NER)中的应用 近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognit ...

  8. NLP入门(四)命名实体识别(NER)

      本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER).   命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...

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

    命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的 ...

随机推荐

  1. input file标签限制上传文件类型

    用 input 的file类型标签上传文件,有时需要限制上传文件类型,添加accept属性可以实现 <input type="file" accept="image ...

  2. 2017.10.6 国庆清北 D6T2 同余方程组

    题目描述 求关于x 的同余方程组 x%a1 = b1 x%a2 = b2 x%a3 = b3 x%a4 = b4 的大于等于0 的最小整数解. 输入输出格式 输入格式: 一行8 个整数,表示a1; b ...

  3. 19、Executor原理剖析与源码分析

    一.原理图解 二.源码分析 1.Executor注册机制 worker中为Application启动的executor,实际上是启动了这个CoarseGrainedExecutorBackend进程: ...

  4. golang orm

    package main import ( "fmt" "github.com/astaxie/beego/orm" _"github.com/go- ...

  5. AWS服务器上安全组端口设置和访问的问题

    在搭建测试环境时使用AWS服务器环境,AWS EC2需要设置安全组开放端口,如果端口未进行授权则不允许访问,后台授权界面如下: 1.查看某个端口是否在AWS后台被开放,并允许访问: netstat - ...

  6. Nginx模块说明

    一.Nginx内置模块 -–prefix= #指向安装目录 -–sbin-path #指向(执行)程序文件(nginx) -–conf-path= #指向配置文件(nginx.conf) -–erro ...

  7. sass登陆页面实例

    sass登陆页面实例 一.总结 一句话总结: sass使用非常方便:使用就是将sass转化为css引入,并且动态监听让sass转化为css,可以很方便的所见即所得 1.sass安装? npm就可以按照 ...

  8. windows mysql绿色版配置Mysql5.7.X

    MySQL绿色版安装,很简单按照下面的方式很快就可以实现了. 1.下载地址 https://dev.mysql.com/downloads/mysql/ 百度网盘链接:https://pan.baid ...

  9. Socket: Java Socket 几个重要的TCP/IP选项解析(转)

    Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: publ ...

  10. win10: ctrl+shift不能切换输入法的问题

    习惯了使用Ctrl+Shift切换输入法,乍然切换到Win10,很不适应,可用以下方法修改之. 1. 点击开始菜单,点击“设置”按钮   2. 选择“时间与语言” 3. 选择“区域和语言”按钮,查看右 ...