⬆⬆⬆ 点击蓝字
关注我们
AI TIME欢迎每一位AI爱好者的加入!
近年来,将词典信息加入模型被证明对中文命名实体识别任务很有效。但是结合词典的方法通常会使输入变为一个动态的结构,模型需要在运行时动态改变结构来表征输入,导致无法有效利用GPU的并行计算,运行速度缓慢。而FLAT模型,在Transformer的基础上,采用了一个特殊的位置编码表征输入结构,不需要在运行时改变结构来表征输入,且实验结果显示模型在识别实体的正确率以及运行速度上均有良好的表现。
本期AI TIME PhD直播间,我们有幸邀请到了复旦大学计算机学院的博士生李孝男以“结合词典的中文命名实体识别”为题进行了分享,详细介绍了NER任务的定义 、深度学习框架下比较通用的NER的模型架构 、中文NER的难点 、和两大类中文NER加入词典信息的方法,并且主要介绍了讲者本人参与的一个又快又好的中文NER模型,FLAT。
李孝男,复旦大学,复旦大学计算机学院学院博士生,导师为邱锡鹏教授。主要研究方向为自然语言处理。
一、命名实体识别NER
1.
NER是什么?
命名实体识别,Named Entity Recognition (NER),即从句子中抽取出一些具有特定含义的实体,比如组织名,地名,人名等。举例来说“红十字会邀请香港的梁朝伟进行义演”,其中含有“红十字会”这个组织名,“香港”这个地名以及“梁朝伟”这个人名。NER要求从句子中把这些实体抽取出来并给定正确的分类。
NER是NLP中一个比较基础的上游任务,它对许多任务来说很有帮助,也非常关键。比如信息检索,比如帮助抽取知识图谱的三元组。总之NER算是一个比较重要且实用的任务。
2.
NER具体怎么做?
目前NER一般会被当序列标注来做,即句子的实体信息会被转换为一个对应的标签序列,这个序列中的每个标签都对应了一个位置。如果标签的第一部分是O,就代表对应位置不是一个实体,反之代表属于一个实体,B代表实体的开始,I代表实体的中间或者结尾。标签的第二部分代表位置对应的实体种类,比如PER、ORG、LOC,分别代表了人名、组织名、地名。比如“香港”的“香”,处于“香港“这个词的开头,且”香港“是一个地名,那么”香“这个字的标签就是B-LOC。在模型训练完毕后,就能根据输入的句子来输出对应的标签序列,从而将标签序列转化为对应的实体信息,用于后续的性能评测及应用。
二、深度学习框架下比较通用的NER的模型架构
深度学习框架下的NER模型一般可以拆解为三个部分:输入表示层,上下文编码器,标签解码器。
输入表示层(Input Layer)的作用是将构成句子的离散记号映射到一个连续空间以方便之后的计算。比较常见的输入表示层有Word Embedding(Glove / Word2Vec / Random Init),即通过词的ID直接为这个词找到向量表示。英文中Character embedding也经常使用,即用序列编码模型(RNN/CNN/Transformer based char-level representation)编码这个词的字符序列,得到词的字符级别表示。
图1:序列编码模型RNN
另一种常用的输入表示层是Pretrained Contextual Embedding,比如说ELMo和BERT,它们生成的表示会根据上下文产生变化。最后一种Other features,比如POS/gazetteers/linguistic dependency。不同的输入表示层经常搭配在一起使用,这样既能够良好的建模,也能够表示词内部的特征,这对NER来说是比较重要的。
上下文编码器(Context Encoder)的作用是建模词在句子中的语义。一个词在不同的句子中可能有不同的意思,而上下文编码器就负责通过上下文来为此得到一个更好的表示。比较经典的模型有Recurrent Neural Network (RNN) 循环神经网络,它能够较好的建模词之间的依赖,同时性能稳定,但由于它的循环结构会导致运行速度较慢。另外一种是Convolutional Neural Network (CNN) 卷积神经网络,由于它在句子级别上并行运行,所以速度较快,但由于局部建模的特性,所以比较难以建立长距离的依赖。Transformer (Encoder) 相对来说是比较新的模型,由于计算简单且并行所以跑起来比较快,同时也能够直接建立长距离的依赖,但由于它本身的一些特性,在小数据集上的表现不是很好。
标签解码器(Tag Decoder)主要有两种,第一种是MLP + Softmax,我们在得到每个词的表示后,直接用一个线