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

  • 时间:
  • 浏览:4
  • 来源:幸运快3_快3电脑版_幸运快3电脑版

近几年来,基于神经网络的角度学习最好的土办法在计算机视觉、语音识别等领域取得了巨大成功,另外在自然语言外理领域也取得了不少进展。在NLP的关键性基础任务—命名实体识别(Named Entity Recognition,NER)的研究中,角度学习也获得了不错的效果。

开源地址:https://github.com/xiaosongshine/NLP_NER_RNN_Keras

目录

0.概念讲解

0.1 NER 简介

0.2 角度学习最好的土办法在NER中的应用

2.编程实战

2.1 概述

2.2数据预外理

2.3 模型搭建

2.4 模型训练

2.5模型应用

3. 总结&待续

-1.参考


0.概念讲解

0.1 NER 简介

NER又称作专名识别,是自然语言外理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义原因分析分析指代性强的实体,通常包括人名、地名、组织机构名、日期时间、专有名词等。NER系统而是从非形状化的输入文本中抽取出上述实体,或者能不到按照业务需求识别出更多类别的实体,比如产品名称、型号、价格等。或者实体一种 概念能不到很广,只而是业务时需的特殊文本片段都能不到称为实体。

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

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

NER是NLP中一项基础性关键任务。从自然语言外理的流程来看,NER能不到看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最问題。一起去NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。

NER当前好的反义词否是2个大热的研究课题,原因分析分析学术界要素学者认为这是2个原因分析分析外理的问題。当然都是学者认为一种 问題还这麼得到很好地外理,原因分析分析主要有:命名实体识别而是在有限的文本类型(主而是新闻语料中)和实体类别(主而是人名、地名、组织机构名)中取得了不错的效果;与或多或少信息检索领域相比,实体命名评测预料较小,容易产生过拟合;命名实体识别更侧重高召回率,但在信息检索领域,高准确率更重要;通用的识别多种类型的命名实体的系统性能很差。

总结一下而是从的话中提取出关键名词

0.2 角度学习最好的土办法在NER中的应用

NER老而是NLP领域中的研究热点,从早期基于词典和规则的最好的土办法,到传统机器学习的最好的土办法,到近年来基于角度学习的最好的土办法,NER研究进展的大约趋势大致如下图所示。

图1:NER发展趋势

在基于机器学习的最好的土办法中,NER被当作序列标注问題。利用大规模语料来学习出标注模型,从而对的话的各个位置进行标注。NER 任务中的常用模型包括生成式模型HMM、判别式模型CRF等。条件随机场(ConditionalRandom Field,CRF)是NER目前的主流模型。它的目标函数不仅考虑输入的情况汇报形状函数,或者还含高了标签转移形状函数。在训练时能不到使用SGD学习模型参数。在已知模型时,给输入序列求预测输出序列即求使目标函数最大化的最优序列,是2个动态规划问題,能不到使用Viterbi算法解码来得到最优标签序列。CRF的优点在于其为2个位置进行标注的过程中能不到利用富足的內部及上下文形状信息。图2:一种线性链条件随机场

近年来,随着硬件计算能力的发展以及词的分布式表示(word embedding)的提出,神经网络能不到有效外理或多或少NLP任务。类事最好的土办法对于序列标注任务(如CWS、POS、NER)的外理最好的土办法是类事的:将token从离散one-hot表示映射到低维空间中成为稠密的embedding,但是将的话的embedding序列输入到RNN中,用神经网络自动提取形状,Softmax来预测每个token的标签。

一种 最好的土办法使得模型的训练成为2个端到端的过程,而非传统的pipeline,不依赖于形状工程,是一种数据驱动的最好的土办法,但网络种类繁多、对参数设置依赖大,模型可解释性差。此外,一种 最好的土办法的2个缺点是对每个token打标签的过程是独立的进行,不到直接利用上文原因分析分析预测的标签(不到靠隐含情况汇报传递上文信息),进而原因分析分析预测出的标签序列原因分析分析是无效的,类事标签I-PER顶端是不原因分析分析紧跟着B-PER的,但Softmax不必利用到一种 信息。

学界提出了DL-CRF模型做序列标注。在神经网络的输出层接入CRF层(重点是利用标签转移概率)来做的话级别的标签预测,使得标注过程不再是对各个token独立分类。

0.2.1  BiLSTM-CRF(RNN base)

LongShort Term Memory网络一般叫做LSTM,是RNN的一种特殊类型,能不到学习长距离依赖信息。LSTM由Hochreiter &Schmidhuber (1997)提出,并在近期被Alex Graves进行了改良和推广。在而是问題上,LSTM 都取得了相当巨大的成功,并得到了广泛的使用。LSTM 通过巧妙的设计来外理长距离依赖问題。

所有 RNN 都具有一种重复神经网络单元的链式形式。在标准的RNN中,一种 重复的单元只2个非常简单的形状,类事2个tanh层。

图3:传统RNN形状

LSTM 同样是原来的形状,或者重复的单元拥2个不同的形状。不同于普通RNN单元,这里是有六个,以一种非常特殊的最好的土办法进行交互。

​图4:LSTM形状

LSTM通过2个门形状(输入门,遗忘门,输出门),选用性地遗忘要素历史信息,加入要素当前输入信息,最终整合到当前情况汇报并产生输出情况汇报。

图5:LSTM各个门控形状

应用于NER中的biLSTM-CRF模型主要由Embedding层(主要有词向量,字向量以及或多或少额外形状),双向LSTM层,以及最后的CRF层构成。实验结果表明biLSTM-CRF原因分析分析达到原因分析分析超过了基于富足形状的CRF模型,成为目前基于角度学习的NER最好的土办法中的最主流模型。在形状方面,该模型继承了角度学习最好的土办法的优势,不必形状工程,使用词向量以及字符向量就能不到达到很好的效果,原因分析分析有高质量的词典形状,还还都都可以进一步获得提高。

图6:biLSTM-CRF形状示意图

0.2.2 IDCNN-CRF(CNN base)

对于序列标注来讲,普通CNN2个缺乏,而是卷积前一天,末层神经元原因分析分析而是得到了原始输入数据中一小块的信息。而对NER来讲,整个输入的话中每个字都是原因分析分析对当前位置的标注产生影响,即所谓的长距离依赖问題。为了覆盖到完整性的输入信息就时需加入更多的卷积层,原因分析分析层数这麼深,参数这麼来越多。而为了外理过拟合又要加入更多的Dropout类事的正则化,带来更多的超参数,整个模型变得庞大且难以训练。原因分析分析CNN原来的劣势,对于大要素序列标注问題我们 还是选用biLSTM类事的网络形状,尽原因分析分析利用网络的记忆力记住全句的信息来对当前字做标注。

但这又带来另外2个问題,biLSTM本质是2个序列模型,在对GPU并行计算的利用上不如CNN这麼强大。要怎样还还都都可以像CNN那样给GPU提供2个火力全开的战场,而又像LSTM原来用简单的形状记住尽原因分析分析多的输入信息呢?

Fisher Yu and Vladlen Koltun 2015 提出了dilated CNN模型,意思是“膨胀的”CNN。其想法好的反义词比较复杂:正常CNN的filter,都是作用在输入矩阵一片连续的区域上,不断sliding做卷积。dilated CNN为一种 filter增加了2个dilation width,作用在输入矩阵的前一天,会skip所有dilation width顶端的输入数据;而filter一种的大小保持不变,原来filter获取到了更广阔的输入矩阵上的数据,看上去就像是“膨胀”了一般。

具体使用时,dilated width会随着层数的增加而指数增加。原来随着层数的增加,参数数量是线性增加的,而receptive field却是指数增加的,能不到很慢覆盖到完整性的输入数据。图7:idcnn示意图

图7中可见感受域是以指数下行速率 扩大的。原始感受域是存在中心点的1x1区域:

(a)图中经由原始感受域按步长为1向外扩散,得到8个1x1的区域构成新的感受域,大小为3x3;

(b)图中经过步长为2的扩散,上一步3x3的感受域扩展为为7x7;

(c)图中经步长为4的扩散,原7x7的感受域扩大为15x15的感受域。每一层的参数数量是相互独立的。感受域呈指数扩大,但参数数量呈线性增加。

对应在文本上,输入是2个一维的向量,每个元素是2个character embedding:

图8:2个最大膨胀步长为4的idcnn块

IDCNN对输入的话的每2个字生成2个logits,这里就和biLSTM模型输出logits完整性一样,加入CRF层,用Viterbi算法解码出标注结果。

CNN base最好的土办法利用空洞卷积+多层的最好的土办法实现提取整句的功能,一起去还还都都可以实现并行计算加速(相较于RNN,CNN与RNN下行速率 对比区别能不到参考我之间博文,CNN RNN 并行理解)。

在biLSTM原因分析分析IDCNN原来的网络模型末端接上CRF层是序列标注的2个很常见的最好的土办法。biLSTM原因分析分析IDCNN计算出的是每个词的各标签概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络。

现在就剩2个问題了:哪些是CRF层?为哪些要用?

0.2.3 CRF层讲解

接下来,简明介绍一下该模型。

示意图如下所示:

  • 首先,的话xxx中的每个单词表达成2个向量,该向量含高了上述的word embedding和character embedding,其中character embedding随机初始化,word embedding通常采用预训练模型初始化。所有的embeddings 将在训练过程中进行微调。
  • 其次,BiLSTM-CRF模型的的输入是上述的embeddings,输出是该的话xxx中每个单词的预测标签。

尽管,我们 讲的是CRF层,好的反义词了解BiLSTM层的细节,或者为了便于了解CRF层,我们 时需知道BiLSTM层输出的意义。

从上图能不到看出,BiLSTM层的输出是每个标签的得分,如单词w0w_0w0​,BiLSTM的输出为1.5(B-Person),0.9(I-Person),0.1(B-Organization), 0.08 (I-Organization) and 0.05 (O),哪些得分而是CRF层的输入。

将BiLSTM层预测的得分喂进CRF层,具有最高得分的标签序列将是模型预测的最好结果。

原因分析分析这麼CRF层将要怎样?

根据上文,还还都都可以发现,原因分析分析这麼CRF层,即我们 用下图所示训练BiLSTM命名实体识别模型:

原因分析分析BiLSTM针对每个单词的输出是标签得分,对于每个单词,我们 能不到选用最高得分的标签作为预测结果。

类事,对于w0w_0w0​,“B-Person"得分最高(1.5),或者我们 能不到选用“B-Person”最为其预测标签;同样的,w1w_1w1​的标签为"I-Person”,w2w_2w2​的为"O", w3w_3w3​的标签为"B-Organization",w4w_4w4​的标签为"O"。

按照上述最好的土办法,对于xxx嘴笨 我们 得到了正确的标签,或者大多数情况汇报下是不到获得正确标签的,类事下图的例子:

显然,输出标签“I-Organization I-Person” 和 “B-Organization I-Person”是不对的。

CRF还还都都可以从训练数据中学习到约束条件

CRF层能不到对最终的约束标签去掉 或多或少约束条件,从而保证预测标签的有效性。而哪些约束条件是CRF层自动从训练数据中学到。

约束原因分析分析是:

  • 的话中第2个单词的标签应该是“B-“ or “O”,而不到是"I-";
  • “B-label1 I-label2 I-label3 I-…”中,label1, label2, label3 …应该是相同的命名实体标签。如“B-Person I-Person”是有效的,而“B-Person I-Organization” 是无效的;
  • “O I-label” 是无效的。2个命名实体的第2个标签应该以 “B-“ 开头,而不到以“I-“开头,换句话说, 应该是“O B-label”一种 模式;

有了哪些约束条件,无效的预测标签序列将急剧减少。

CRF层而是加了约束使得输出更加符合要求,一起去也增加算法成本,或多或少类事束搜索的功能,下面我们 看一看CRF层具体要怎样工作的。

逐帧softmax #

CRF主要用于序列标注问題,能不到简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将一种 序列用CNN原因分析分析RNN进行编码后,接2个全连接层用softmax激活,如下图所示

逐帧softmax并这麼直接考虑输出的上下文关联

条件随机场 #

然而,我们 歌词 设计标签时,比如用s、b、m、e的2个标签来做字标注法的分词,目标输出序列一种会含高或多或少上下文关联,比如s顶端就不到接m和e,等等。逐标签softmax并这麼考虑一种 输出层面的上下文关联,而是它原因分析分析把哪些关联插进了编码层面,希望模型能当时人学到哪些内容,但有过都是“强模型所难”。

而CRF则更直接或多或少,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:

CRF在输出端显式地考虑了上下文关联

数学 #

当然,原因分析分析仅仅是引入输出的关联,还不仅仅是CRF的完整性,CRF的真正精巧的地方,是它以路径为单位,考虑的是路径的概率

模型概要 #

假使 2个输入有nn帧,每一帧的标签有kk种原因分析分析性,这麼理论上都是knkn中不同的输出。我们 能不到将它用如下的网络图进行简单的可视化。在下图中,每个点代表2个标签的原因分析分析性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的三根完整性的路径。

4tag分词模型中输出网络图

而在序列标注任务中,我们 的正确答案是一般是唯一的。比如“今天天气不错”,原因分析分析对应的分词结果是“今天/天气/不/错”,这麼目标输出序列而是bebess,除此之外别的路径都是符合要求。换言之,在序列标注任务中,我们 的研究的基本单位应该是路径,我们 要做的事情,是从knkn条路径选出正确的三根,那就原因分析分析,原因分析分析将它视为2个分类问題,这麼将是knkn类中选一类的分类问題!

总结一下:CRF作用能不到优化输出实体之间的关联

2.编程实战

2.1 概述

  • 该实战项目参考博文
  • 该项目使用了conll2003_v2数据集,其中标注的命名实体共计九类:

实现了将输入识别为命名实体的模型,如下所示:

2.2数据预外理

数据下载并解压,以供训练,地址 http://files.deeppavlov.ai/deeppavlov_data/conll2003_v2.tar.gz

下载解压能不到不到看完2个文件:test.txt,train.txt,valid.txt

打开能不到不到看完,数据格式如下:我们 只时需每行开头和最后2个数据,我们 分别是文本信息和命名实体。

数据读取与预外理

我们 时需将数据进行外理,使之成为网络能接收的形式。

读取数据,并测试输出

输出结果

能不到看出数据原因分析分析经过分发,每一句保存为了2个list,2个是单词list,原来是标注list

或者这里还2个问題:1.网络无法外理单词级别数据,我们 时需准去掉 数值表示 2.每个的话长度不同,无法统一训练,时需归一化

对于问題1我们 们歌词 能不到通过转换为字典的最好的土办法来数值化。

测试输出结果

我们 保留前15999个常用的单词,新增了2个"UNK"代表未知单词。

下面我们 就要将利用哪些字典把单词给替换为数值

测试输出结果,原因分析分析实现了数值化的要求。为了方便统计的话长度,每个元祖最后一位保存为了的话长度。

我们 输出的话长度的统计,发现最大值113,最小值为1,为了方便统一训练,我们 归一化长度为200

的话长度归一化操作,这里采用padding为0,而是当做“UNK”与“O”来用,嘴笨 还还都都可以不到使用Mask最好的土办法等

测试输出结果为

2.3 模型搭建

模型搭建采用了BiRNN最好的土办法,具体的说是BiLSTM,为了方便讲解,采用的是RNN+Softmax最好的土办法,这麼用CRF,顶端有时间我会更新2个CRF的版本。网络形状如下:

模型搭建代码

输出模型形状

2.4 模型训练

训练10个epoch,MX200GPU耗时五分钟,能不到发现train_loss与val_loss都是下降

2.5模型应用

最终训练10个epoch

测试输出结果,能不到发现,预测前六个训练集数据达到不错的效果。

3. 总结&待续

为了比较复杂,本文只用了RNN+Softmax最好的土办法进行了训练集测试,能不到改进地方还有而是,类事加入CRF,使用Mask最好的土办法,2个数据集都用到等,顶端有时间就会进行更新。也欢迎我们 一起去交流,一起去改进。

-1.参考

  1. https://www.jiqizhixin.com/articles/2018-08-31-2
  2. https://blog.csdn.net/suan2014/article/details/89419283
  3. https://spaces.ac.cn/archives/5542
  4. https://blog.csdn.net/chinatelecom08/article/details/82871376