【论文速读】自动解题+认知推理+常识发现
序言
赶忙,不能写得很详细,所以把两篇类似的合并发在一篇paper里了,第一篇难度较低,是基于模板的做法,但是其中的概率模型方法值得借鉴,第二篇难度很大,想要彻底搞明白需要时间。第三篇很快的过了一遍,是讲常识知识推理的,感觉有点像知识图谱里的关系预测,考虑到它在baseline上的提升不是太多,没有特别仔细地看,方法可能是前人用过的,不过看起来还是比较新颖的。
之所以突然又开始看这块,那肯定是被wyl给恶心了呗。
注意第一篇的项目代码是Java。
好家伙,雨停了,去跑步。
——吐了,刚做完拉伸就开始下大雨,硬着头皮跑了10圈,17’41",差强人意,五月份截至17日一共跑了四次长距离,不知道月底前能不能再跑一次长距离了,反正这一周多以来都没有起到能跑长距离的状态,诸多因素。
PS:
我发现那个大佬WXY(keep@WXY啊啊啊)昨天也跑了一次场地15km,特别快,均配4’10",不过比起他半马配速破四还不是那么牛B,然后脚底磨了个跟我去年一样鸡蛋大小的血泡,哈哈哈。
其实我注意到的是这货最近keep上发POST说自己好像不顺心,怕不是也和npy闹矛盾,因为我看到他npy好久不在他的POST下面跟他互动,而且他也很久不跑长距离了,莫名奇妙跑了一次场地15km,肯定是想散散心(以我自己的经验,我也喜欢烦的时候养两天状态去跑长距离)。虽然跟他只是点头之交,在场上跟跑过几次,也不太熟,但是就是觉得人总是个很奇怪的动物,总是会自寻烦恼,说白了就是吃得太撑,事太少,害。主要是从我自己的角度出发,我觉得好不容易接受了被一个人彻底绝交的现实(实话说这还是我第一次被别人绝交),又把心思放到另一个人身上,自己真的是差劲透顶,行为上不逾矩,但是心思上已经逾矩了。
文章目录
- 序言
- @[toc]
- Learning to Automatically Solve Algebra Word Problems 笔注
- Differentiable Learning of Logic Rules for Knowledge Base Reasoning 笔注
- TransOMCS: From Linguistic Graphs to Commonsense Knowledge 笔注
Learning to Automatically Solve Algebra Word Problems 笔注
论文标题:Learning to Automatically Solve Algebra Word Problems
中文标题:学习自动求解代数语言问题
下载链接:Citeseer
项目地址:wordsprobs
本文给出了一种自动求解由自然语言表达的代数问题的求解模型,比如下面这个自然语言表达的问题:
An amusement park sells 2 kinds of tickets. Tickets for children cost $1.50. Adult tickets cost $4. On a certain day, 278 people entered the park. On that same day the admission fees collected totaled $792. How many children were admitted on that day? How many adults were admitted?
即可通过下面的一元二次方程组求解:
{x+y=2781.5x+4y=792⟹{x=128y=150(1)\left\{\begin{aligned} &x&+y&=278\\ &1.5x&+4y&=792 \end{aligned}\right. \Longrightarrow \left\{\begin{aligned} x=128\\ y=150 \end{aligned}\right. \tag{1} {x1.5x+y+4y=278=792⟹{x=128y=150(1)本文的模型是在根据带槽位(slots)的自然语言模板(template)生成的训练数据集上训练而来的,比如上面的例题就是一种模板,里面的四个具体数字(1.5,4,278,7921.5,4,278,7921.5,4,278,792)以及对应的两个名词(Tickets for children\text{Tickets for children}Tickets for children中的Tickets\rm TicketsTickets,Adult tickets\text{Adult tickets}Adult tickets中的tickets\rm ticketstickets)都是模板槽位上的填充词。
这些推断得到的对应关系可以用于定义跨语句特征(cross-sentence features)以及给模型提供全局性的暗示(global cue),比如在上面的例题中$($1.50,\text{children})和和和($4,\text{adults})都围绕着单词都围绕着单词都围绕着单词\rm cost$,这就暗示模型需要将两个常量的乘积进行累和。
本文的监督学习有两种场景,分别是对问题解的监督和求解问题的方程组的监督,显然后者是更强的监督。
本文的模型在Algebra.com中提供的514514514个代数语言问题上进行评估,成功求解了超过69%69\%69%的代数语言问题(第二种较强的监督),如果只看问题解的话可以达到70%70\%70%以上的精确度。
相关研究一览:
- 情境语义解释(Situated Semantic Interpretation):强化学习,高成本的逻辑形式标注(用于对话系统,问答系统)。
- 信息提取(Information Extraction):本文的方法是基于模板的信息提取。
- 自动语言问题求解器(Automatic Word Problem Solvers):基于规则的方法
具体将语言问题(word problems)映射成方程组的方法:其实连方程组都是有模板的
接下来就是非常硬核的模型推导部分了,看起来还挺有意思:
定义:
令X\mathcal{X}X是所有语言问题的集合,一个语言问题(word problems)x∈Xx\in\mathcal{X}x∈X是由kkk个单词的序列(w1,w2,...,wk)(w_1,w_2,...,w_k)(w1,w2,...,wk)构成,定义方程模板(equation template)ttt,是公式A=BA=BA=B,其中AAA和BBB都是表达式,表达式AAA是下面四种之一:
- 一个数字常量(number constant)fff
- 一个数字槽位(number slot)nnn
- 一个未知数槽位(unknown slot)uuu
- 两个表达式数学关系RRR,如n1×u1n_1\times u_1n1×u1
定义一个系统模板(system template)TTT是lll个方程模板的集合{t0,t2,...,tl}\{t_0,t_2,...,t_l\}{t0,t2,...,tl},T\mathcal{T}T是所有系统模板的集合(族)。
注意到一个槽位可能在一个系统模板中出现不止一次,这样可以使得同一个变量可以在不同的方程中被重复使用。
记一个槽位uuu的具体实例iii为uiu^iui,简洁地,省略那些只出现一次的槽位的实例iii上标。
为了捕获语言问题xxx与系统模板TTT之间的对应关系,定义ppp是一系列二元组(w,s)(w,s)(w,s)的集合,其中www是xxx中的一个符号(token),sss是TTT中的一个槽位实例。
给定上述一系列定义,一个方程eee即可通过一个模板ttt构造得到,其中:
- 每个数字槽位nnn将使用一个具体的实数替换;
- 每个未知数槽位将使用一个变量替换;
- 每个数字常数fff保持原样;
称上述将模板转换为方程的过程为模板实例化(template instantiation)
类似地,一个方程系统(equation system)EEE是lll个方程的集合{e0,e1,...,el}\{e_0,e_1,...,e_l\}{e0,e1,...,el},将其中每个方程都实例化即可,最终得到方程组的解aaa(若干实数构成的元组)。
定义从语言问题派生(derivation)的y=(T,p,a)y=(T,p,a)y=(T,p,a),其中TTT是选定的系统模板,ppp是TTT与xxx之间的对应(alignment),aaa是问题的解,令Y\mathcal{Y}Y是所有这些派生yyy构成的集合。
派生空间:
我们的目的是将每个语言问题xxx映射到一个方程系统EEE。
方程系统的空间可以定义为所有可能的系统模板TTT的集合T\mathcal{T}T和原始问题xxx中那些可以用于填充槽位的单词。
实际操作中,我们根据训练数据生成T\mathcal{T}T(Section 4.1\text{Section 4.1}Section 4.1),给定系统模板T∈TT\in\mathcal{T}T∈T,创建TTT与xxx之间的对应(alignment)ppp,所有可能的对应对(alignment pairs)被以下各项条件约束:
- 每个数字槽位n∈Tn\in Tn∈T可以对应文本中的任意数字
- 一个数字单词只能对应单一的数字槽位nnn
- 一个未知数槽位实例u∈Tu\in Tu∈T只能对应一个名词
具体对应方式如下图所示:
概率模型:显然派生y∈Yy\in\mathcal{Y}y∈Y和语言问题x∈xx\in\mathcal{x}x∈x的数量都非常多,因此需要通过一个对数线性(log-linear)模型来进行判别,这可以理解为是一个特征函数ϕ:X×Y→Rd\phi:\mathcal{X}\times\mathcal{Y}\rightarrow\R^dϕ:X×Y→Rd,以及超参数θ∈Rd\theta\in\R^dθ∈Rd,则在给定xxx的情况下,条件概率可以定义为:
p(y∣x;θ)=eθ⋅ϕ(x,y)∑y′∈Yeθ⋅ϕ(x,y′)(2)p(y|x;\theta)=\frac{e^{\theta\cdot\phi(x,y)}}{\sum_{y'\in\mathcal{Y}}e^{\theta\cdot\phi(x,y')}}\tag{2} p(y∣x;θ)=∑y′∈Yeθ⋅ϕ(x,y′)eθ⋅ϕ(x,y)(2)在θ\thetaθ已知的情况下就可以通过最大似然去挑选问题解:
f(x)=argmaxap(a∣x;θ)(3)f(x)=\text{argmax}_ap(a|x;\theta)\tag{3} f(x)=argmaxap(a∣x;θ)(3)
此处问题解的概率是在所有模板与对应选择上累和得到的:
p(a∣x;θ)=∑y∈Ys.t. AN(y)=ap(y∣x;θ)(4)p(a|x;\theta)=\sum_{y\in\mathcal{Y}\\\text{s.t. AN}(y)=a}p(y|x;\theta)\tag{4} p(a∣x;θ)=y∈Ys.t. AN(y)=a∑p(y∣x;θ)(4)
其中AN(y)\text{AN}(y)AN(y)从派生yyy中提取得到一个问题解aaa,这样就可以将派生yyy建模成一个隐层变量(latent variable),本文使用一个束搜索(beam search)的方法来近似地通过式(4)(4)(4)寻找aaa模型学习:本质上我们需要推导T\mathcal{T}T中的系统模板结构以及估计模型参数θ\thetaθ
模板推导:训练样本{(xi,Ei):i=1,2,...,n}\{(x_i,E_i):i=1,2,...,n\}{(xi,Ei):i=1,2,...,n},其中xix_ixi是一个语言问题,EiE_iEi是方程集合。生成每个EiE_iEi的方法是通过将每个变量替换成一个未知数槽位或者将文本中提及的数字替换为一个数字槽位。具体如下图所示:
参数估计:训练样本{(xi,Vi):i=1,2,...,n}\{(x_i,\mathcal{V}_i):i=1,2,...,n\}{(xi,Vi):i=1,2,...,n},其中xix_ixi是一个语言问题,Vi:Y→{0,1}\mathcal{V}_i:\mathcal{Y}\rightarrow\{0,1\}Vi:Y→{0,1}是一个验证函数,即表示正确(映射为111)与错误(映射为000)。
具体估计参数θ\thetaθ的方法用的是最大似然:
O=∑i∑y∈Ys.t. Vi(y)=1logp(y∣xi;θ)(5)O=\sum_i\sum_{y\in\mathcal{Y}\\\text{s.t. }\mathcal{V}_i(y)=1}\log p(y|x_i;\theta)\tag{5} O=i∑y∈Ys.t.Vi(y)=1∑logp(y∣xi;θ)(5)
优化器是L-BFGS\text{L-BFGS}L-BFGS(刚好和运筹优化对上了),具体梯度值为:
∂O∂θj=∑iEp(y∣xi,Vi(y)=1;θ)[ϕj(xi,y)]−Ep(y∣xi;θ)[ϕj(xi,y)](6)\frac{\partial O}{\partial \theta_j}=\sum_iE_{p\left(y|x_i,\mathcal{V_i}(y)=1;\theta\right)}\left[\phi_j(x_i,y)\right]-E_{p\left(y|x_i;\theta\right)}\left[\phi_j(x_i,y)\right]\tag{6} ∂θj∂O=i∑Ep(y∣xi,Vi(y)=1;θ)[ϕj(xi,y)]−Ep(y∣xi;θ)[ϕj(xi,y)](6)模型推断:
注意计算式(4)(4)(4)中的正规化常数(normalization constant)需要对所有模板和所有可能的实例化方法进行累和,这就需要指数时间,因此我们用束搜索(beam search)来进行近似(这块值得深究,暂时没有太搞明白,大概的意思是会对每次迭代的搜索结果进行剪枝,只取top-k\text{top-}ktop-k的结果)。
另外计算式(6)(6)(6)同样需要束搜索来近似,大约是只计算梯度中一半的偏导数来进行近似。
- 束搜索:
- Beam Search\text{Beam Search}Beam Search(集束搜索)多用在一些大型系统中,比如机器翻译系统,语音识别系统等,因为这些系统中的数据集可能非常大,而且结果也没有唯一正确的解,系统用最快的方式找到最接近正确的解才是系统的目标。
模型实现细节:
① 一些自然语言可以转化为等式条件,如:John is 3 years older than Bill.
② 一些模板如s1+s2=s3s_1+s_2=s_3s1+s2=s3中s1s_1s1与s2s_2s2是不同变量,因此需要进行槽位签名(slot signature)
③ 特征ϕ(x,y)\phi(x,y)ϕ(x,y)是通过四种特征计算得到的,具体如下表所示:
实验结果:
数据集:来自Algebra.com,好像总量很小,只有102410241024个样本对,从中还筛选掉不少,词汇只涉及235223522352个,总句子数才161616161616,问题就只有514514514个,太少了,没有代表性。
监督方法:半监督学习结合监督学习。
评估方法:555折交叉验证。
参数求解器:L-BFGS\text{L-BFGS}L-BFGS,损失函数正则项系数0.10.10.1,使用二模作为正则项,涉及的运算只有加减乘除。
结果就略过了,大约是七成的准确率,不过数据集也太小了。
Differentiable Learning of Logic Rules for Knowledge Base Reasoning 笔注
论文标题:Differentiable Learning of Logic Rules for Knowledge Base Reasoning
中文标题:基于知识推理的逻辑规则可微学习
下载链接:arxiv@1702.08367
项目地址:GitHub@ProPPR
本文是针对基于知识的逻辑推理的问题,学习概率型的一阶逻辑规则(probabilistic first-order logical rules),这个任务是非常困难的,原因是需要在连续空间中学习参数(parameter,如每个规则的置信度)以及在离散空间中学习结构(structure,模型中包含的规则集,确定这个东西是一个离散优化问题)。因此本文提出一种神经逻辑程序(Neural Logic Programming)架构,它可以将一阶逻辑规则的参数与结构学习结合到一个端对端的可微分模型(end-to-end differentiable model)中来解决这一问题。
关系规则(relational)的学习很多时候是为了能够更好的迁移,比如给定一系列公司与公司所在地的知识库,函数
HasOfficeInCountry(country, company)
,就可以在知识库发生变化时仍能根据逻辑规则推理到结果,而常规的基于嵌入的方法如TransE\text{TransE}TransE则很难处理新出现的规则。关系规则学习属于统计关系学习范畴,并且在学习中可能会涉及提出新的逻辑规则,这也称为导出式逻辑程序(inductive logic programming)。
通常底层逻辑是概率型逻辑,如马尔可夫逻辑网络(Markov Logic Networks),使用概率型模型的好处是可以更好的建模复杂与带噪声的数据。
总之就是本文的模型是可微的,虽然寻找规则集是一个离散优化问题,这种思路启发于参考文献Tensorlog: A differentiable deductive database\text{Tensorlog: A differentiable deductive database}Tensorlog: A differentiable deductive database](https://arxiv.org/abs/1605.06523)中的TensorLOG\text{TensorLOG}TensorLOG模型。
模型架构:
基于知识的推理(Knowledge base reasoning):
知识基础(Knowledge bases)是指一系列关系数据
Relation(head,tail)
的收集,其中head
和tail
是实体,Relation
则是两者之间的二进制关系(binary relation),一些例子:HasOfficeInCity(New York, Uber)
CityInCountry(USA, New York)
本文考虑的基于知识的推理由一个查询(这里的查询只涉及关系,而非传统意义上的关系与实体),实体
tail
(查询的对象),实体head
(查询的答案)构成。目的是得到一系列排好序的候选解
head
从知识基础上进行推理的方法是根据一套加权的链式逻辑规则(weighted chain-like logical rules)形式,类似随机逻辑程序(stochastic logic programs):
αquery(Y,X)←Rn(Y,Zn)∧...∧R1(Z1,X)\alpha\quad\text{query}(Y,X)\leftarrow R_n(Y,Z_n)\wedge...\wedge R_1(Z_1,X) αquery(Y,X)←Rn(Y,Zn)∧...∧R1(Z1,X)
其实找到一系列关系把YYY和XXX给串接起来,其中α∈[0,1]\alpha\in[0,1]α∈[0,1]是这条规则的置信度(confidence),RiR_iRi都是知识基础中的关系,则在给定实体xxx的条件下,每个yyy的得分定义为那些能够导出query(y,x)\text{query}(y,x)query(y,x)的规则的置信度之和,这样就可以进行排序。TensorLog for KB reasoning\text{TensorLog for KB reasoning}TensorLog for KB reasoning:
给定知识基础,设EEE是所有实体集合,RRR是所有二进制关系集合,我们将每个实体映射成整数,每个实体iii与一个one-hot\text{one-hot}one-hot编码的向量vi∈{0,1}∣E∣v_i\in\{0,1\}^{|E|}vi∈{0,1}∣E∣对应(第iii个位置为111)。
TensorLog\text{TensorLog}TensorLog为每个关系RRR定义一个运算符MRM_RMR,具体而言,MR∈{0,1}∣E∣×∣E∣M_R\in\{0,1\}^{|E|\times|E|}MR∈{0,1}∣E∣×∣E∣是一个矩阵,若R(i,j)R(i,j)R(i,j)在知识基础中,则索引(i,j)(i,j)(i,j)的取值为111,否则为000,其中iii是第iii个实体,jjj同理。
然后我们建立TensorLog\text{TensorLog}TensorLog运算操作与逻辑规则推断限制案例(restricted case of logical rule inference)之间的联系:
基于上述的运算操作,∀X=x\forall X=x∀X=x,我们可以模拟逻辑规则推断:R(Y,X)←P(Y,Z)∧Q(Z,X)R(Y,X)\leftarrow P(Y,Z)\wedge Q(Z,X)R(Y,X)←P(Y,Z)∧Q(Z,X),通过简单的矩阵乘法:
MP⋅MQ⋅vx=sM_P\cdot M_Q\cdot v_x=s MP⋅MQ⋅vx=s
换言之,向量sss中的非零实体集合为{y:∃zs.t. P(y,z)∈KB,Q(z,x)∈KB}\{y:\exists z\text{ s.t. }P(y,z)\in\text{KB},Q(z,x)\in\text{KB}\}{y:∃zs.t.P(y,z)∈KB,Q(z,x)∈KB},其中KB\text{KB}KB为知识基础,这是两条规则推理的例子,我们当然可以推广到多条规则的推理。通过上述的TensorLog\text{TensorLog}TensorLog运算,我们想要学习的东西如下式所示:
∑lalΠk∈βlMRk\sum_la_l\Pi_{k\in\beta_l}M_{R_k} l∑alΠk∈βlMRk
其中lll是所有可能的规则的索引,αl\alpha_lαl则是对应规则lll与βl\beta_lβl的置信度。其实就是把所有的可能的推理的得分给累和。
在推断过程中,给定实体vxv_xvx,每个检索到的实体的得分等于向量sss中的实体,如下式所示:
s=∑l(αl(Πk∈βlMRkvx))score(y∣x)=vy⊤ss=\sum_l\left(\alpha_l\left(\Pi_{k\in\beta_l}M_{R_k}v_x\right)\right)\\ \text{score}(y|x)=v_y^\top s s=l∑(αl(Πk∈βlMRkvx))score(y∣x)=vy⊤s对于每个查询,最终我们关心的是下面的学习问题:
maxαl,βl∑x,yscore(y∣x)=maxα,βvy⊤(∑l(αl(Πk∈βlMRkvx)))\max_{\alpha_l,\beta_l}\sum_{x,y}\text{score}(y|x)=\max_{\alpha,\beta}v_y^\top\left(\sum_l\left(\alpha_l\left(\Pi_{k\in\beta_l}M_{R_k}v_x\right)\right)\right) αl,βlmaxx,y∑score(y∣x)=α,βmaxvy⊤(l∑(αl(Πk∈βlMRkvx)))
其中x,yx,yx,y是满足查询的实体对,αl,βl\alpha_l,\beta_lαl,βl则是需要学习的。即最大化给定xxx下,输出yyy的一个得分。
学习逻辑规则:
接下来我们阐述可微的规则学习过程,包括参数学习以及模型架构。
正如公式∑lalΠk∈βlMRk\sum_la_l\Pi_{k\in\beta_l}M_{R_k}∑lalΠk∈βlMRk所示,对于每个查询,我们需要学习一套规则来推导出它,以及这些规则的置信度。然而构建一个可微的过程来直接学习参数以及架构(αl,βl)(\alpha_l,\beta_l)(αl,βl)是很困难的,这是因为每个参数都和一个特定规则相联系,而枚举所有的规则显然是一个离散任务,因此本文使用一种不同的方式来重构公式∑lalΠk∈βlMRk\sum_la_l\Pi_{k\in\beta_l}M_{R_k}∑lalΠk∈βlMRk:
∏t=1T∑k∣R∣αtkMRk\prod_{t=1}^T\sum_{k}^{|R|}\alpha_t^kM_{R_k} t=1∏Tk∑∣R∣αtkMRk
其中TTT四规则的最大长度(即链式规则的长度),∣R∣|R|∣R∣即知识基础中关系的数量,这与之前离散的公式不同之处在于规则中的每个关系都赋予了权重,这就将规则的枚举和置信度的配置相结合。然而这种转换后的公式依然不够,因为它假设了所有链式规则的长度相同。下面我们将进一步说明:
在循环构造(recurrent formulation)中,我们使用辅助的记忆向量(memory vectors)utu_tut,初始化记忆向量为给定的实体vxv_xvx,模型首先计算一个当前记忆向量的加权平均(基于记忆注意力向量(memory attention)btb_tbt),然后模型再将TensorLog\text{TensorLog}TensorLog运算符应用在运算注意力向量(operation attention vector)ata_tat上,该构造允许模型将TensorLog\text{TensorLog}TensorLog运算符应用在所有当前的部分推导结果(partial inference results)上,而非只是针对最后一步的结果。具体的公式抽象表示如下式所示:
u0=vxut=∑k∣R∣αlkMRk(∑τ=0t−1btτuτ)∀1≤t≤TuT+1=∑τ=0TbT+1τuτu_0=v_x\\ u_t=\sum_k^{|R|}\alpha_l^kM_{R_k}\left(\sum_{\tau=0}^{t-1}b_t^{\tau}u_\tau\right)\quad \forall 1\le t\le T\\ u_{T+1}=\sum_{\tau=0}^Tb_{T+1}^\tau u_\tau u0=vxut=k∑∣R∣αlkMRk(τ=0∑t−1btτuτ)∀1≤t≤TuT+1=τ=0∑TbT+1τuτ最终模型计算所有记忆向量的加权平均,再使用你注意力机制来选取正确的规则长度,给定上面的循环构造,对于每个查询,可学习的参数就是{at∣1≤t≤T}\{a_t|1\le t\le T\}{at∣1≤t≤T}与{bt∣1≤t≤T+1}\{b_t|1\le t\le T+1\}{bt∣1≤t≤T+1}。
到目前为止整个用于学习运算注意力向量和记忆注意力向量的神经控制系统已经说明清楚,接下来就是如何使用RNN\rm RNNRNN来构建模型。显然RNN\rm RNNRNN是最适合上述循环构造的,假设具体如下:
ht=update(ht−1,input)at=softmax(Wht+b)bt=softmax([h0,...,ht−1]⊤ht)h_t=\text{update}(h_{t-1},\text{input})\\ a_t=\text{softmax}(Wh_t+b)\\ b_t=\text{softmax}([h_0,...,h_{t-1}]^\top h_t) ht=update(ht−1,input)at=softmax(Wht+b)bt=softmax([h0,...,ht−1]⊤ht)
下图给出了系统的示意图:注意循环构造的公式表述中,每个utu_tut都将保存在内存中,最终内存中包含每一步的部分推导结果,即{u0,...,ut,...,uT+1}\{u_0,...,u_t,...,u_{T+1}\}{u0,...,ut,...,uT+1},最终的推导结果uuu就是内存中的最后一个向量,即uT+1u_{T+1}uT+1,对应上面提及的目标函数maxαl,βl∑x,yscore(y∣x)=maxα,βvy⊤(∑l(αl(Πk∈βlMRkvx)))\max_{\alpha_l,\beta_l}\sum_{x,y}\text{score}(y|x)=\max_{\alpha,\beta}v_y^\top\left(\sum_l\left(\alpha_l\left(\Pi_{k\in\beta_l}M_{R_k}v_x\right)\right)\right)maxαl,βl∑x,yscore(y∣x)=maxα,βvy⊤(∑l(αl(Πk∈βlMRkvx))),这里就是要最大化log(vy⊤u)\log(v_y^\top u)log(vy⊤u),使用log\loglog是经验性地加上非线性运算可以提升优化效果。
接下来最关键地部分来了:
我们要把神经控制系统中得到注意力向量还原成逻辑规则
对于每个查询,我们可以得到规则以及注意力向量(at,bt)(a_t,b_t)(at,bt)对应的置信度(αl,βl)(\alpha_l,\beta_l)(αl,βl),根据上面的若干公式,我们总是可以倒推出逻辑规则链条:R1,R2,...,RT+1R_1,R_2,...,R_{T+1}R1,R2,...,RT+1
实验结果及分析:
本文结合统计关系学习(statistical relation learning),网格路径发现(grid path finding),知识基础实现(knowledge base completion),基于知识基础的问答:
- 统计关系学习:数据集为Unified Medical Language System\text{Unified Medical Language System}Unified Medical Language System,来源是biomedicine\text{biomedicine}biomedicine,
- 网格路径发现:这个好像有点意思,暂时没看明白。
- 知识基础实现:这部分作者做了对比实验,项目代码也是主要对这块的,使用了WN18,FB15K,FB15KSelected\text{WN18,FB15K,FB15KSelected}WN18,FB15K,FB15KSelected,对比了若干方法,总之TransE\text{TransE}TransE的效果是真的差得离谱,其他衡量指标都是MRR\rm MRRMRR,在第一个数据集上可以达到0.940.940.94,非常高了,最后一个则很差,只有0.250.250.25,即差不多Hit@4\text{Hit@4}Hit@4的平均水平。
- 基于知识基础的问答:这个准确率高的惊人,能有94.6%94.6\%94.6%
TransOMCS: From Linguistic Graphs to Commonsense Knowledge 笔注
论文标题:TransOMCS: From Linguistic Graphs to Commonsense Knowledge
中文标题:TransOMCS:从语言图到常识知识
下载链接:arxiv@2005.00206v1
项目地址:GitHub@TransOMCS
常识知识指那些人们在交流中往往会省略掉的内容,的传统获取方法需要很多的人力,因此很难大规模的进行标注,本文是提供一种从语言图(Linguistic)种提取常识知识的方法,以及将cheap(可以理解为没有太大用的)的知识转换为expensive(可以理解为很有用)的知识。
这部分前人似乎已经做了不少工作,可以参考一下Introduction\text{Introduction}Introduction部分提及的几篇参考文献,比如ConceptNet 5.5\text{ConceptNet 5.5}ConceptNet 5.5以及Open Mind CommonSense(OMCS)\text{Open Mind CommonSense(OMCS)}Open Mind CommonSense(OMCS)等。
直接来看问题定义:
给定一个种子常识知识集合(seed commonsense knowledge set)C\mathcal{C}C(其中包含mmm个元组),以及一个语言图集合G\mathcal{G}G(其中包含nnn个语言图GGG),其中m≪nm\ll nm≪n,每个常识事实(commonsense fact)以元组形式存储(h,r,t)∈C(h,r,t)\in\mathcal{C}(h,r,t)∈C,且其中r∈Rr\in\mathcal{R}r∈R是人工定义的常识关系(commonsense relations,比如UsedFor,CapableOf,AtLocation,MotivatedByGoal\text{UsedFor,CapableOf,AtLocation,MotivatedByGoal}UsedFor,CapableOf,AtLocation,MotivatedByGoal等),hhh和ttt都是任意短语,我们的目的是根据G\mathcal{G}G来推断一个新的常识知识集合C+\mathcal{C}^+C+(其中带有m+m^+m+个常识知识,m+≫mm^+\gg mm+≫m)。
方法:
整体的框架如下图所示:
一开始对于每个种子常识元组(h,r,t)∈C(h,r,t)\in\mathcal{C}(h,r,t)∈C,匹配并选择包含hhh和ttt的支持语言图(supporting linguistic graphs),然后对于每个常识关系,根据匹配的常识元组和语言图的pair提取语言模式(linguistic patterns),接着再使用一个模式过滤模块(pattern filter module)来选择最高质量的模式,最后训练一个判别模型(discriminative model)来评估提取的常识知识的质量。
方法细节:
知识源:
针对常识知识源:使用英文版的Concept 5.5\text{Concept 5.5}Concept 5.5作为数据源,也考察了原始的OMCS\text{OMCS}OMCS项目的数据源,一共有369543695436954个单词和149908149908149908个概念(concepts),以及207407207407207407个元组来构成C\mathcal{C}C
针对语言知识源:使用ASER\text{ASER}ASER的核心子集,带有37.9M37.9\rm M37.9M个语言图来构成G\mathcal{G}G
这个ASER\rm ASERASER是来自参考文献:
Hongming Zhang, Xin Liu, Haojie Pan, Yangqiu Song, and Cane Wing-Ki Leung. ASER: A large-scale eventuality knowledge graph. In Proceedings of WWW 2020, pages 201–211, 2020.
模式提取:
给定一个匹配好的常识元组(h,r,t)∈C(h,r,t)\in\mathcal{C}(h,r,t)∈C和一个语言图G∈GG\in\mathcal{G}G∈G,模式提取模块的目标是在语言关系(linguistic relations)上找到一个模式,使得给定rrr,我们可以精确地从GGG中提取所有hhh和ttt中的单词,正式地定义每个模式(pattern)PPP如下所示:
定义111:每个模式PPP包含三个成分:
- 头结构(head structure)php_hph
- 尾结构(tail structure)ptp_tpt
- 内部结构(internal structure)pip_ipi
其中php_hph和ptp_tpt都是GGG中最小的,可以分别覆盖所有hhh和ttt中的单词的语言子图(linguistic sub-graph)。pip_ipi则是图GGG中从php_hph到ptp_tpt的最短路径。
首先从GGG中提取php_hph和ptp_tpt来覆盖hhh和ttt中的所有单词,以头模式(head pattern)为例,对于hhh中的每个单词,我们首先找到它在GGG中的位置,为了避免任意性,如果我们在GGG中找到了不止一个匹配,则丢弃当前的匹配对,并返回无模式(no pattern)。
然后,将hhh中第一个单词的位置作为起始编码(start code),对图GGG进行广度优先搜索(BFS),目的是找到GGG的一个能够只覆盖hhh中单词的子结构。
若BFS最终找到了这样一个子结构,则将它表示为php_hph,否则则丢弃这个样例,并并返回无模式(no pattern)。
同理我们得到ptp_tpt,再确定pip_ipi(最短路径)。
总体上来看这个事情的时间复杂度为O(∣C∣⋅∣G∣⋅N2)O(|\mathcal{C}|\cdot|\mathcal{G}|\cdot N^2)O(∣C∣⋅∣G∣⋅N2),算法示意图如下图所示:
模式选择与知识提取:
- 定义模式PPP关于常识关系rrr的置信度(plausibility):
Pr(P∣r)=F(P∣r)∑P′∈PrF(P′∣r)(1)\Pr(P|r)=\frac{F(P|r)}{\sum_{P'\in\mathcal{P}^rF(P'|r)}}\tag{1} Pr(P∣r)=∑P′∈PrF(P′∣r)F(P∣r)(1)
其中Pr\mathcal{P}^rPr则是用于给rrr提取的所有模式,F(P∣r)F(P|r)F(P∣r)是用于确定PPP的质量的得分函数,具体如下:
F(P∣r)=C(P∣r)⋅L(P)⋅U(P∣r)(2)F(P|r)=C(P|r)\cdot L(P)\cdot U(P|r)\tag{2} F(P∣r)=C(P∣r)⋅L(P)⋅U(P∣r)(2)
其中C(P∣r)C(P|r)C(P∣r)指关于rrr,总共可以观察到的PPP的计数(count),L(P)L(P)L(P)指PPP的长度(因此我们希望得到更复杂的,即更长的模式),以及U(P∣r)=C(P∣r)/Cr∑r′∈RC(P∣r′)/∣Cr′∣U(P|r)=\frac{C(P|r)/\sqrt{\mathcal{C}^r}}{\sum_{r'\in\mathcal{R}}C(P|r')/\sqrt{|\mathcal{C}^{r'}|}}U(P∣r)=∑r′∈RC(P∣r′)/∣Cr′∣C(P∣r)/Cr是PPP关于rrr的独特性得分(uniqueness score)。
- 定义模式PPP关于常识关系rrr的置信度(plausibility):
常识知识排序模块:
这是为了减少噪声,因此会提出一些候选解,并作排序,这需要对数据集做一些处理。
这个模块的目的是给所有提取得到的知识进行置信度评分,具体而言,我们定义所有已标注的知识集合为K\mathcal{K}K,对于每个k∈Kk\in\mathcal{K}k∈K,我们表示它的支撑语言图为Gk\mathcal{G}^kGk,设F(k∣Gk)F(k|\mathcal{G}^k)F(k∣Gk)是给定Gk\mathcal{G}^kGk下,kkk的置信度得分函数,如下所示:
F(k∣Gk)=1∣Gk∣∑g∈Gkf(k∣g)(3)F(k|\mathcal{G}^k)=\frac1{|\mathcal{G}^k|}\sum_{g\in\mathcal{G}^k}f(k|g)\tag{3} F(k∣Gk)=∣Gk∣1g∈Gk∑f(k∣g)(3)
其中f(k∣g)f(k|g)f(k∣g)是给定ggg,kkk的置信度得分。
模型细节:
模型示意图如下图所示:
里面用到的一些内容以及细节:
Transformer
图注意力机制(Graph Attention):
这个具体看一下,对于图ggg中的每一个www,我们可以将它的表示为e^\hat ee^,如下所示:
e^=∑e′∈N(e)ae,e′⋅e′(4)\hat e=\sum_{e'\in N(e)}a_{e,e'}\cdot e'\tag{4} e^=e′∈N(e)∑ae,e′⋅e′(4)
其中N(e)N(e)N(e)是与www直接相连的邻接点,ae,e′a_{e,e'}ae,e′是e′e'e′关于eee的注意力权重,具体定义为:
ae,e′=eNNa([e,e′])∑e~∈N(e)eNNa([e,e~])(5)a_{e,e'}=\frac{e^{\text{NN}_a([e,e'])}}{\sum_{\tilde e\in N(e)}e^{\text{NN}_a([e,\tilde e])}}\tag{5} ae,e′=∑e~∈N(e)eNNa([e,e~])eNNa([e,e′])(5)
注意这里的[.][.][.]表示向量拼接,NNa\text{NN}_aNNa则是用于预测注意力权重的DNN在SoftMax\text{SoftMax}SoftMax层的前一层输出结果。置信度预测(Plausibility Prediction):
上面是将eee和e^\hat ee^拼接起来(对于所有单词),然后创建头嵌入(head embedding)oheado_{\rm head}ohead以及尾嵌入(tail embedding)otailo_{\rm tail}otail,方法是简单的在头尾中出现的单词上的[e,e^][e,\hat e][e,e^]上做均值池化。
此外还有两个重要的特征,图频数(graph frequency)ofreo_{\rm fre}ofre(即这张图出现了多少次)以及图类型(graph type,即这个图是node还是edge)etypee_{\rm type}etype,最终f(k∣g)f(k|g)f(k∣g)如下所示:
f(k∣g)=NNp([ohead,otail,ofre,otype])(6)f(k|g)={\rm NN}_p([o_{\rm head},o_{\rm tail},o_{\rm fre},o_{\rm type}])\tag{6} f(k∣g)=NNp([ohead,otail,ofre,otype])(6)
其中NNp{\rm NN}_pNNp是一个用于预测置信度的全连接层,损失函数为交叉熵,优化器为随机梯度下降。模型评估结果:模型的评估结果对比BERT\rm BERTBERT(精确度70.91%70.91\%70.91%)提升到73.23%73.23\%73.23%
【论文速读】自动解题+认知推理+常识发现相关推荐
- 【论文速读】城市自动驾驶应用的概率语义地图
点云PCL免费知识星球,点云论文速读. 标题:Probabilistic Semantic Mapping for Urban Autonomous Driving Applications 作者:D ...
- 【论文速读】RandLA-Net大规模点云的高效语义分割
点云PCL免费知识星球,点云论文速读. 文章:RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds 作者:Qi ...
- 论文速读 -- BEVerse
论文速读 – BEVerse: Unified Perception and Prediction in Birds-Eye-View for Vision-Centric Autonomous Dr ...
- 【论文速读】基于投影方法的激光雷达点云处理比较
点云PCL免费知识星球,点云论文速读. 文章:LiDAR point-cloud processing based on projection methods: a comparison 作者:Gui ...
- 【论文速读】基于图像的伪激光雷达三维目标检测
点云PCL免费知识星球,点云论文速读. 标题:End-to-End Pseudo-LiDAR for Image-Based 3D Object Detection 作者:Rui Qian, Divy ...
- 【点云论文速读】6D位姿估计
点云PCL免费知识星球,点云论文速读. 标题:MoreFusion: Multi-object Reasoning for 6D Pose Estimation from Volumetric Fus ...
- 【点云论文速读】基于优化的视觉惯导里程计与GPS的紧耦合的融合方案
转载自:https://mp.weixin.qq.com/s/Y-h7eto1Zc_Mkzlh653vpg [点云论文速读]基于优化的视觉惯导里程计与GPS的紧耦合的融合方案 原创 dianyunPC ...
- 【论文速读】点云深度学习论文综述
点云PCL免费知识星球,点云论文速读. 文章:Deep Learning for 3D Point Clouds: A Survey 作者:Yulan Guo , Hanyun Wang , Qing ...
- 【点云论文速读】最佳点云分割分析
点云PCL免费知识星球,点云论文速读. 标题:Learning to Optimally Segment Point Clouds 作者:Peiyun Hu, David Held 星球ID:part ...
最新文章
- SLAM++: SLAM at the Level of Objects
- A Crowdsourcing Method for Correcting Sequencing Errors for the Third-generation Sequencing Data 一种用
- en45545防火标准_EN45545-2材料及元件的防火要求
- qml mousearea 点击其他地方_Qml 快速使用
- 阿里员工 1 天有 26 个小时,怎么回事?
- 【无码专区11】异或2(结论 / 推式子 + 哈希hash + 大整数高精度 加减乘除重载考察)
- mysql对表中添加属性_菜鸟笔记—数据分析师MySQL篇(一)
- python自学看什么书-自学Python一年,看了几十本书,我发现了这些捷径!
- 以未来式计算机为题目的作文,一般将来时:my travel plan为题作文
- 预训练模型:一种低资源实体NER标注的方法
- T-SQL 之 DDL语法
- 深入浅出 Python Descriptors / Properties
- jaxen-1.1-beta-6.jar下载,Dom4j的xpath的使用
- 103000大写加零吗_金额大写前面要加零的有哪些
- 2021-07-26记录字节“懂车帝”重庆岗一面(绝对凉)
- CMD控制台(命令提示符)的打开方式
- 【fragment】Android Fragments 详细使用
- 简单易懂ppi和dpi的本质和由来
- cf反恐穿越前线java,穿越前线反恐使命
- pytorch深度学习入门与实战——今天我们来对一张图像进行卷积、池化,以及激活层的使用展示