这篇论文做OpenRE的,得引用。2019 ACL的,是篇好文章。
不过光看标题重点是在无监督这一块。可以对比对比。
无监督关系抽取很难,深度神经网络分类器效果好,但是在无监督的条件下很难训练。为了克服这一问题,作者提出:
上述loss提高的判别式模型的性能,并且使训练模型更容易。实验结果在三个不同数据集上超过了SOTA
第一段话讲了信息抽取的作用
第二段话描述了关系抽取的具体细节,(subj, relation, obj)这样,并且提到了弱监督学习上有一些工作。
第三段话描述了无监督关系抽取的重要性:(这边开始才是重点)
- 不需要标注数据
- 能发现新的关系类型
- 能在大量的无监督数据上进行训练,再对特定的关系进行微调
第四段描述无监督模型的最原始的方法,例如Liming Yao使用的LDA方法,聚类等的方法。不过作者声明他们的假设太强了(笔者:确实,因为用的是distance supervision。)
如果要训练更具表达式的模型,那么判别式方法的迁移是有必要的(笔者:和Knowledge transfer的一个核心思想接近,但是我感觉作者不是这个意思,作者的意思应该是需要对句子的表征做好一些的处理,从而使得后续的分类器能够有足够的信息用以分类)
Marcheggiani的VAE(2016年)是一个不错的方法,encoder从句子中抽取关系,decoder预测丢失的entity。(笔者:这篇论文没有细读过,但是这样做的意义应该是从encoder句子生成出关系的分布,encoder是比较重要的。decoder这里预测另一个entity的位置,应该是为了加强学习关系句子分布特性的同时能够保留原本语义中特殊的entity位置)
性能比不过有监督的PCNN。
上述模型并不稳定,尤其使用深度学习关系分类器,依赖超参数调整,预测一个整体分布等等。为了克服这一限制,作者提出使用两个loss去优化。
贡献具体如下:
这边讲点重要的吧
看了一下没什么重要的,都和Introduction差不多
这边依照VAE那篇论文中的思路,将任务做成填空的形式,给定一个句子和其中一个entity,预测另一个entity的词语是什么。因为这样能够在真正做关系分类之前,帮助模型更好的学习抽取句子的表征和关系的表达。
这样做的原因有两个假设:
- 关系可以通过除去 两个entity的上下文预计来预测
- 通过给定上下文和一个entity,希望能够预测出另一个entity
(笔者:仔细思考就可以发现其合理性,这样一个有监督的训练方式其实并不需要关系的类别,任何关系抽取的数据都可以这样训练,加强其句子的表征形式,淡化entity在句子之中的效果,从而可以在后续通过上下文来预测关系的类别。此外,这两个假设也是非常有力的,在TransE和TransR这些embedding之中就已经验证了这一点)
填空任务的具体形式为:
p ( e − i ∣ s , e i ) = ∑ r p ( r ∣ s ) ⏟ ( i ) classifier p ( e − i ∣ r , e i ) ⏟ (ii) link predictor p\left(e_{-i} | s, e_{i}\right)=\sum_{r} \underbrace{p(r | s)}_{(i) \text { classifier }} \underbrace{p\left(e_{-i} | r, e_{i}\right)}_{\text {(ii) link predictor }} p(e−i∣s,ei)=r∑(i) classifier p(r∣s)(ii) link predictor p(e−i∣r,ei)
其中 p ( r ∣ s ) p(r|s) p(r∣s)是分类任务, p ( e − i ∣ r , e i ) p(e_{-i}|r, e_i) p(e−i∣r,ei)是entity预测任务。 e − i e_{-i} e−i任务也很好理解,就是 e 1 , e 2 {e_1, e_2} e1,e2 \ e i {e_i} ei, 就是二者中的另外一个。
这两个任务联合起来训练,去构建缺失的entity。并且entity预测任务不能够接触到完成的输入句子,因此模型需要压缩信息至 r r r中。
在原VAE方法中并没有第一个假设,仅第二个。并且他们的分类器的信息输入有 e − i {e_{-i}} e−i和 e i {e_i} ei,所以 r r r会是信息瓶颈。
笔者:????我去check一下原文的公式
经过了10分钟的搜索和分析:
VAE模型的RE原论文原句如下:
The idea which underlies much of latent vari- able modeling is that a good latent representation is the one that helps us to reconstruct the input (i.e., x x x, including ( e 1 e_1 e1 , e 2 e_2 e2 )
此处的想法是VAE的隐性表征模型可以帮助重现原句。这句话没问题。重点是这边 x x x包含了 e 1 e_1 e1和 e 2 e_2 e2。
而这篇文章中的 s s s,与 x x x有不同之处:
s s s = (prefix, infix, suffix)
为了方便理解这两处的差异,我们把上述公式中的分类任务记为任务1,预测entity任务即为任务2
因此,在该方法原论文中公式为:
任务1:
q ( r ∣ x , w ) = e x p ( w T g ( r , x ) ) ∑ r ′ ∈ R e x p ( w T g ( r ′ , x ) ) q(r|x, \textbf{w})=\frac{exp(\textbf{w}^Tg(r,x))}{\sum_{r'\in R}exp(\textbf{w}^Tg(r',x))} q(r∣x,w)=∑r′∈Rexp(wTg(r′,x))exp(wTg(r,x))
忽略后面计算的,属于所有relation集合 R R R中每一个关系 r ′ r' r′的概率
忽略 w \textbf{w} w是计算相关参数。
则该公式的输入信息为 x x x
我们看上面任务1的公式, p ( r ∣ s ) p(r|s) p(r∣s)
可以看到 s s s和 x x x所代表的信息有很大不同
s s s中无entity信息, x x x中有entity信息。
这里咱们不论二者优劣,究其原因其实是因为假设不同。因为本文的假设是可以不通过entity,仅通过 s s s来预测关系。而在VAE关系抽取那篇中并没有做这样的假设,这也是他们二者在这一细节上做出区别的地方。
客观上讲我觉得这两个方法都是可以的,不加entity信息可以保证 r r r与 s s s的高度相关,仅从 s s s构建 r r r。加了entity信息又可以声明自己获取了全局信息,甚至可以从entity本身的语义信息例如词性啊什么的来优化 r r r的分类。可以说这边是没有什么区别的。
主要介绍任务1,也就是 p ( r ∣ s ) p(r|s) p(r∣s)
使用有监督PCNN进行训练。piece-wis嘛,很符合假设,不要entity信息,三段内容卷积之后运算,再把三段feature concate起来。完美契合。这边在模型层数上做了稍微的优化。这个细节按下不表。因此任务1公式为:
p ( r ∣ s ) = f P C N N ( r ; s , θ P C N N ) p(r|s) = f_{PCNN}(r;s, \theta_{PCNN}) p(r∣s)=fPCNN(r;s,θPCNN)
其中 θ P C N N \theta_{PCNN} θPCNN自然是分类器中所有的参数。
笔者:这里为什么是无监督的呢?其实奥妙在最开始的公式中,其实求出的 r r r并非是带了标记的 r r r而是将这个预测结果 r r r用于第二个任务中,这样所有的信息其实只有 s s s和两个entity,并不涉及关系标记 r r r
entity预测任务,也就是任务2
此处和VAE论文相同,需要与 ( e 1 , r , e 2 ) (e_1, r, e_2) (e1,r,e2)相关的能量范式
p ( e 1 ∣ r , e 2 ) ∝ exp ψ ( e 1 , r , e 2 ) ) p(e_{1} | r, e_{2}) \propto \exp \psi(e_{1}, r, e_{2})) p(e1∣r,e2)∝expψ(e1,r,e2))
其中 ψ \psi ψ是两个标准的关系学习模型之和
ψ ( e 1 , r , e 2 ) = u e 1 T A r u e 2 ⏟ RESCAL + u e 1 T B r + u e 2 T C r ⏟ Selectional Preferences \psi\left(e_{1}, r, e_{2}\right)=\underbrace{\mathbf{u}_{e_{1}}^{T} \mathcal{A}_{r} \mathbf{u}_{e_{2}}}_{\text {RESCAL }}+\underbrace{\mathbf{u}_{e_{1}}^{T} B_{r}+\mathbf{u}_{e_{2}}^{T} C_{r}}_{\text {Selectional Preferences }} ψ(e1,r,e2)=RESCAL ue1TArue2+Selectional Preferences ue1TBr+ue2TCr
A r \mathcal{A}_{r} Ar用于计算两个entity之间的交互性
B r B_{r} Br和 C r C_{r} Cr则是用于计算对于特定relation来说,对于其中某个entity的倾向程度。(笔者:可以理解为相关程度,i.e. 计算出这个relation,与 e 1 e_1 e1或者 e 2 e_2 e2的关系是多少。理解为这是一个relation的encoding公式即可
因为entity候选非常多,在做第二个任务时训练并不是很有效和快速,所以这边像VAE论文一样,训练一个分类器,用于判别是真实的triplet或者是虚假的triplet
p ( D = 1 ∣ e 1 , e 2 , r ) = σ ( ψ ( e 1 , r , e 2 ) ) p(D=1|e_1, e_2, r) = \sigma(\psi(e_1, r, e_2)) p(D=1∣e1,e2,r)=σ(ψ(e1,r,e2))
其中 σ \sigma σ是sigmoid激活函数。
通过生成负entity,来优化负对数似然函数,记为 L L P \mathcal{L}_{\mathrm{LP}} LLP。具体操作和Miklov word2vec那一篇非常相似,可以具体看看。
仅按照上述负样本的似然概率公式进行训练会非常的不稳定,也很依赖超参数。
以下两种情况容易崩溃
当两个任务独立时,不稳定的情况尤为严重,分类器不能被良好的训练,因为link predictor不能成功的预测出正确的entity(这两者有反向传播的相关性。)
为了处理这个问题,作者提出了附加的loss。
为了使得分类器对其输出有信心,最小化预测关系分布的entropy。也就是增加偏度loss。
原因之前说了,分类器输出关系在正态分布时训练比较容易崩溃。
因此强迫输出分布满足偏态分布。具体文中说,强迫分类器朝着输出one-hot向量。
通过下面的loss
L S = E ( e 1 , e 2 , s ) ∼ χ [ H ( R ∣ e 1 , e 2 , s ) ] \mathcal{L}_{\mathrm{S}}=\mathbb{E}_{\left(e_{1}, e_{2}, s\right) \sim \chi}\left[H\left(R | e_{1}, e_{2}, s\right)\right] LS=E(e1,e2,s)∼χ[H(R∣e1,e2,s)]
其中 R R R就是随机变量,对应预测关系。根据第一个假设,上述公式的熵为 H ( R ∣ s ) H(R|s) H(R∣s)。笔者:第一个假设是关系和两个netity无关,因此可以仅通过 s s s来求得熵
还值得注意的是,要确保分类器预测出多个关系,因此最小化KL散度在先验 p ( R ) p(R) p(R)与正态分布 U U U中
笔者:很奇怪,不是正态分布容易崩溃吗,为什么还要和正态分布做计算,但客观讲,一时间并没有更合适的分布
公式为:
L D = D K L ( p ( R ) ∥ U ) \mathcal{L}_{\mathrm{D}}=D_{\mathrm{KL}}(p(R) \| U) LD=DKL(p(R)∥U)
注意与 L S \mathcal{L}_{\mathrm{S}} LS相比,为了对预测关系分布 p ( R ) p(R) p(R)的良好估计, L D \mathcal{L}_{\mathrm{D}} LD度量的是在 R R R上的非条件分布
也就是所有句子的预测关系分布。这使得第二种崩溃情况不存在,因为 L D \mathcal{L}_{\mathrm{D}} LD会使得所有的关系分布预测的次数同样多
综合上述所有的loss,则最终的结合训练为
L = L L P + α L S + β L D \mathcal{L}=\mathcal{L}_{\mathrm{LP}}+\alpha \mathcal{L}_{\mathrm{S}}+\beta \mathcal{L}_{\mathrm{D}} L=LLP+αLS+βLD
α \alpha α和 β \beta β肯定是正超参数了
一些训练细节就不讲了,我认为本文的核心到此已经结束了。
对比原始的VAE模型,除了 L L P \mathcal{L}_{\mathrm{LP}} LLP在原始公式中,本文加的两个loss主要是针对训练容易崩溃的两种情况,从而使得训练更加的稳定和鲁棒。