命名实体识别

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. php技能树---大神的进阶之路

    PHP7 迎来巨大的性能提升,又一次回到关注的焦点.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段 ...

  2. JSON字符串 拼接与解析

    常用方式: json字符串拼接(目前使用过两种方式): 1.运用StringBuilder拼接 StringBuilder json = new StringBuilder(); json.appen ...

  3. Luogu4931 情侣?给我烧了!(加强版)【生成函数】

    题目链接:洛谷 大家一起 日 ♂ % EI 设\(D_i\)表示\(k=0\)时的答案.那么 \[ f(n,k)=\binom{n}{k}^2D_{n-k}k!2^k \] 意义是选择\(k\)对情侣 ...

  4. Vic-软件测试-开始软件测试

    前言 大家好,我是 Vic,今天给大家带来开始软件测试的概述,希望你们喜欢 软件测试 软件测试的基本概念.方法.常用测试工具的使用 常用测试工具的使用性能自动化测试工具:jmeter.loadrunn ...

  5. XOR Clique(按位异或)

    XOR Clique(按位异或): 传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4057 准备:异或:参加运算的两 ...

  6. 生活中需要一台mac本子

    用了好多年的windows系统,各种快捷键玩得飞起.当时对mac笔记本的印象就是. mac本子好高大上,搞设计的人才会去用的.(这个也是我听其他人说的) 在当时公司搞IOS开发的人中,面对这个高大上的 ...

  7. 线程池(3)-参数-实现ThreadFactory

    1.介绍 ThreadFactory用来创建线程,需要实现newThread方法. 2.常用场景 线程重命名 设置守护进程 设置优先级 3.示例(线程重命名) public class ThreadF ...

  8. WSL2(Ubuntu)安装Postgres

    原文链接:https://www.xu.ci/2019/12/wsl2ubuntupostgres.html 原文作者:博客园--曲高终和寡 *******************如果你看到这一行,说 ...

  9. ZR#1015

    ZR#1015 解法: 我们需要求得, $ g_i $ 表示长度为的最长不下降子序列个数. 设 $ f_{i,j} $ 表示统计第前$ i $ 个数字,得到最长不下降子序列末端为 $ j $ . 显然 ...

  10. Oracle序列 与 基本函数介绍

    目录 Oracle序列 与 基本函数介绍 常用词汇 数据字典(data dictionary:dd) oracle序列技术理解 账号管理 基本函数介绍及应用 海韵听心 PL/SQL Developer ...