【自然语言处理】【信息抽取】UIE:用于通用信息抽取的统一结构生成

用于通用信息抽取的统一结构生成
《Unified Structure Generation for Universal Information Extraction》

论文地址:https://arxiv.org/pdf/2203.12277.pdf

一、简介

​ 信息抽取( IE \text{IE} IE)的目标是从无结构化文本中识别和结构化用户指定的信息。 IE \text{IE} IE任务由于不同的目标(实体、关系、事件、情感等)、不同的结构(spans、triplets、record等)和特定的需求模式而高度的多样性。当前,大多数的 IE \text{IE} IE方法都是针对具体的任务,对于不同的 IE \text{IE} IE任务会有专用的架构、独立的模型、特定的知识来源。

二、通用信息抽取的统一结构生成

​ 信息抽取的任务可以被形式化为 text-to-structure \text{text-to-structure} text-to-structure的问题。本文的目标是通过单个框架将不同的 IE \text{IE} IE任务统一建模为 text-to-structure \text{text-to-structure} text-to-structure任务,即在统一的模型中共享相同的底层操作以及不同的转换能力。正式来说,给定一个预定义模式 s s s和文本 x x x,通用 IE \text{IE} IE模型需要生成一个模式 s s s指明的文本中 x x x所包含结构化信息。

​ 这里主要存在两个挑战。首先,由于 IE \text{IE} IE任务的多样性,有许多不同的目标结构需要抽取,例如:实体、关系和事件等。其次, IE \text{IE} IE任务通常针对不同的需求需要使用不同的schema,因此需要自适应的控制抽取过程。

​ 本小节描述了如何在统一框架内学习和执行各种 IE \text{IE} IE任务,称该框架为 UIE \text{UIE} UIE。具体来说,设计了结构化抽取语言 SEL \text{SEL} SEL来将不同的抽取结构进行统一编码,即将实体、关系和事件编码成统一表示。然后,设计了结构化schema指导器 SSI \text{SSI} SSI,其是一个基于schema的prompt机制,用于控制 UIE \text{UIE} UIE模型如何抽取、如何关联和如何生成。

1. 用于统一结构编码的结构化抽取语言 SEL \text{SEL} SEL

请添加图片描述

​ 基于上面的讨论, IE \text{IE} IE结构生成能够被分解为两个原子操作。

  • 定位(spotting):从文本中定位目标片段,例如:实体和事件中的触发词。
  • 关联(associating):按照预定义的期望将不同的信息片段关联在一起,例如实体对间的关系;

​ 不同的 IE \text{IE} IE结构能够通过原子结构生成操作进行组合。

​ 具体来说,设计了统一结构抽取语言 SEL \text{SEL} SEL,该语言能够通过 spotting-associating \text{spotting-associating} spotting-associating结构编码不同的 IE \text{IE} IE结构。如上图 ( a ) (a) (a)所示,每个 SEL \text{SEL} SEL表达式包含三种类型的语义单元:

​ (1) SPOTNAME \text{SPOTNAME} SPOTNAME:表示原始文本中需要被定位信息的类型;

​ (2) ASSONAME \text{ASSONAME} ASSONAME:表示原始文本中需要被抽取的、特定类型的关联;

​ (3) INFOSPAN \text{INFOSPAN} INFOSPAN:表示原始文本中需要被定位或者关联的文本片段;

​ 上图 ( b ) (b) (b)展示了 SEL \text{SEL} SEL如何表示实体、关系和事件的结构。其中包含三个实体,每个实体都使用一个 spotting \text{spotting} spotting结构表示,即 person:Steve \text{person:Steve} person:Steve organization:Apple \text{organization:Apple} organization:Apple time:1997 \text{time:1997} time:1997 work for \text{work for} work for表示实体 Steve \text{Steve} Steve Apple \text{Apple} Apple间的一个关系。此外,事件也可以被表示成关联结构。事件的 trigger \text{trigger} trigger是一个 spotting \text{spotting} spotting结构 "start-postion:became" \text{"start-postion:became"} "start-postion:became",事件的 arguments \text{arguments} arguments则是被触发词关联的三个结构: (employee,Steve) \text{(employee,Steve)} (employee,Steve) (employer,Apple) \text{(employer,Apple)} (employer,Apple) (time,1997) \text{(time,1997)} (time,1997)

SEL \text{SEL} SEL具有如下优势:

​ (1) 能够统一编码各种 IE \text{IE} IE结构,因此能将不同的 IE \text{IE} IE任务统一建模为 text-to-structure \text{text-to-structure} text-to-structure过程;

​ (2) 使用统一结构高效表示所有的抽取结果,天然适合执行联合抽取;

​ (3) 输出结构紧密,大大减低了编码的复杂度;

​ 举例来说,实体识别和事件检测两种不同的任务都可以使用相同的语法 (SpotName: InfoSpan) \text{(SpotName: InfoSpan)} (SpotName: InfoSpan)。此外,关系抽取和事件抽取分别是二元结构 entity-relation-entity \text{entity-relation-entity} entity-relation-entity N N N元结构 event-arguments \text{event-arguments} event-arguments,但它们都能够使用语法 (SpotName: InfoSapn(AssName: InfoSpane),...) \text{(SpotName: InfoSapn(AssName: InfoSpane),...)} (SpotName: InfoSapn(AssName: InfoSpane),...)。这种统一的结构化抽取语言能够在不设计任务相关结构的情况下,使 UIE \text{UIE} UIE能够从不同的 IE \text{IE} IE任务中学习。

2. 用于可控 IE \text{IE} IE结构生成的结构化Schema指导器 SSI \text{SSI} SSI

请添加图片描述

UIE \text{UIE} UIE通过使用 SEL \text{SEL} SEL来为不同的 IE \text{IE} IE任务生成统一的结构。但是,不同的 IE \text{IE} IE任务具有不同的schemas,因此如何在抽取过程中自适应的生成期望的信息是一个挑战。例如,给定一个句子 Steve became CEO of Apple in 1997. \text{Steve became CEO of Apple in 1997.} Steve became CEO of Apple in 1997.,期望生成三个实体结构 ((person: Steve)(organization: Apple)(Time: 1997)) \text{((person: Steve)(organization: Apple)(Time: 1997))} ((person: Steve)(organization: Apple)(Time: 1997))和一个事件结构 (start position: became(employee: Steve)(employer: Apple)) \text{(start position: became(employee: Steve)(employer: Apple))} (start position: became(employee: Steve)(employer: Apple))。为了能够实现这个目标,本文提出了结构化schema指导器 SSI \text{SSI} SSI,其是一个基于schema的prompt机制,用于控制模型来确定哪些信息需要被定位,哪些信息需要被关联。

​ 上图展示了整个 UIE \text{UIE} UIE框架。正式来说, UIE \text{UIE} UIE SSI(s) \text{SSI(s)} SSI(s)和文本序列 (x) \text{(x)} (x)作为输入,并生成一个 SEL(y) \text{SEL(y)} SEL(y)
y = UIE ( s ⊕ x ) (1) y=\text{UIE}(s\oplus x)\tag{1} y=UIE(sx)(1)
其中, x = [ x 1 , … , x ∣ x ∣ ] x=[x_1,\dots,x_{|x|}] x=[x1,,xx]是文本序列, s = [ s 1 , … , s ∣ s ∣ ] s=[s_1,\dots,s_{|s|}] s=[s1,,ss]是结构化schema指导器,且 y = [ y 1 , … , y ∣ y ∣ ] y=[y_1,\dots,y_{|y|}] y=[y1,,yy] SEL \text{SEL} SEL序列。

2.1 结构化Schema指导器 SSI \text{SSI} SSI

​ 结构化Schema指导器 SSI \text{SSI} SSI是由基于schema的prompt构成,并使用其作为生成的前缀。

​ 具体来说,与 spotting-association \text{spotting-association} spotting-association结构相对于, SSI \text{SSI} SSI包含三种类型的片段。

​ (1) SPOTNAME \text{SPOTNAME} SPOTNAME:特定信息抽取任务中的需要被定位信息的名称,例如 NER \text{NER} NER任务中的"person";

​ (2) ASSONAME \text{ASSONAME} ASSONAME:关联名称,例如关系抽取中的"work for";

​ (3) 特殊符号 [spot],[asso],[text] \text{[spot],[asso],[text]} [spot],[asso],[text]:这些符号被添加到 SPOTNAME \text{SPOTNAME} SPOTNAME ASSONAME \text{ASSONAME} ASSONAME和输入文本之前;

SSI \text{SSI} SSI中的所有tokens都会被拼接并放在原始序列之前。如上图所示,对于 UIE \text{UIE} UIE的整个输入形式为
s ⊕ x = [ s 1 , s 2 , … , s ∣ s ∣ , x 1 , x 2 , … , x ∣ x ∣ ] = [ [spot] , … , [spot] , … , [asso] , … , [asso] , … , [text] , x 1 , x 2 , … , x ∣ x ∣ ] (2) \begin{aligned} s\oplus x=&[s_1,s_2,\dots,s_{|s|},x_1,x_2,\dots,x_{|x|}] \\ =&[\textbf{[spot]},\dots,\textbf{[spot]},\dots,\\ &\textbf{[asso]},\dots,\textbf{[asso]},\dots,\\ &\textbf{[text]},x_1,x_2,\dots,x_{|x|}] \end{aligned}\tag{2} sx==[s1,s2,,ss,x1,x2,,xx][[spot],,[spot],,[asso],,[asso],,[text],x1,x2,,xx](2)
举例来说,若按照关系模型"the person work for the company"来从句子中抽取信息,那么 SSI \text{SSI} SSI就位 [spot] person [spot] company [asso] work for [text] \text{[spot] person [spot] company [asso] work for [text]} [spot] person [spot] company [asso] work for [text]。给定一个记为 s s s SSI \text{SSI} SSI,那么 UIE \text{UIE} UIE首先会编码输入文本 x x x,然后通过编码器-解码器风格的架构,以线性化 SEL \text{SEL} SEL的方式来生成目标结构 y y y

​ 基于schema的prompt能够:

​ (1) 能够高效的指导 UIE \text{UIE} UIE进行 SEL \text{SEL} SEL生成,因此通用的 IE \text{IE} IE能够能够被转移到新的 IE \text{IE} IE任务中;

​ (2) 能够自适应的控制定位哪些信息、关联哪些信息和生成哪些信息,所以不同类型任务和标签的知识可以被更好的共享;

2.2 基于 UIE \text{UIE} UIE的结构生成

​ 给定 SSI \text{SSI} SSI s和文本x作为输入, UIE \text{UIE} UIE通过生成线性化的 SEL \text{SEL} SEL来抽取目标信息。本文使用编码器-解码器风格的架构来执行 text-to-SEL \text{text-to-SEL} text-to-SEL的过程。给定一个文本序列 x x x和schema指导器 s s s UIE \text{UIE} UIE首先会计算每个token的隐藏表示 H = [ s 1 , … , s ∣ s ∣ , x 1 , … , x ∣ x ∣ ] \textbf{H}=[s_1,\dots,s_{|s|},x_1,\dots,x_{|x|}] H=[s1,,ss,x1,,xx]
H = Encoder ( s 1 , … , s ∣ s ∣ , x 1 , … , x ∣ x ∣ ) (3) \textbf{H}=\text{Encoder}(s_1,\dots,s_{|s|},x_1,\dots,x_{|x|}) \tag{3} H=Encoder(s1,,ss,x1,,xx)(3)
其中, Encoder ( ⋅ ) \text{Encoder}(\cdot) Encoder()是一个Transformer编码器。然后, UIE \text{UIE} UIE会以自回归的方式将输入解码为线性化的 SEL \text{SEL} SEL。解码的第 i i i步, UIE \text{UIE} UIE会生成 SEL \text{SEL} SEL序列中的第 i i i个token y i y_i yi,并解码出状态 h i d \textbf{h}_i^d hid
y i , h i d = Decoder ( [ H ; h 1 d , … , h i − 1 d ] ) (4) y_i,\textbf{h}_i^d=\text{Decoder}([\textbf{H};\textbf{h}_1^d,\dots,\textbf{h}_{i-1}^d]) \tag{4} yi,hid=Decoder([H;h1d,,hi1d])(4)
其中, Decoder ( ⋅ ) \text{Decoder}(\cdot) Decoder()是一个Transformer解码器,其预测条件概率 p ( y i ∣ y < i , x , s ) p(y_i|y_{<i},x,s) p(yiy<i,x,s)。最终,当输出为 <eos> \text{<eos>} <eos> Decoder ( ⋅ ) \text{Decoder}(\cdot) Decoder()就完成了预测。然后,将预测的 SEL \text{SEL} SEL转换为需要抽取的信息。

​ 先前的 IE \text{IE} IE将标签看作是具体的符号, UIE \text{UIE} UIE则通过 text-to-structure \text{text-to-structure} text-to-structure生成范式将标注转换成了自然语言中的token。通过将标签和结构转换为语言, UIE \text{UIE} UIE能够有效的将预训练语言模型 BART \text{BART} BART T5 \text{T5} T5中的知识进行迁移,并且相关的任务能够轻易的共享这些知识。

三、预训练

​ 本小节主要包括:(1) 如何预训练大规模的 UIE \text{UIE} UIE模型,其能够为不同的 IE \text{IE} IE任务捕获通用的 IE \text{IE} IE能力;(2) 如何微调 UIE \text{UIE} UIE来适应不同类型的 IE \text{IE} IE任务。

​ 具体来说,作者先收集了几个大规模的数据集(包括:结构化的知识库、无结构化的文本以及平行语料);然后,将这些异构的数据集进行统一并预训练 UIE \text{UIE} UIE模型;最后,通过请求式的微调来使预训练模型 UIE \text{UIE} UIE适应下游的各种 IE \text{IE} IE任务。

1. 语料构建

UIE \text{UIE} UIE需要编码文本,映射文本到结构,并解码出有效的结构。因此,作者从网络中收集了大规模的预训练语料:

D p a i r \mathcal{D}_{pair} Dpair是一个 text-structure \text{text-structure} text-structure平行语料,每个实例都是一个平行对,即token序列 x x x和结构化记录 y y y。作者通过使用英文 Wikipedia \text{Wikipedia} Wikipedia Wikidata \text{Wikidata} Wikidata进行对齐,从而收集了大规模的平行 text-structure \text{text-structure} text-structure对。 D p a i r \mathcal{D}_{pair} Dpair被用于预训练 UIE \text{UIE} UIE text-to-structure \text{text-to-structure} text-to-structure迁移能力。

D r e c o r d \mathcal{D}_{record} Drecord是一个结构化的数据集,每个实例都是一个结构化的记录 y y y。作者从 ConceptNet \text{ConceptNet} ConceptNet Wikidata \text{Wikidata} Wikidata中收集结构化数据。 D r e c o r d \mathcal{D}_{record} Drecord被用来预训练 UIE \text{UIE} UIE的结构化解码能力。

D t e x t \mathcal{D}_{text} Dtext是无结构化文本数据集。作者使用英文 Wikipedia \text{Wikipedia} Wikipedia中的所有普通文本。 D t e x t \mathcal{D}_{text} Dtext被用来预训练 UIE \text{UIE} UIE的语义编码能力。

2. 预训练

2.1 使用 D p a i r \mathcal{D}_{pair} Dpair进行 text-to-structure \text{text-to-structure} text-to-structure预训练

​ 为了能够使模型捕获基本的 text-to-structure \text{text-to-structure} text-to-structure映射能力,这里是以 D p a i r = { ( x , y ) } \mathcal{D}_{pair}=\{(x,y)\} Dpair={(x,y)}来预训练模型 UIE \text{UIE} UIE。具体来说,对于给定的平行样本对 ( x , y ) (x,y) (x,y),抽取需要定位的类型 s s + s_{s+} ss+ y y y中的关联类型 s a + s_{a+} sa+来构成正样本 s + = s s + ∪ s a + s_+=s_{s+}\cup s_{a+} s+=ss+sa+。然而,仅使用这样的正样本来训练 UIE \text{UIE} UIE,模型仅仅会简单的记住预训练数据中的三元组。为了能够学习到通用的映射能力,这里也自动构造了负样本。即采样负的定位类型 s s − s_{s-} ss和负的关联类型集合 s a − s_{a-} sa,然后拼接出最终的数据集 s m e t a = s + ∪ s s − ∪ s a − s_{meta}=s_+\cup s_{s-}\cup s_{a-} smeta=s+sssa

​ 举例来说,"person"和“word”在记录 "((person: Steve)(work for: Apple))" \text{"((person: Steve)(work for: Apple))"} "((person: Steve)(work for: Apple))"中是正样本,并且采样"vehicle"和"located in"作为样样本。最后, text-to-structure \text{text-to-structure} text-to-structure预训练目标函数为
L P a i r = ∑ ( x , y ) ∈ D p a i r    − log    p ( y ∣ x , s m e t a ; θ e , θ d ) (5) \mathcal{L}_{Pair}=\sum_{(x,y)\in\mathcal{D}_{pair}}\;-\text{log}\;p(y|x,s_{meta};\theta_e,\theta_d) \tag{5} LPair=(x,y)Dpairlogp(yx,smeta;θe,θd)(5)
其中, θ e \theta_e θe θ d \theta_d θd是编码器和解码器的参数。

2.2 使用 D r e c o r d \mathcal{D}_{record} Drecord进行结构化生成预训练

​ 为了预训练 UIE \text{UIE} UIE对于由 SEL \text{SEL} SEL schema \text{schema} schema定义结构的生成能力,这里使用 D r e c o r d \mathcal{D}_{record} Drecord来预训练 UIE \text{UIE} UIE。将 UIE \text{UIE} UIE的解码器作为一个结构化语言模型,且 D r e c o r d \mathcal{D}_{record} Drecord中的每个记录都是一个 SEL \text{SEL} SEL表达式,则
L R e c o r d = ∑ y ∈ D r e c o r d    − log    p ( y i ∣ y < i ; θ d ) (6) \mathcal{L}_{Record}=\sum_{y\in\mathcal{D}_{record}}\;-\text{log}\;p(y_i|y_{<i};\theta_d) \tag{6} LRecord=yDrecordlogp(yiy<i;θd)(6)
通过为结构化生成进行预训练,解码器能够捕获 SEL \text{SEL} SEL的规律性和不同标签间的交互。

2.3 使用 D t e x t \mathcal{D}_{text} Dtext改进语义表示

​ 在 text-to-structure \text{text-to-structure} text-to-structure预训练的过程中,继续在 D t e x t \mathcal{D}_{text} Dtext上使用 MLM \text{MLM} MLM来预训练 UIE \text{UIE} UIE,从而改进 UIE \text{UIE} UIE的语义表示能力。
L T e x t = ∑ x ∈ D t e x t    − log    p ( x ′ ′ ∣ x ′ ; θ e , θ d ) (7) \mathcal{L}_{Text}=\sum_{x\in\mathcal{D}_{text}}\;-\text{log}\;p(x''|x';\theta_e,\theta_d) \tag{7} LText=xDtextlogp(xx;θe,θd)(7)
其中, x ′ x' x是被遮蔽部分token的原文本, x ′ ′ x'' x是被遮蔽的token片段。这个预训练能够有效的缓解特殊语义符号 SPOTNAME \text{SPOTNAME} SPOTNAME ASSONAME \text{ASSONAME} ASSONAME的语义的灾难性遗忘。

2.4 最终的预训练损失函数

​ 使用 T5-v1.1-base \text{T5-v1.1-base} T5-v1.1-base T5-v1.1-large \text{T5-v1.1-large} T5-v1.1-large来初始化 UIE-base \text{UIE-base} UIE-base UIE-large \text{UIE-large} UIE-large。最终的目标函数合并了上面的所有任务
L = L P a i r + L R e c o r d + L T e x t (8) \mathcal{L}=\mathcal{L}_{Pair}+\mathcal{L}_{Record}+\mathcal{L}_{Text} \tag{8} L=LPair+LRecord+LText(8)
在实现中,将所有的预训练数据都表示为三元组。对于 D t e x t \mathcal{D}_{text} Dtext中的文本数据 x x x,构建三元组 ( None , x ′ , x ′ ′ ) (\text{None},x',x'') (None,x,x),其中 x ′ x' x是被遮蔽部分token的原始文本, x ′ ′ x'' x是被遮蔽的token片段。对于 D p a i r \mathcal{D}_{pair} Dpair中的 text-record \text{text-record} text-record数据 ( x , y ) (x,y) (x,y),通过为每个 text-record \text{text-record} text-record采样meta-schema来构造三元组 ( s , x , y ) (s,x,y) (s,x,y)。对于 D r e c o r d \mathcal{D}_{record} Drecord中的记录数据 y y y,采用 ( None,None , y ) (\text{None,None},y) (None,None,y)作为输入三元组。

3. 按需微调

请添加图片描述

​ 给定一个预训练好的 UIE \text{UIE} UIE模型,通过模型微调能够快速调整模型来适应不同的 IE \text{IE} IE任务和设置。给定一个标注好的语料 D t a s k = ( s , x , y ) \mathcal{D}_{task}={(s,x,y)} Dtask=(s,x,y),使用交叉熵损失函数来微调 UIE \text{UIE} UIE
L F T = ∑ ( s , x , y ) ∈ D T a s k    − log    p ( y ∣ x , s ; θ e , θ d ) (9) \mathcal{L}_{FT}=\sum_{(s,x,y)\in\mathcal{D}_{Task}}\;-\text{log}\;p(y|x,s;\theta_e,\theta_d) \tag{9} LFT=(s,x,y)DTasklogp(yx,s;θe,θd)(9)
为了缓解自回归模型在解码过程中的曝光偏差,设计了一种 Rejection \textbf{Rejection} Rejection机制来进行更加有效的微调。具体来说,给定一个实例 ( s , x , y ) (s,x,y) (s,x,y),先使用 SEL \text{SEL} SEL来编码 y y y,然后以概率 p ϵ p_{\epsilon} pϵ随机的向 SPOTNAME \text{SPOTNAME} SPOTNAME ASSONAME \text{ASSONAME} ASSONAME中插入 [ NULL ] [\text{NULL}] [NULL],来构造负样本 ( SPOTNAME,[NULL] ) (\text{SPOTNAME,[NULL]}) (SPOTNAME,[NULL]) ( ASSONAME,[NULL] ) (\text{ASSONAME,[NULL]}) (ASSONAME,[NULL])。举例来说,上表中 f a c i l i t y facility facility在prompt中是负spot,也就是在矩阵"Steve became CEO of Apple in 1997"中并没有 f a c i l i t y facility facility实体。因此,随机将噪音 "(facility:[NULL])" \text{"(facility:[NULL])"} "(facility:[NULL])"加入至record中。通过这种方式, UIE \text{UIE} UIE能够通过生成 [NULL] \text{[NULL]} [NULL]来学习拒绝错误的生成。

四、实验

请添加图片描述

五、总结

  • 通过生成模型来统一不同的信息抽取任务;
  • 为不同的任务设计了统一的抽取语言;
  • 通过prompt来控制模型的生成行为;
  • 展示了一种预训练这种模型的方式;
  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BQW_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值