实体抽取
实体关系抽取(Entity and Relation Extraction,ERE)
命名实体识别(Named entity recognition, NER)
ERE是级联任务,分为两个子任务:实体抽取和关系抽取,如何更好处理这种类似的级联任务是NLP的一个热点研究方向。
实体与关系
实体是指具有可描述意义的单词或短语,通常可以是人名、地名、组织机构名、产品名称,或者在某个领域内具有一定含义的内容,比如医学领域内疾病、药物、生物体名称,或者法律学涉及到的专有词汇等。实体是构建知识图谱的主要成员。
关系是指不同实体之间的相互的联系。实体与实体之间并不是相互独立的,往往存在一定的关联。例如“马云”和“阿里巴巴”分别属于实体中的人名和机构名,而它们是具有一定关系的。
在命名实体识别和关系抽取之后,需要对所产生的数据进行整合,三元组是能够描述整合后的最好方式。三元组是指(实体1,关系,实体2
)组成的元组,在关系抽取任务中,对任意两个实体1和实体2进行关系抽取时,若两者具有关系,则它们可以构建成三元组。例如一句话“马云创办了阿里巴巴”,可以构建的三元组为(“马云”,“创办”,“阿里巴巴”)。
标注问题
监督学习中有三种问题,分别是分类问题、回归问题和标注问题。分类问题是指通过学习的模型预测新样本在有限类集合中对应的类别;回归问题是指通过学习的模型拟合训练样本,使得新样本可以预测出一个数值;标注问题则是根据输入的序列数据对其用预先设置的标签进行依次标注。
常用的标注任务包括命名实体识别、词性标注、句法分析、分词、机器翻译
等,解决序列标注问题用到的深度学习模型为循环神经网络。
知识图谱中实体的获取主要分为两步:
- 文本语料中挖掘出尽可能多的高质量词汇(召回)
- 从这些词汇中筛选出目标知识图谱所需要的实体
序列模型数据
传统的BP神经网络只能处理长度固定,样本之间相互独立的数据,而对于处理命名实体识别、关系抽取,以及词性标注、情感分类、语音识别、机器翻译等其他自然语言处理的问题中,文本类的数据均以句子为主,而一个句子是由多个单词组成,不同的句子长度不一致,因此对于模型来说,大多数是以单词为输入,而单个词往往没有特定的意义,只有多个词组合在一起才具有一定的含义。例如对于“马云”一词,单个词“马”可能表达的是动物,“云”一词可能表示的是天上飘得云彩,也可以表示“云计算”的云,而“马云”却表示人名。所以这一类数据之间是有关联的。我们对句子级别的数据称为序列模型数据。
解决序列模型数据
的方法是循环神经网络
循环神经网络的结构
循环神经网络与BP神经网络不同之处在于其隐含层神经元之间具有相互连接。循环神经网络是基于时间概念的模型,因此对于横向的连接每一个神经元代表一个时间点。
对于时刻t时刻的输入为
x
t
=
x
t
1
,
x
t
2
,
.
.
.
x_t={x_{t1},x_{t2},...}
xt=xt1,xt2,..., 即为一个word embedding,输入到中心圆圈(隐层状态神经元)的箭头表示一个神经网络,权重矩阵为U,偏向为 b,对于时间 t-1时刻,中心的圆圈已经存在一个值
s
t
−
1
s_{t-1}
st−1 该圆圈与t时刻的圆圈的箭头也表示一个神经网络,其权重矩阵为W,偏向也为b。循环神经网络的关键即为某一时刻 t的隐层状态神经元的值不仅取决于当前的输入,也取决于前一时刻的隐层状态,即为:
s
t
=
f
(
W
s
t
−
1
+
U
x
t
+
b
)
s_{t}=f(Ws_{t-1}+Ux_t+b)
st=f(Wst−1+Uxt+b)
其中f(·)表示激活函数。
对于网络的输出部分,循环神经网络输出个数与输入数量一致,时刻 t 的输出为:
y
^
t
=
o
t
=
s
o
f
t
m
a
x
(
V
s
t
+
c
)
\hat y_t = o_t=softmax(Vs_t+c)
y^t=ot=softmax(Vst+c)
由于对于序列模型来说,数组的长度是不一致的,即循环神经网络的输入神经元长度是不确定的,因此各个神经网络采用了共享参数 W,U,V,b和c
无监督学习方法
语料 - 分词 - 统计特征计算 - 质量评分
监督学习方法
语料 - 分词 - (统计特征计算,样本标注) - 分类器学习
方法:
TF-IDF
TF = 某个词在文档中出现的频率
IDF = l o g 语 料 库 中 的 文 档 总 数 包 含 该 词 的 文 档 数 + 1 log \frac{语料库中的文档总数}{包含该词的文档数+1} log包含该词的文档数+1语料库中的文档总数
TF - IDF = TF * IDF
TextRank
- 有 β \beta β的概率,随机到有边相连的结点
- 有 1 − β 1-\beta 1−β的概率,随机到其他节点
r j = ∑ i → j β r i d i + ( 1 − β ) 1 N r_j=\sum\limits_{i \to j} \beta\frac{r_i}{d_i}+(1-\beta)\frac{1}N rj=i→j∑βdiri+(1−β)N1
d i d_i di表示结点i的出度
统计模型方法:HMM 条件随机场 条件马尔可夫模型 最大熵模型
深度学习的方法:BiLSTM-CRF CNNs-BILSTM-CRF BERT
Bi-LSTM + CRF实现命名实体识别
虽然BiLSTM学习到了上下文的信息,但是输出相互之间并没有影响,它只是在每一步挑选一个最大概率值的label输出。这样就会导致如B-person后再接一个B-person的问题。而crf中有转移特征,即它会考虑输出label之间的顺序性,所以考虑用crf去做BiLSTM的输出层。
常用的公开训练集有ACE04,ACE05,可以用来完成词性标注(命名实体识别便属于一种词性标注问题)。训练集中包含成千上万个完整的句子,主要以英文句子为主。对于词性标注问题,还将对于一个标注序列。数据通常是以JSON格式保存,在读取数据时需要进行JSON解析。
获取数据后,该数据不能直接作为计算机的输入,需要转化为词向量。词向量可以用自己的语料库使用神经网络(CBOW或Skip-Gram模型)进行训练。实验常用谷歌训练好的词向量,其包含了上千万个语料库,相比自己训练的更加完善。
LSTM单元编码
获取该句子的向量后,便将其放入LSTM的的输入层(论文中也多称为input layer或者embedding layer),每个输入神经元对应一个字的词向量,正向传播则从第一个字“马”开始,随着时间推移一直到“巴”。
每个时刻 t对于的字
x
t
x_t
xt 通过前向传播和后向传播并拼接得到
h
t
h_t
ht ,其次得到
y
^
t
\hat y_t
y^t ,该值即为当前时刻 t 对应的7个标签中每个标签预测的概率。例如对于“马”字,
y
^
t
\hat y_t
y^t =[0.031,0.305,0.219,0.015,0.129,0.133,0.168] ,最大的值为0.305,对应于下标1,即标签“B-PER”。
CRF解码
在CRF中要解决的问题之一是解码问题,对于
y
^
t
\hat y_t
y^t 的结果不一定完全符合输出规则,因此需要将其按照输出规则进行解码。输出规则则体现在CRF中的超参数和参数。例如对于 t=5 时刻,字为“州”,对应的
y
^
t
\hat y_t
y^t =[0.085,0.113,0.153,0.220,0.207,0.108,0.114] ,可知最大的值对应下标表示的标签为“B-LOC”,虽然成功的预测了其属于地区这一类实体,但很显然应该是“I-LOC”。因此将该输出概率向量做下列计算:
Text-CNN关系抽取
基于依存关系模型的关系抽取
卷积神经网络可以很好的对实体与实体关系进行分类,而在自然语言处理中,通常会对句子进行句法分析,通过不同语言的语法规则建立起模型——依存关系。基于依存关系的关系抽取是该模型的一个应用方向,其主要是通过句法分析实现,而不是通过深度模型自动挖掘。本文虽然主要是以深度学习角度分析,但传统的“浅层态”模型也需要了解,以方便将其与深度模型进行整合。
- 基于依存关系模型的关系抽取也叫做开放式实体关系抽取,解决关系抽取的思路是对一个句子的词性进行预处理,例如对于一句话“马云在杭州创办了阿里巴巴”。不同于之前所讲的深度模型,词性分析则是对该句话中每一个词进行预先标注,例如“马云”、“杭州”和“阿里巴巴”被标记为名词,“在”和“了”被标记为介词,“创办”被标记为动词。所谓的依存关系则体现在不同词性的词之间存在着依存关系路径。“在”通常后面跟着地名,也就是名词,“创办”动词前通常为名词,而“在…创办了”便是一个依存关系。
- 依存句法分析实现关系抽取
(1)获取句子 x ;
(2)对句子 x 进行词性标注;
(3)构建依存关系路径,并依据依存标注表对路径进行标注;
(4)提取核心词;
(5)构建起动宾结构,以核心词为关系寻找主语和宾语作为两个实体。