【NER】对命名实体识别(槽位填充)的一些认识
命名实体识别
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】对命名实体识别(槽位填充)的一些认识的更多相关文章
- CS224d 单隐层全连接网络处理英文命名实体识别tensorflow
什么是NER? 命名实体识别(NER)是指识别文本中具有特定意义的实体,主要包括人名.地名.机构名.专有名词等.命名实体识别是信息提取.问答系统.句法分析.机器翻译等应用领域的重要基础工具,作为结构化 ...
- 命名实体识别,使用pyltp提取文本中的地址
首先安装pyltp pytlp项目首页 单例类(第一次调用时加载模型) class Singleton(object): def __new__(cls, *args, **kwargs): if n ...
- 使用Standford coreNLP进行中文命名实体识别
因为工作需要,调研了一下Stanford coreNLP的命名实体识别功能. Stanford CoreNLP是一个比较厉害的自然语言处理工具,很多模型都是基于深度学习方法训练得到的. 先附上其官网链 ...
- 使用哈工大LTP进行文本命名实体识别并保存到txt
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/broccoli2/article/det ...
- NLP入门(五)用深度学习实现命名实体识别(NER)
前言 在文章:NLP入门(四)命名实体识别(NER)中,笔者介绍了两个实现命名实体识别的工具--NLTK和Stanford NLP.在本文中,我们将会学习到如何使用深度学习工具来自己一步步地实现N ...
- 『深度应用』NLP命名实体识别(NER)开源实战教程
近几年来,基于神经网络的深度学习方法在计算机视觉.语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展.在NLP的关键性基础任务—命名实体识别(Named Entity Recogni ...
- 神经网络结构在命名实体识别(NER)中的应用
神经网络结构在命名实体识别(NER)中的应用 近年来,基于神经网络的深度学习方法在自然语言处理领域已经取得了不少进展.作为NLP领域的基础任务-命名实体识别(Named Entity Recognit ...
- NLP入门(四)命名实体识别(NER)
本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER). 命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领 ...
- 【神经网络】神经网络结构在命名实体识别(NER)中的应用
命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的 ...
随机推荐
- learning java AWT BoxLayout布局管理器
import javax.swing.*; import java.awt.*; public class BoxSpaceTest { private Frame f = new Frame(&qu ...
- AQS面试题
问:什么是AQS? 答:AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面.AQS是一个用来构建锁和同步器的框架 ...
- 飞扬的小鸟 DP
飞扬的小鸟 DP 细节有点恶心的DP,设\(f[i][j]\)表示横坐标为\(i\)(从\(0\)开始)高度为\(j\)时,屏幕点击的最小次数为\(f[i][j]\),转移便很好写了,这里要注意枚举当 ...
- AtCoder Grand Contest 014题解
传送门 \(A\) 首先大力猜测一下答案不会很大,所以次数大于\(10^6\)输出\(-1\)就行了 不过我并不会证上界,据说是因为如果\(a=b=c\)且都是偶数肯定\(-1\),否则设\(a\le ...
- npm start的时候改变端口及组合脚本
windows npm修改端口启动 set PORT=3000&&roadhog server npm start Linux npm 修改端口启动 set PORT=3000 roa ...
- Python逆向(三)—— Python编译运行及反汇编
一.前言 前期我们已经对python的运行原理以及运行过程中产生的文件结构有了了解.本节,我们将结合具体的例子来实践python运行,编译,反编译的过程,并对前些章节中可能遗漏的具体细节进行补充. 二 ...
- 怎么把分化成元,并且保留两位小数,用vue来做
<el-table-column prop="amount" label="申请提现金额" width="120" align=&qu ...
- XAMPP+TestLink
XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了.它可以在Windo ...
- Problems with Localtime
http://pytz.sourceforge.net/#problems-with-localtime https://docs.djangoproject.com/en/2.2/topics/i1 ...
- Acunetix Web Vulnerability Scanner abbr. AWVS
awvs 中文手册详细版 - 木讷 - 博客园https://www.cnblogs.com/iamver/p/7124718.html Download Acunetix Trialhttps:// ...