[实体关系抽取|顶会论文]CasRel:A Novel Cascade Binary Tagging Framework for Relational Triple Extraction

2020.6.22|ACL 2020|吉林大学|原文链接源码链接

A Novel Cascade Binary Tagging Framework for Relational Triple Extraction

  • 解决多个关系三元组共享相同实体的重叠三元组问题
  • 引入一个新的视角来看待关系三元组抽取任务,一个新的级联二进制标记框架(CASREL)
  • f ( s , o ) − > r f(s,o)->r f(s,o)>r改进为 f r ( s ) − > o f_r(s)->o fr(s)>o的关系特定标记器(主语宾语的函数),先识别可能的主语,然后对于每个主语,使用该关系的标记器来同时识别可能的关系和对应的宾语

CasRel框架

直接对三元组进行建模,并在三元组的层次上设计一个训练目标,而不是递进的去建模

  • 训练集: D D D
  • 已注释的句子: x j x_j xj
  • 三元组: T j = ( s , r , o ) T_j = {(s,r,o)} Tj=(s,r,o)【s:主语,r:关系,o:宾语】
  • 由主语主导的三元组: T j ∣ s T_j|s Tjs
  • 由主语引导的三元组中(r,o)对: ( r , o ) ∣ s (r,o)|s (r,o)s
  • 除了s引导的关系: R / T j ∣ s R/T_j|s R/Tjs
  • “null”对象: o ∅ o_\emptyset o
  • 目标:得到最好的D的数据似然性(下方有引用解释)

    (2)公式运用了概率链式规则。【 p ( a , b ) = p ( a ∣ b ) ∗ p ( b ) p(a,b)=p(a|b)*p(b) p(a,b)=p(ab)p(b),即a,b同时发生的概率=b事件发生的条件下a发生的概率,乘以b发生的概率】
    (3)利用了一个规律:对于一个给定的主体s,任何与S有关的关系所处的句子中,都有相应的宾语o,而其他的句子中没有,即“null”宾语。

这里,我认为作者在将整个式子就是将获得注释句子中正确的三元组的概率,打碎,成为了获得句子中正确的主语s在包含s的句子中,获得与关系相符的宾语的概率在包含s的句子中,获得与关系不相符的宾语的概率的概率拼接,为作者提出的主语宾语的函数做提前准备。

效果:

  1. 数据似然性(data likelihood)从(3)开始计算,优化了三元组的评价标准(让其更准确)
  2. 不需要假设三元组在一个句子中共享实体的情况,解决了三元组的问题
  3. 在(3)中的分解过程中,主语标记器 p ( s ∣ x j ) p(s|x_j) p(sxj)能够识别句子中的主语实体,对于每个关系r,宾语标记器 p r ( o ∣ s , x ) p_r(o|s,x) pr(os,x)能够识别给定主语情况下该关系的宾语。
    由此,将一个关系建模为一个主语到宾语的函数,而不是对(主语,宾语)这种pair的关系进行分类。

主语标记器与宾语标记器以深度双向变压器BERT上的二进制标记器(binary taggers on top of a deep bidirectional Transformer BERT)


“似然性”(likelihood)和“概率”(probability)意思相近,都是指某种事件发生的可能性。在统计学中,似然性”和“概率”又有明确的区分,概率用于在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然性则是用于在已知某些观测所得到的结果时,对有关事物的性质的参数进行估计。


P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)
一般认为,在上述公式中,P(A),P(B)是先验概率P(B|A)是似然概率P(A|B) 是后验概率


经常会有文章提到先验概率,后验概率及似然概率,他们的意思可以这么理解:

  1. 先验——根据若干年的统计(经验)或者气候(常识),某地方下雨的概率;
  2. 似然——下雨(果)的时候有乌云(因/证据/观察的数据)的概率,即已经有了果,对证据发生的可能性描述;
  3. 后验——根据天上有乌云(原因或者证据/观察数据),下雨(结果)的概率;
    参考原文链接


例句:Jackie R. Brown Was Born In Washington, The Capital City Of United States Of America.
在low level中可以检测出3个主语,在high level中可以实现对主语[Jackie R. Brown]打上0/1标记,上图为k=1时的状态。对于

BERT Encoder(BERT编码器)

使用一个预先训练的BERT来编码上下文信息

  • S:输入语句中子词的独热向量矩阵
  • W s W_s Ws:词嵌入矩阵
  • W p W_p Wp:位置嵌入矩阵
  • h α h_\alpha hα:隐藏态向量,即句子在第 α \alpha α层的上下文表示
  • N:Transformer的块数

这里作者只是简要的描述了BERT的形式,具体BERT、Transformer的相关,可以参考这篇,Transformer、GPT、BERT,预训练语言模型的前世今生

Cascade Decoder(级联解码器)

主要思想:首先,从句子中检测主语。然后对于每个候选主语,找到所有可能的关系,判断这个关系是否能够将句子中的宾语与这个主语联系起来。【(2)(3)式】,由上图所示的两个模板构成,Subject TaggerRealation-Specific Object Taggers

Subject Tagger

浅层的标记单元:直接解码由N层BERT编码器得到的编码向量 h N h_N hN,进而得到句子中所有可能出现的主语。【使用两个相同的二进制分类器,为每个令牌分配一个标记(0/1),来标记令牌是否是主语的开始或结束位置】

  • p i s t a r t _ s p_i^{start\_s} pistart_s/ p i e n d _ s p_i^{end\_s} piend_s:输入序列中第i个令牌标识为主语的开始/结束位置的可能性,若超过预设的阈值则标记为1,否则标记为0。
  • x i x_i xi:输入序列的第i个令牌的编码表示,即 x i = h N [ i ] x_i=h_N[i] xi=hN[i]
  • W ( ⋅ ) W_{(·)} W():可训练的权重
  • b ( ⋅ ) b_{(·)} b():偏差
  • σ \sigma σ:sigmoid激活函数

同时,主语标记器优化了似然函数,进而更好的识别句子中主语的距离(8)

  • L L L:句子的长度
  • z z z为真则 I { z } = 1 I\{z\}=1 I{z}=1,否则为0【在(8)式中,用于判断在第i个位置是否是主语的开始/结束位置】
  • y i s t a r t _ s y_i^{start\_s} yistart_s:第i个标记的主语的开始位置
  • y i e n d _ s y_i^{end\_s} yiend_s:主语的结束位置
  • θ = { W s t a r t , b s t a r t , W e n d , b e n d } \theta=\{W_{start},b_{start},W_{end},b_{end}\} θ={Wstart,bstart,Wend,bend}:参数

根据起始和结束位置标记器的结果来确定任意目标的跨度。第一个开始令牌Jackie,最近的结束令牌Brown,得出第一个主题跨度的检测结果是Jackie R.Brown。由此可以保证任何实体跨度的完整性。(匹配结束令牌时,不会考虑开始令牌前面的令牌)

这个式子运用的是计算二项分布的方差,即 X ∼ B ( n , p ) X∼B(n,p) XB(n,p)的方差为 D ( x ) = n p ( 1 − p ) D(x)=np(1−p) D(x)=np(1p) X ∼ B ( 1 , p ) X\sim{B(1, p)} XB(1,p) 的方差 D ( x ) = p ( 1 − p ) D(x)=p(1-p) D(x)=p(1p)
知识补充:

  1. 常见的离散随机变量分布:
    • 伯努利分布(两点分布,Bernoulli distribution)
    • 二项分布(binomial distribution)描述N次独立的伯努利实验中有几次成功,即x=1的概率,成功x次的概率
    • 几何分布(geometric distribution)每次成功的概率是相等的 P ( x ) = ( 1 − p ) x − 1 p P(x)=(1-p)^{x-1}p P(x)=(1p)x1p实验了x次成功1次的概率
    • 泊松分布(Poisson distribution)事件的发生是随机且独立的 P ( X = x ) = λ x e − λ x ! P(X=x)=\frac{\lambda^xe^{-\lambda}}{x!} P(X=x)=x!λxeλ,代表应用:已知某家小杂货店,平均每周售出2个水果罐头。请问该店水果罐头的最佳库存量是多少?
  1. 常见的连续性随机
    • 正态分布(normal distribution)
    • 指数分布(exponential distribution)
  1. 期望:随机变量取值的平均,以概率为权的对随机变量进行加权求和。
    E x ∼ P [ f ( x ) ] = ∑ x p ( x ) f ( x ) (离散) E_x\sim{P[f(x)]}=\sum_xp(x)f(x)(离散) ExP[f(x)]=xp(x)f(x)(离散)
    E x ∼ P [ f ( x ) ] = ∫ p ( x ) f ( x ) d x (连续) E_x\sim{P[f(x)]}=\int{p(x)f(x)dx}(连续) ExP[f(x)]=p(x)f(x)dx(连续)
    样本均值是数学期望,求的是n个观测值的平均值,而期望指的是观测值及其概率的乘积的累加在样本足够多的情况下,可以理解为样本均值趋近于期望E
  2. 方差:衡量随机变量和其数学期望之间的偏离程度的量,通俗来说,就是用来衡量随机变量的波动程度,方差越大,那么这一组数据的波动幅度也就越大,稳定性就越小
    V a r ( X ) = E ( X − E X ) 2 = E ( X 2 ) − ( E X ) 2 Var(X)=E(X-EX)^2=E(X^2)-(EX)^2 Var(X)=E(XEX)2=E(X2)(EX)2
    若给定一个由n个样本的集合,则方差计算为 σ 2 = ∑ i = 1 n ( X i − X ‾ 2 ) n − 1 \sigma^2=\frac{\sum_{i=1}^n(X_i-\overline{X}^2)}{n-1} σ2=n1i=1n(XiX2)。方差的标准化:为了消除数据特征间单位和量级差异的影响,往往需要对数据进行标准化,使每个特征的均值为 0、方差 1,这样特征间就是可比较的 x ′ = x − x ‾ σ x ′=\frac{x-\overline{x}}{\sigma} x=σxx
  3. 协方差:如果结果为正值,则说明两者是正相关的,如果为负,则为负相关。从协方差可以引出“相关系数”的定义,衡量随机变量之相关程度更多的是用相关系数
    C o v ( X , Y ) = E [ ( X − E X ) ( Y − E Y ) ] = E ( X Y ) − ( E X ) ( E Y ) Cov(X,Y)=E[(X-EX)(Y-EY)]=E(XY)-(EX)(EY) Cov(X,Y)=E[(XEX)(YEY)]=E(XY)(EX)(EY)

参考文章链接:
带你深入理解期望、方差、协方差的含义
概率统计与机器学习:期望,方差,数学期望,样本均值,样本方差之间的区别
机器学习中的数学——常用概率分布

Relation-specific Object Taggers(特定于关系的宾语标记器)

high level用于识别关系与相应的宾语,结构与low level的主语标记器相同。

  • p i s t a r t _ o / p i e n d _ o p_i^{start\_o}/p_i^{end\_o} pistart_o/piend_o:输入序列中第i个令牌的开始/结束位置的概率
  • v s u b k v_sub^k vsubk:在low level模块中检测到第k个主语的表示向量

    对于每个主语,迭代的使用相同的解码器。对于(9)(10),为了两个向量保持维数一致,将第k个主语的开始和结束的标记的平均向量表为 v s u b k v_sub^k vsubk

宾语标记器也优化了似然函数,与主语标记器中的符号意义类似

在high level标记模块中,关系也由宾语标记器输出。
比如说:对于Work_inJackie R.BrownWashington之间没有关系,则不会标记该跨度,即开始和结束的位置都标为0。
对于Born_inJackie R.BrownWashington之间有关系,则该宾语标记器输出候选对象Washigton的跨度。
因此,high level模块能够同时识别与在low level中得到的主语有关的宾语和关系

Data Log-likelihood Objective

  • 目标是得到 J ( θ ) J(\theta) J(θ)
  • 参数 θ = { θ , { ϕ r } r ∈ R } \theta=\{\theta,\{\phi_r\}_{r\in{R}}\} θ={θ,{ϕr}rR}
  • p θ ( s ∣ x ) p_\theta(s|x) pθ(sx):在(8)中定义出来,即主语的似然函数
  • p θ ( o ∣ s , x ) p_\theta(o|s,x) pθ(os,x):在(11)中定义出来,即宾语的似然函数
  • 使用Adam随机梯度下降的方式进行训练

实验结果

心得总结

本文的最大亮点是绕开过去的方法——将关系建模为实体对的离散标记。而是将关系抽象为主语与宾语的函数,进而解决了重叠问题。目前joint方法基本就是魔改各种tag框架和decoding方式。但是,目前还是在概率论知识上有所欠缺,不能理解为什么作者用这些公式,和这些式子的效果。因此还是需要进一步补数理基础与机器学习基础。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是CasRel模型的PyTorch版本示例代码: ```python import torch import torch.nn as nn import torch.nn.functional as F class CasRel(nn.Module): def __init__(self, num_entities, num_relations, hidden_size): super(CasRel, self).__init__() self.num_entities = num_entities self.num_relations = num_relations self.hidden_size = hidden_size self.entity_embedding = nn.Embedding(num_entities, hidden_size) self.relation_embedding = nn.Embedding(num_relations, hidden_size) self.query_linear = nn.Linear(hidden_size, hidden_size) self.key_linear = nn.Linear(hidden_size, hidden_size) self.value_linear = nn.Linear(hidden_size, hidden_size) self.fc = nn.Linear(hidden_size, num_relations) def forward(self, entity_ids, relation_ids, entity_positions): batch_size = entity_ids.size(0) entity_embs = self.entity_embedding(entity_ids) relation_embs = self.relation_embedding(relation_ids) query = self.query_linear(entity_embs) key = self.key_linear(entity_embs) value = self.value_linear(entity_embs) attn_weights = torch.bmm(query, key.transpose(1,2)) attn_weights = F.softmax(attn_weights, dim=2) attn_output = torch.bmm(attn_weights, value) entity_positions = entity_positions.unsqueeze(2) entity_positions = entity_positions.expand(batch_size, 1, self.hidden_size) entity_positions = entity_positions.float() entity_positions = entity_positions.cuda() entity_pos_embs = entity_positions * entity_embs output = torch.cat([attn_output, entity_pos_embs, relation_embs], dim=1) output = self.fc(output) return output ``` 该模型包括实体嵌入层、关系嵌入层、查询线性层、键线性层、值线性层、多头注意力层和全连接层。在前向传递过程中,输入实体ID、关系ID和实体位置,经过实体嵌入、关系嵌入、多头注意力计算、实体位置嵌入和全连接层,最终输出预测的关系ID。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值