paper:2212.00178.pdf (arxiv.org)
code:raspberryice/type-discovery-abs: Code for paper “Open Relation and Event Type Discovery with Type Abstraction”. EMNLP 22’ (github.com)
期刊/会议:EMNLP 2022
传统的“封闭世界”信息提取(IE)方法依赖于人类本体来定义抽取范围。因此,当应用到新的领域时,这种方法就不适用了。这就要求系统能够从给定的语料库中自动推断出新的类型,我们称之为类型发现(type discovery)。为了解决这个问题,我们引入了类型抽象的思想,在这种思想中,会提示模型泛化并命名类型。然后,我们使用推断的名称之间的相似性来诱导聚类(induce cluster)。观察到这种基于抽象的表示通常是实体/触发词token表示的补充,我们将这两种表示设置为两个视图,并将我们的模型设计为一个联合训练框架。我们在多个关系抽取和事件抽取数据集上的实验一致地显示了我们的类型抽象方法的优势。
信息抽取已经取得了广泛的成功,然而,大多数信息抽取方法都是“反应性的(reactive)”,依赖于最终用户事先明确他们的信息需求并提供相应的监督。这导致了“封闭世界”系统,局限于一组预定义的类型。我们希望让系统像人类一样“主动”行动,总是在寻找有趣的新信息,将它们归纳为新的类型,并找到此类类型的更多实例,即使它们以前没有见过。
一个相关的尝试是开放信息抽取范式,它旨在从表示某种关系的文本中抽取所有三元组(主语、谓语、宾语)。虽然OpenIE不依赖于预先指定(pre-specified)的关系,但其详尽(exhaustive)和自由形式(free-form)的特性经常导致噪声和冗余抽取。
为了弥补封闭世界IE和OpenIE之间的差距,一个至关重要的步骤是让系统拥有自动诱导新类型和抽取这种新类型实例的能力。在各种语境下,人们以“关系发现(relation discovery)”的名义提出了相关的方法,“开放关系抽取(open relation extraction)”和“事件类型归纳(event type induction)”。在本文中,我们统一了这些术语,并将该任务称为类型发现(type discovery)。
类型发现可以自然地作为一个聚类任务。这在很大程度上依赖于定义一个适当的度量空间,其中类型很容易分离。来自预训练语言模型的token嵌入空间是一种流行的选择,但正如Zhao等人所观察到的那样,由BERT派生的原始度量空间往往倾向于反映表面形式相似性,而不是所需的关系/事件中心相似性。缓解这一问题的一种方法是使用已知类型来帮助学习相似度度量,该度量也可以应用于未知类型。
在本文中,我们介绍了抽象(abstraction)的另一种思想:发现的类型应该有一个适当而简洁的类型名称。人类词汇表是一个很好的概念库,对人们来说是有意义的。当我们给集群分配一个名称时,我们隐式地定义了集群内实例的共通性,以及将新实例包含到集群中的标准。由于掩码语言模型具有“填充空白”的能力,在图1所示的输入诱导提示的帮助下,我们可以指导模型预测任何关系/事件实例的名称或指示性单词。此外,由于从单个实例推断一个集群的最佳名称是一项困难的任务,所以我们不要求这种预测是准确的:我们利用预测名称之间的相似性来执行聚类。
这种基于抽象的表示是对广泛采用的基于token的关系/事件表示的补充。我们将基于抽象的表示称为“mask视图”,因为实例的嵌入派生自[mask]令牌。或者,我们也可以直接从相关实体/触发词的预训练语言模型嵌入中计算一个“token视图”。如表1所示,没有经过任何训练,基于token的表示(token视图)和类型抽象表示(mask视图)专门化于不同的类型。当关系类型与实体类型强连接时,例如在“website”中,token视图提供了强先验。mask视图可以根据关系短语(如“found, create, work at”)区分具有相似实体类型(人,组织)的关系。
因此,我们将mask视图和token视图结合在一个联合训练框架中,利用两端的信息。如图2所示,我们的模型由一个共享上下文编码器、两个特定于视图的投影网络和已知类型和未知类型的分类层组成。由于新类型没有标注可用,我们在两个视图上执行聚类以获得伪标签,然后使用这些标签指导对面视图的分类层的训练。
我们将我们的模型应用于关系发现和事件发现,并对诱导输入的提示符进行最小的更改。我们的模型有两个目的:(1)用输入语料库中的样例实例诱导聚类,以协助本体构建;(2)作为未知类型实例的分类器。在关系发现任务上,我们的模型在基准数据集TACRED和FewRel上的准确率分别为4.3%和2.2%,优于之前基于迁移学习的SOTA模型。在事件发现方面,我们还设置了新的SOTA,使用gold-standard触发词实现了77.3%的类型发现准确率。
本文的主要贡献包括:
我们首先定义类型发现任务,然后讨论该任务对关系和事件的实现。
给定一组未标记实例 D u = { x 1 u , x 2 u , . . . , x M u } D^u = \{x^u_1, x^u_2,...,x^u_M\} Du={x1u,x2u,...,xMu}和估计未知类型 ∣ C u ∣ |C^u| ∣Cu∣的数量,类型发现的目标是学习一个模型 f f f,可以将 x ∈ X u x\in X^u x∈Xu映射到 y ∈ C u y \in C^u y∈Cu未知类型之一。
在关系发现的情况下,每个实例 x x x都是嵌入在句子上下文中的实体提及对 { h , t } \{h, t\} {h,t}。如图1所示,实例是“John earned a bechelor’s degree from the University of Wollongong”,头实体提及“John”,尾实体提及“University of Wollongong”。每个提到的实体在句子中都是一个包含开始和结束索引 ( s , e ) (s, e) (s,e)的span。在本例中,关联标签 y y y是关系类型“School_Attended”。
在事件发现的情况下,每个实例 x x x是一个句子上下文中带有开始和结束索引 ( s , e ) (s, e) (s,e)的触发词/短语提及 t t t,如图2所示。标签 y y y表示事件类型。请注意,对于关系和事件,同一个句子中可能出现多个实例,但它们具有不同的实体或触发词提及。
为了帮助学习这样的模型,我们进一步假设我们可以访问一组标签实例 D l = { ( x 1 l , y 1 l ) , ( x 2 l , y 2 l ) , . . . , ( x N l , y N l ) } D^l = \{(x^l_1, y^l_1),(x^l_2, y^l_2),...,(x^l_N, y^l_N)\} Dl={(x1l,y1l),(x2l,y2l),...,(xNl,yNl)}。 D l D^l Dl中存在的类型标签 Y = { y 1 l , y 2 l , . . . , y N l } Y = \{y^l_1, y^l_2,...,y^l_N\} Y={y1l,y2l,...,yNl}属于 C l C^l Cl个已知类,与待发现类 C u C^u Cu不相交,即 C l ∩ C u = ∅ C^l \cap C^u= \emptyset Cl∩Cu=∅。
我们的模型建立在token视图和mask视图通常是互补的,并且适用于不同类型的观察之上。因此,我们模型的核心是构建两个视图,以及如何利用它们进行联合训练。
我们首先描述关系实例是如何表示的,然后讨论事件实例的更改。在输入语句中,我们用特殊的token标记实体/触发词。我们使用 < h >
关系实例。对于token视图,我们使用BERT嵌入句子,并将实体(索引)中第一个token的嵌入作为实体表示。我们连接头部和尾部实体的表示,以获得关系表示。
h ⃗ = B E R T ( x ) [ s h ] ; t ⃗ = B E R T ( x ) [ s t ] ; x 1 ⃗ = [ h ⃗ ; t ⃗ ] \vec{h}=BERT(x)[s_h];\\ \vec{t}=BERT(x)[s_t];\\ \vec{x_1}=[\vec{h};\vec{t}] h=BERT(x)[sh];t=BERT(x)[st];x1=[h;t]
对于mask视图,我们将一个类型提示符 p r p_r pr附加到输入句子中。类型提示符被设计成关系类型名称应该适合[MASK] token位置。对于关系,我们使用提示“ is the [MASK] of”,其中和被每个实例的实际头实体和尾实体字符串所取代。然后,我们用BERT嵌入句子和类型提示符,并使用[MASK] token的嵌入作为关系表示。
x 2 ⃗ = B E R T ( x ; p r ) [ s m a s k ] \vec{x_2}=BERT(x;p_r)[s_{mask}] x2=BERT(x;pr)[smask]
事件实例。对于token视图中的事件实例,我们使用触发词提及中第一token的嵌入作为事件表示。在mask视图中,我们使用不同类型的提示 p e p_e pe: “ is a [mask] event”,其中被实际的触发词替换。
x 1 ⃗ = B E R T ( x ) [ s ] , x 2 ⃗ = B E R T ( x ; p e ) [ s m a s k ] \vec{x_1}=BERT(x)[s],\\ \vec{x_2}=BERT(x;p_e)[s_{mask}] x1=BERT(x)[s],x2=BERT(x;pe)[smask]
我们的模型贡献一个BERT编码器,2个投影网络 f f f,4个分类头 g g g(分别针对每个视图的已知类型和未知类型)。
投影网络将实例表示 x ⃗ \vec{x} x映射到低维空间表示 h ⃗ \vec{h} h,分类器头 g g g将 h ⃗ \vec{h} h映射为对应于标签的对数 l ⃗ \vec{l} l。
h ⃗ = f ( x ⃗ ) , l ⃗ u = g u ( h ⃗ ) , l ⃗ l = g l ( h ⃗ ) , y ^ ⃗ = s o f t m a x ( [ l ⃗ l , l ⃗ u ] ) \vec{h}=f(\vec{x}),\\ \vec{l}^u=g^u(\vec{h}),\\ \vec{l}^l=g^l(\vec{h}),\\ \vec{\hat y}=softmax([\vec{l}^l,\vec{l}^u]) h=f(x),lu=gu(h),ll=gl(h),y^=softmax([ll,lu])
对于已知的实例类别,我们使用带有平滑函数交叉熵损失来训练网络:
L l = − 1 ∣ D l ∣ ∑ D l ∑ c = l C y c l o g ( y ^ c ) L^l=-\frac{1}{|D^l|}\sum_{D^l}\sum_{c=l}^C y_c \ log(\hat y_c) Ll=−∣Dl∣1Dl∑c=l∑Cyc log(y^c)
对于未知类的实例,我们在投影网络输出上运行Kmeans聚类来分配伪标签:
y ~ u = K-Means ( h ⃗ ) ∈ { 1 , ⋯ , C u } \tilde{y}^{u}=\text{K-Means}(\vec{h}) \in\left\{1, \cdots, C^{u}\right\} y~u=K-Means(h)∈{1,⋯,Cu}
由于伪标签分配可能不会在视图之间对齐(token视图中的集群1与mask视图中的集群1不同),对于每批实例,我们进一步将集群分配标签转换为成对标签:
q i j = 1 ( y ~ i = y ~ j ) q_{ij}=1(\tilde{y}_i=\tilde{y}_j) qij=1(y~i=y~j)
我们使用Jensen-Shannon(JS)散度计算对 x i , x j x_i, x_j xi,xj的预测之间的差异:
d i j = J S D ( y ⃗ i ^ , y ⃗ j ^ ) = 1 2 { K L ( y ⃗ i ^ , y ⃗ j ^ ) + K L ( y ⃗ j ^ , y ⃗ i ^ ) } d_{ij}=JSD(\hat{\vec y_i},\hat{\vec y_j})=\frac{1}{2}\{ KL(\hat{\vec y_i},\hat{\vec y_j})+KL(\hat{\vec y_j},\hat{\vec y_i}) \} dij=JSD(yi^,yj^)=21{KL(yi^,yj^)+KL(yj^,yi^)}
如果两个实例被分配到同一个聚类中,则未标记对的损失函数定义为JS散度,如果两个实例被分配到不同的聚类中,则损失函数定义为JS散度上的hinge loss。
l ( d i j , q i j ) = q i j d i j + ( 1 − q i j ) max ( 0 , α − d i j ) , L u = 1 ( ∣ D u ∣ 2 ) ∑ x i , x j ∈ D u ( l ( d i j 1 ) , q i j 2 ) + l ( d i j 2 ) , q i j 1 ) ) l(d_{ij},q_{ij})=q_{ij}d_{ij}+(1-q_{ij}) \max(0,\alpha-d_{ij}),\\ L^u=\frac{1}{\binom{|D^u|}{2}} \sum_{x_i,x_j \in D^u}(l(d_{ij}^1),q_{ij}^2)+l(d_{ij}^2),q_{ij}^1)) l(dij,qij)=qijdij+(1−qij)max(0,α−dij),Lu=(2∣Du∣)1xi,xj∈Du∑(l(dij1),qij2)+l(dij2),qij1))
d i j 1 d_{ij}^1 dij1将被计算在token视图, d i j 2 d_{ij}^2 dij2将被计算在mask视图, q i j 1 , q i j 2 q_{ij}^1,q_{ij}^2 qij1,qij2也是如此。 α \alpha α是hinge loss的超参数。
如果使用单一视图,则此损失回落到为未标记实例定义的对比损失项。
在训练过程中,我们观察到由于伪标签 y ~ \tilde{y} y~被用作相反视图的目标,当这两个视图产生非常不同的集群时,它会导致性能在epoch上振荡。
为了缓解这个问题,我们添加了一致性损失,鼓励两个视图的预测彼此相似:
L c = 1 ∣ D u ∣ ∑ D u J S D ( y ^ 1 , y ^ 2 ) L^c=\frac{1}{|D^u|}\sum_{D^u}JSD(\hat y^1,\hat y^2) Lc=∣Du∣1Du∑JSD(y^1,y^2)
最终的损失函数将被加权计算求和:
L = L l + L u + β L c L=L^l+L^u+\beta L^c L=Ll+Lu+βLc
β \beta β是一个超参数,在我们的实验中设置为0.2。
在我们用公式11中的损失函数训练我们的模型之前,我们通过对标记的数据进行预训练来预热我们的模型。损失函数就是交叉熵损失 L p r e = L l L_{pre}=L^l Lpre=Ll。
在预训练之后,我们将BERT的权重和投影网络 f f f加载到模型中进行进一步的训练。注意,我们不保留已知类分类器头 g l g^l gl的权重。
在接下来的实验中,我们将我们的模型称为TABS,以代表“type abstract”。
数据集:TACRED、FewREL。
Baselines:RoCORE、RSN。这是关系发现的最先进技术。RoCORE得名于他们提出的“relation-oriented clustering module”,该模块试图通过中心损失(center loss)(将实例推向质心)和重建损失(reconstruction loss)来塑造聚类的潜在空间。我们还与RSN进行了比较,RSN学习了关系之间的成对相似度度量,并将该度量转移到未知实例。编码器被BERT取代,以进行公平的比较。RSN最初使用Louvain算法进行聚类,但我们观察到,有时这会导致所有实例被分配到相同的聚类,因此我们实验了一种使用光谱聚类(spectral clustering)的变体,该变体采用与Louvain相同的图输入。对于Louvain变体,我们报告是最佳运行而不是平均,这是由于聚类崩溃的情况下了偏差。
数据集:ACE。
控制设置:在控制设置中,我们给模型访问ground-truth触发词提及。我们与Huang and Ji的SS-VQ-VAE模型和Shen等人的球形潜伏聚类模型(spherical latent clustering model)进行了比较。由于这两个模型最初是在不同的实例集上运行的,我们重新实现了这些方法,以使用ACE中的gold-standard触发词提及。
端到端的设置:在我们系统的端到端设置中,我们将所有非助动词视为候选触发词提及。对于这10种已知类型,如果带标注的触发词与候选触发词提到的其中一个匹配,则将该实例视为标记。所有剩余的候选触发词都被视为未知,我们设置未知类型的数量 K = 100 K = 100 K=100。在此设置下,我们与ETypeClus的完整管道进行了比较。
Accuracy、BCubed-F1、V measure、Adjusted Rand Index(ARI)。Accuracy是通过使用Jonker-Volgenant算法找到预测聚类和真实聚类之间的最大匹配来计算的。
我们使用bert-base-uncase作为我们的基准编码器。投影网络 f f f实现为两层MLP,维度为768-256-256,ReLU激活函数。分类器头也被实现为两层MLP,维度为 256 − 256 − C 256-256-C 256−256−C,其中 C C C是已知类型或未知类型的数量。有关其他超参数,请参见附录A部分。
我们呈现关系发现的结果如表3所示。而所有模型都受益于将关系知识从已知类型转移到未知类型,RSN将聚类步骤从表示步骤中分离出来,因此与RoCORE和我们的模型不同,表示没有对聚类进行高度优化。与RoCORE相比,我们的模型(1)采用了多视图表示;(2)删除了面向关系的聚类模块;(3)使用了一个仅已知类的更简单的预训练过程。虽然训练过程简化了,但同时使用token特征和mask特征可以提高模型的有效性。
在表4中的事件类型发现任务中,我们表明我们的模型比不使用已知类型的无监督方法(如球形潜在聚类模型(spherical latent clustering model))具有很大的优势。在执行迁移学习的模型中,SS-VQ-VAE没有对未知类采用强聚类目标。在端到端环境中,我们的模型仍然优于之前的工作。然而,端到端(end-to-end)性能和受控(controlled)性能之间的差距表明,在将该模型应用于现实之前,可能需要对触发词进行额外的处理。在人工评估表5中,标注人员判断发现的70%的集群在语义上是一致的,而ETypeClus管道中的集群的这一比例为59%。
不同的视图:我们将我们的完整模型与获得不同视图的几个消融进行比较,如表6所示。变体A和B只使用一个视图来表示实例,显示了联合训练的优势。我们进一步尝试用不同的方法来构建这两个视图。变体C首先计算实例的token表示,然后应用两个不同的dropout函数来构造两个视图。这种dropout操作可以作为任务不可知的数据增强,已被证明对表示学习有效。变体D使用两种不同类型的抽象提示符为同一个实例构造两种表示。这两种变体都比单一视图变体更有效,但不如将token视图和mask视图组合在一起有效。
模型设置:在表7中,我们将完整模型的性能与省略了预训练阶段和一致性损失的变体进行了比较。在已知类型上对模型进行预训练对模型的最终性能至关重要。一致性损失(consistency loss)虽然有用,但对精度的贡献并不大,而是减轻了模型在epoch上的振荡。
聚类方式:在表9中,我们在我们的框架下试验了不同的聚类方法。所有实现都来自sklearn库。对于光谱聚类变体(spectral clustering variant),我们使用默认的径向基函数(radial basis function,RBF)核来计算亲和矩阵(affinity matrix),而对于其他聚类方法,我们使用欧几里德距离来计算亲和矩阵。这种度量差异可能解释了为什么谱聚类(spectral clustering)表现不佳。虽然DBSCAN和Agglomerative-Ward都实现了相当好的性能,但我们观察到DBSCAN对其eps参数相当敏感,该参数定义了两个样本之间的最大距离,其中一个样本被认为是另一个样本的邻域。实际上,对于不同的随机种子,根据最近邻距离的分布,需要设置不同的参数。一般来说,k-means聚类对于我们的用例来说既稳定又有效。请注意,我们的模型和ROCORE都使用k-means聚类来获取伪标签。
预测类型命名:在表8中,我们展示了由我们的模型产生的预测类型名称。虽然我们的模型并不直接依赖于这些名称(而是[MASK]嵌入的相似性)来执行聚类,但预测可以深入了解模型的内部工作原理。例如,per:cause_of_death集群的预测名称与疾病密切相关。相比之下,下面的例子,“Assaf Ramon,21, died on Sunday when the F-16 fighter jet he was flying crashed was abstracted to names such as death, rotor, life, loss and as a result, was not included as part of the cluster.”。
关系发现:在图3中,我们检查了预测关系聚类中的差异。在第一个关系city_of_death中,ROCORE错误地将city_of_birth的许多实例合并到目标集群中。这两种关系类型不仅共享相同的实体类型(人、城市),而且还可以涉及完全相同的实体,例如Jerusalem。由于ROCORE主要依赖token特征来进行预测,具有共享实体的实例具有很高的相似性,这将错误传播到其他实例。在第二个示例中,我们观察到,这两个模型在更常规的情况下都能很好地工作,但当涉及到“hunger strike”这样的罕见值时,只有我们的模型能正确地将其识别为 cause_of_death。
事件发现:我们在表10的受控设置下显示了我们的算法预测的事件类型集群。我们的模型能够处理(1)不同的触发器(diverse trigger),例如“chosen”、“appoint”和“becoming”都是指Start-Position事件类型;(2)不明确的触发器(ambiguous trigger),如“becoming”和“filled”不能在不参考上下文的情况下分配给事件类型;(3)多词触发(multi-word triggers),如“take into custody”指“arrest”。在Start-Position集群中,我们看到了一些错误分类的提名实例。这两种事件类型是相似的,因为它们都涉及一个人和一个职位/头衔,不同的是这个人是否已经被任命该职位。
剩下的挑战:Abstract types。来自FewRel数据集的“part_of”、“instance_of”和“same_as”等关系类型是高度抽象的,可以与各种类型的实体相关联。事实上,这种关系通常最好在主词检测(hypernym detection)、分类学构建(taxonomy constrcution)或同义词识别(synonym identification)。
粒度级别不一致(Misaligned level of granularity)。我们观察到,自动诱导的集群有时与人工注释定义的集群不在同一级别的粒度上。例如,发现的 per:cause_of_death 集群更像 per:disease_of_death,几个与业务相关的事件Start-Org、End-Org和Merge-Org被组合到一个集群中。这需要能够产生多级类型或考虑人工反馈的模型(用户可以指定是否需要进一步拆分集群)。
关系类型发现:这个方向的早期工作将关系表示为词汇模式或句法路径的集群。一波新的方法使用学习关系表示,通常将关系定义为所涉及实体的函数。RSN和的一个关键观察是关系知识从已知关系类型转移到新关系类型的可能性。在这项工作中,我们还采用了这种转换设置,并引入了一种新的抽象思想:如果关系集群与人类概念很好地一致,那么它是有意义的。
事件类型发现:我们的事件发现任务类似于SemEval 2019中的动词聚类任务,后者需要将上下文中的动词映射到语义框架。ETypeClus将事件表示为(predicate,object)对,并在此类P-O对上设计了基于重建的聚类方法。SS-VQ-VAE利用矢量量化变分自编码器模型来利用已知类型。
本文研究了类型发现问题:从给定的语料库中自动识别和抽取新的关系和事件类型。我们提出利用类型抽象,在这里,模型被提示命名类型,作为数据的另一种视图。我们设计了一个联合训练框架,并证明了我们的框架在关系和事件类型发现设置中都能很好地工作。目前,我们假设新类型与旧类型是不关联的,并且该模型的操作类似于迁移学习设置。虽然可以很容易地扩展模型来处理新类型和旧类型,但在这个方向上可能需要进行更多的分析。一个潜在的方向是探索一个持续学习的环境,在那里新的类型可以定期出现。
在本文中,我们研究了英语数据集,主要是新闻专线类型的数据集。尽管我们的方法并不严格限制于英语,但诱导输入提示的设计将需要一些目标语言的先验知识。
对于关系和事件类型发现,模型都需要候选实体对或触发词的输入。如表4所示,受控设置和端到端设置之间的模型性能存在很大差距(尽管这可能部分归因于不完整的标注和我们简单的候选抽取过程)。这将限制该模型在现实世界中的应用,我们认为这应该是未来研究的重点。
现。