第5章〓基于span级对比表示学习的软件知识实体和关系联合抽取方法 5.1引言 第4章在软件知识实体识别的基础上,根据预定义的实体关系类型对软件知识实体对的语义关系进行分类,实现了软件知识实体和关系的抽取任务。此类基于流水线式的方法将实体抽取和关系抽取建模为两个彼此独立的任务,模型实现较为简单和灵活,但忽略了两个任务的彼此交互和关联,带来了一些特有的问题[36]。首先,由于实体抽取和关系抽取的串行任务关系,上一阶段任务的质量好坏直接影响下一阶段任务的性能。其次,实体抽取和关系抽取采用分开独立建模,模型训练过程中的参数不共享、信息不交互,造成语义信息和依赖信息丢失,会产生没有匹配关系的冗余实体,使模型的错误率增大,影响任务的整体性能。 针对上述问题,实体和关系联合学习方法通过端到端的方式将实体抽取任务和关系分类任务建模为一个任务,利用联合损失函数来增强任务关联和信息共享,模型的整体性能得到了提升,发展成信息抽取任务的主流方法[37,38]。 根据建模对象的不同,基于联合学习方法的实体关系抽取主要分为基于参数共享的方法和基于序列标注的方法。其中,基于参数共享的方法[52,53]能缓解错误传播和任务间关系依赖被忽视的问题,但由于该类方法本质上还是继承了两个子任务之间的先后关系,会产生没有匹配关系的冗余实体,影响联合抽取的质量。针对冗余实体问题,基于序列标注的方法[55,56]将联合学习模型转换为序列标注模型,从而实现实体和关系同时抽取[37]。但是,该类方法通常属于Token级的任务,对实体和关系的标签归属进行了限定,造成重叠实体的关系分类依然存在问题。为解决上述问题,基于span的方法[148,149]将句子序列的一个或多个单词建模为span单元,生成所有可能的span,并从span级对句子序列进行建模表示。由于不受句子序列的顺序限制,基于span的方法能对重叠实体进行选择和独立特征表示,较好地缓解了Token级句子序列建模产生的错误传播问题和实体重叠问题。 软件知识社区文本是非结构化的用户生成内容,存在领域实体语义关系复杂的情况,采用传统的序列建模方式进行软件知识实体和关系抽取会带来实体重叠和错误传播问题,影响软件知识图谱构建的质量。当句子中包含多个相互重叠的实体时,就会出现实体重叠问题。例如,在句子序列“GetHashCode is Method of Base Object Class of .NET Framework”中,“.NET” and “.NET Framework”就是重叠的实体。 因此,针对传统流水线方法存在的弊端和软件知识社区文本存在的实体重叠问题,我们提出一种基于span级对比表示学习的软件知识实体和关系联合抽取方法。一方面,从建模对象的角度以span为单元对句子序列进行建模,能避免Token级句子序列建模的弊端,有效缓解实体和关系联合抽取任务的实体重叠问题。另一方面,从特征学习的角度在实体抽取和关系抽取两个任务中引入对比表示学习的思想,可以获得实体span和实体对更具区别性的特征表示,提升分类预测的准确性。具体地,我们的主要工作如下: (1) 针对流水线方法存在的任务依赖问题和软件知识社区文本存在的实体重叠问题,提出一种基于span级对比表示学习的软件知识实体和关系联合抽取模型,从软件知识社区的用户生成内容中联合抽取软件知识实体及其语义关系。具体而言,在span表示层将句子序列建模为span单元,并生成丰富的实体span正、负样本,以避免无法选择重叠实体的问题。 (2) 在实体分类层和关系分类层,提出有监督的实体对比表示学习和关系对比表示学习,通过数据增强和对比损失构建,获取实体、实体对更适于分类的特征表示,从而提升软件知识实体和关系联合抽取的性能。 (3) 设计了一个联合训练算法获取模型训练最优解,并基于软件知识社区文本构建了涵盖8个实体类型和5个关系类型的软件知识实体和关系联合抽取标注数据集。 5.2相关工作 5.2.1基于span的信息抽取 传统基于序列标注的实体和关系抽取方法大多属于Token级的任务,受限于固定单一的表示和模型的序列特征,模型处理过程中会产生级联错误,并无法解决实体和关系重叠问题。为解决上述问题,相继提出基于span的方法,并得到广泛应用。基于span的信息抽取方法将句子序列中的一个或多个单词作为span单元,生成所有可能的span,并在span级对句子序列进行建模。该类方法克服了句子序列固有的序列特征,可以选择重叠的实体并表示特征,缓解了Token级句子序列建模带来的错误传播和实体重叠问题。 Dixit等[148]利用BiLSTM提出一个基于span的模型用于实体和关系联合抽取,并在ACE2005数据集上取得较好的性能。Luan等[149]提出一种基于共享span表示的多任务分类框架,通过实体识别、关系分类和指代消解等任务,在科学文献摘要数据集SciERC上构建科学文献知识图谱。为了增强不同任务间的交互,Luan等[150]提出一种基于动态span图的信息抽取框架DYGIE,该框架通过图传播的方式捕获span间的交互信息,在不需要额外句法分析和处理的情况下,提升了实体识别和关系抽取的性能。Wadden等[151]在DYGIE框架的基础上,将编码器替换成BERT,并通过对文本span进行枚举、精炼和打分捕获局部和全局上下文,在实体识别、关系抽取和事件抽取上获得较好的性能。Eberts等[152]以预训练语言模型BERT为核心,通过强负样本采样、span过滤和局部上下文表示等机制,解决了部分实体重叠问题,提升了实体和关系联合抽取模型的预测精度。Ding等[153]将实体和关系联合抽取方法应用到特定军事领域,提出一个融合span方法和图结构的混合模型,并结合特定领域的词汇和句法知识提升模型的抽取性能。 5.2.2对比表示学习在自然语言处理的应用 对比表示学习作为一种判别性的自监督学习,利用数据样本的相似性或差异性来学习具有监督信息的编码器; 编码器对同一类型的数据尽可能采用相似的特征表示,对不同类型的数据尽可能采用不同的特征表示,以捕获更适合下游任务的特征表示[91],在自然语言领域、图像领域和图数据领域得到了广泛应用。 在文本表示任务方面,Giorgi等[154]受深度度量学习(Deep Metric Learning,DML)启发,提出了一种基于对比学习的无监督句子特征表示学习方法,并通过实验证明了对比学习在句子表征任务上的可行性。为了得到更好的句子特征表示,Gao等[155]提出一种基于对比表示学习的训练方法,利用Dropout等数据增强方式产生正、负样本数据,通过对比损失函数构建,使得语义相近的样本相距尽可能近,而语义不相似的样本相距尽可能远,从而增强句子向量表示; 并在下游的7个文本语义匹配(Semantic Textual Similarity,STS)任务中取得较好的性能。针对预训练模型BERT “坍缩”问题,美团知识图谱团队[156]提出一种基于对比表示学习的句子表示迁移框架。该框架通过构建对比学习任务,在目标领域的无标签数据集上对BERT预训练模型进行Finetune,使得生成的句子表示更适合下游任务的数据分布。同时,分别在无监督、有监督的情况下对文本语义匹配任务STS进行了验证,实验结果表明该方法的性能均超过基准模型。 在实体和关系抽取任务方面,Peng等[143]为了更好地捕获句子上下文信息和实体类型信息,提出了一种基于实体遮蔽的对比表示学习框架进行关系预训练。该框架利用远程监督的方法通过外部知识图谱生成正、负样本,将具有相同关系的实体对的句子视为正样本,将具有不同关系的实体对的句子视为负样本,并采用随机遮蔽实体的方法进行预训练,获得了较好的关系表示。针对预训练模型不能捕获文本中的事实知识,Qin等[157]提出一种预训练阶段的对比表示学习框架,通过实体判别和关系判别两个对比学习任务增强模型对实体对及其语义关系的理解,在关系提取、阅读理解和实体分类任务上取得了较好的性能。Su等[158]通过同义词替换、随机交换和随机删除等数据增强方式,利用对比表示学习的方法改善了预训练模型BERT的文本表示,进而提升了生物医学关系抽取的效果。 5.3模型与方法 5.3.1任务建模与方法分析 我们提出的基于span级软件知识实体和关系联合抽取方法的任务目标是从非结构化的软件知识社区文本中,自动识别所有可能的软件知识实体span,并预测其对应的实体类型; 再根据预定义的关系类型对实体span对的语义关系进行分类,从而得到软件知识关系三元组。因此,基于span级软件知识实体和关系联合抽取任务可以形式化定义为一个7元组SKG=(X,S,Ye,Yr,δ,ε,NA),其中: X=(x1,x2,…,xn)为软件知识社区文本的句子序列; S=(s1,s2,…,sn)为枚举X产生的一个候选span集; Ye(si)∈δ∪{NA}为预测候选span实例si实体类型的函数,并产生候选软件知识实体集E=(e1,e2,…,e|E|),si=(xi,xi+1,…,xi+k); Yr(ei,ej)∈ε∪{NA}为预测软件知识实体对(ei,ej)语义关系的函数,并产生软件知识实体关系集合R=(r1,r2,…,r|R|),ei,ej∈E; δ为预定义的实体类型集合; ε为预定义的关系类型集合; NA为非实体或者没有语义关系。 例如,给定软件知识社区文本的句子序列“GetHashCode is method of base Object class of.Net Framework.”,软件知识实体和关系联合抽取的目标是准确识别实体对(ei,ej)“GetHashCode”和“.Net Framework”,并预测该实体对之间的语义关系rij为“inclusion”,从而获得软件知识关系三元组〈ei,rij,ej〉。 结合上述软件知识实体和关系联合抽取的任务目标和存在的问题,我们提出一个基于span级对比表示学习的软件知识实体和关系联合抽取模型SCLSKG,其由输入嵌入层、span表示层、实体分类层和关系分类层组成,整体架构图如图51所示。 图51CSSKG模型整体架构图 SCLSKG模型中各层的主要功能如下: 在输入嵌入层,利用软件工程领域的精调预训练语言模型SWBERT对输入句子序列进行特征编码,生成句子序列的动态词向量表示,并作为span表示层的输入。 在span表示层,基于词性过滤机制去除含义较少的停用词,保留动词和名词等实体词汇,生成句子序列所有可能的span表示,为下一步的对比表示学习产生了丰富的实体span正、负样本。 在实体分类层,提出一个span级的实体对比表示学习方法,通过正、负样本增强和实体对比损失函数构建,约束模型学习实体span更好的特征表示,并根据预定义的实体类型对实体span进行分类。 在关系分类层,提出一个关系对比表示学习方法,通过正、负样本增强和关系对比损失函数构建,获得候选实体对更好的特征表示,并根据预定义的关系类型对实体对的语义关系进行预测。 5.3.2输入嵌入层 为了获取不同语境下句子序列的动态词向量表示,从而提升软件知识实体和关系联合预测的准确性,我们利用前面章节已构建的软件工程领域预训练语言模型SWBERT对输入句子序列进行特征编码,捕获句子序列的动态词向量表示。具体过程如下: (1) 对于软件知识社区文本的输入句子序列X=(x1,x2,…,xn),经过基于块的分词、句子序列的首尾添加标志符[CLS]和[SEP],得到句子序列对应的Token序列。 (2) 针对Token序列的每个Token产生Token向量、分割向量和位置向量,三个向量经过求和,得到BERT模型的输入向量表示,E=(E1,E2,…,En)。 (3) 经过特征编码,得到句子序列X的动态词向量表示: H=[h1,h2,…,hn]=SWBERT(x1,x2,…,xn)(5.1) 经过上述预训练语言模型SWBERT编码,得到一个长度为n+1的词向量序列W=(wcls,w1,w2,…,wn),其中,wcls表示整个句子序列的分类信息。由此,获得软件知识实体和关系联合抽取模型SCLSKG的输入嵌入层的词向量表示,并作为span表示层的输入。 5.3.3span表示层 针对软件知识社区文本存在的实体重叠问题,我们参考相关工作[148,152],在软件知识实体和关系联合抽取模型SCLSKG中构建一个面向span级的句子序列表示层,以span为单元对句子序列进行建模表示。通常,基于span的方法采用迭代句子序列中所有单词的方式产生span表示,这样会带来模型算法计算开销太大的问题。 为了提升模型计算效率,使得生成的span更具领域专业性,将对句子序列的单词进行过滤操作,去除含义较少的停用词,保留动词和名词等实体词汇; 并依此生成不同长度的span表示,得到实体span表示的集合S=(s1,s2,…,sn),其中,实体span实例表示为si=(xi,xi+1,…,xi+k),k为span的长度,表示该实体span所包含单词的个数。同时,根据对软件知识社区文本语料的观察,实体span的长度过长,表示实体的可能性降低,会增加模型计算的复杂度,因此k值不宜设置过大。 例如,对于软件知识社区文本的句子序列“GetHashCode is method of base Object class of.Net Framework.”,经过过滤操作后的句子序列为“GetHashCodemethod base Object class.Net Framework.”,进而生成span表示集“GetHashCode”“method”“GetHashCodemethod”“methodbase”“Object”“base Object”“class”“.Net”“.Net Framework”等。 由此,SCLSKG模型通过上述实体span表示层可以生成句子序列对应的实体span表示,并产生了丰富的实体span的正、负样本,为下一步的实体span对比表示学习提供了数据增强方式。 5.3.4实体分类层 我们利用“聚合正样本,分离负样本”的特征提取思想,在实体分类层提出一种实体对比表示学习方法,通过正、负样本数据增强和损失函数构建,约束模型学习实体span更具区别性的特征表示,进而提升实体span分类预测的准确性。因此,在模型的实体分类层包括实体对比表示学习和实体分类两个步骤。 1. 实体对比表示学习 为了利用软件知识实体的标签信息,我们在对比式自监督学习的基础上进行了扩展,提出一种有监督的span级实体对比表示学习方法,获取更适于下游任务的实体span特征表示。有监督的实体对比表示学习区别于自监督对比表示学习,其利用软件知识实体的标签信息(如实体的类型信息),通过特定的数据增强方法生成有关原始数据样本的多个正样本、负样本视图,并利用对比损失函数构建,约束模型学习更适应于软件知识实体分类任务的实体span特征表示,进而提升实体分类的性能。 通常,对比表示学习的通用框架主要包括数据增强、编码器(Encoder)、Projection网络和对比损失函数四个组件[96],下面就有监督实体对比表示学习方法涉及的各个组件进行详细介绍。 (1) 数据增强。数据增强组件是对比表示学习的关键组成部分,它通过数据增强技术随机生成关于原始数据样本的视图,该视图既要与原始数据样本有所区别,又不能区别太大,否则会破坏原始数据样本的结构信息或语义信息,给模型带来太大干扰。自然语言领域相较于图像领域,数据增强方法较为困难,通常有随机删除单词、随机插入单词、随机互换单词和近反义词替换等方法[159]; 但是,这些方法对句子的结构和语义信息会造成干扰,直接应用到实体抽取、关系抽取等下游任务,会造成模型性能下降。 在有监督实体对比表示学习的数据增强组件中,我们结合span表示层产生的实体span表示集,利用软件知识实体的类型标签进行数据增强,生成实体span实例的多个正、负样本。具体地,有监督实体对比表示学习将同一类型的实体span视为正样本,构建实体span正样本集P(i); 将同一batch内的其他类型实体span和非实体span作为负样本,构建实体span负样本集N(i)。 (2) 编码器(Encoder)。在编码器组件中,SCLSKG模型利用预训练语言模型SWBERT将输入的软件知识社区文本句子序列X=(x1,x2,…,xn)转换为动态词向量表示,进而提取文本特征,表示为 hi=f(xi)=SWBERT(xi)(5.2) (3) Projection网络。借鉴Chen[96]在图像领域的工作,SCLSKG模型在Projection网络组件中利用多层感知器将向量表示投射到另一个表示空间,以获得训练阶段更好的特征表示,表示为 zi=g(hi)=W2σ(W1hi)(5.3) 式中: W1和W2为隐层的权重; σ为ReLU激活函数。 此Projection网络组件和向量zi只在对比表示学习的训练过程中使用,训练结束后,将编码器及向量hi用于下游实体分类任务。 (4) 对比损失函数。在对比损失函数组件中,由于自监督对比表示学习的损失函数无法处理实体的类型标签信息,会带来多正样本问题,SCLSKG模型参考Khosla[160]的工作,对自监督对比损失函数进行了扩展,得到有监督实体对比表示学习的损失函数,表示为 Lec=∑i∈B(i)-1|P(i)|∑p∈P(i)logexp(zi·zp/τ)∑n∈N(i)exp(zi·zn/τ)(5.4) 式中: zi为当前实体span实例; zp为zi的正样本实例; zn为zi的负样本实例; B(i)为batch内的数据样本集; |P(i)|为正样本集合的基数; N(i)为负样本集合。 通过以上对比损失函数,使得当前实体span的实例zi与其正样本集的特征一致性最大化; 同时,使得当前实体span的实例zi与其负样本集的特征区别性最大化,进而学习到实体span更好的特征表示。 至此,基于软件知识社区文本的span级实体对比表示学习可以描述为算法51。 算法51span级实体对比表示学习算法 Input:实体span的实例si,预训练语言模型SWBERT, Projection网络g Output:实体span的实例si对应的特征向量hi 1.Begin 2.获取实体span实例si的向量表示hi//式(5.2) 3.将向量hi投射到另一个向量表示空间,获得zi//式(5.3) 4.按实体span数据增强方法,生成zi的正、负样本表示zp,zn 5.计算实体对比损失Lec//式(5.4) 6.更新SWBERT和Projection网络g的参数,使得Lec最小化 7.返回实体span实例si的向量表示hi 8.End 由算法51可知,面向软件知识社区的span级实体对比表示学习的目标是学习实体span更好的特征表示,并将句子序列的实体span特征向量H=(h1,h2,…,hn)作为下游实体分类任务的输入,提升实体span类型预测的性能。 2. 实体分类 实体分类层的目标是对候选实体span的类型进行预测,同时将非实体span进行过滤,可以形式化描述为给定候选实体span的实例si=(xi,xi+1,…,xi+k)和预定义的实体类型集δ,实体分类的目标是将候选实体span的实例si映射到集合δ∪NA,其中,NA表示非实体span,将被模型过滤。 因此,具体的实体分类过程包括以下两个步骤: (1) 向量拼接。通过上述span层的实体对比表示学习,获得候选实体span实例si的最终向量表示为 si=[hi; swidth; wcls](5.5) 式中: hi为对应实体span实例的向量表示; swidth为对应实体span实例长度的向量表示; wcls为特殊的分类信息表示。 (2) 实体类型预测。通过向量拼接操作后,将候选实体span实例的向量表示输入softmax层进行实体类型预测: ei=softmax(Wi·si+bi)(5.6) 式中: Wi为权重矩阵; bi为偏置项。 5.3.5关系分类层 与上述实体分类层的设计思想一致,在获得软件知识实体集后,利用对比表示学习思想,提出一种关系对比表示学习方法,通过正、负样本数据增强和损失函数构建,约束模型学习实体对更适于关系分类的特征表示,进而提高关系分类预测的准确性。因此,在模型的关系分类层包括关系对比表示学习和关系分类两个步骤。 1. 关系对比表示学习 软件知识社区文本的句子序列经过实体抽取后,获得了软件知识实体集E=(e1,e2,…,e|E|)。为了提升软件知识实体关系分类的性能,我们提出一种有监督的span级关系对比表示学习方法,通过特定的数据增强方法和关系对比损失构建,获取候选实体对更适于下游分类任务的特征表示。 与有监督实体对比表示学习方法相比较,有监督关系对比表示学习的编码器(Encoder)和Projection网络保持不变,在数据增强和对比损失函数两个组件上有所不同。 在数据增强组件,有监督关系对比表示学习利用软件知识实体的关系标签信息进行正、负样本划分,将具有相同关系类型的实体对视为正样本,并构建正样本集P(i),将同一batch内具有其他关系类型或没有关系的实体对作为负样本,并构建负样本集N(i)。 因此,在对比损失函数组件中,有监督关系对比表示学习的对比损失函数定义如下: Lrc=∑i∈B(i)-1|P(i)|∑p∈P(i)logexp(zi·zp/τ)∑n∈N(i)exp(zi·zn/τ)(5.7) 式中: zi为当前实体对实例; zp为zi的正样本实例; zn为zi的负样本实例; B(i)为batch内的候选实体对集; |P(i)|为正样本集合的基数; N(i)为负样本集合; τ为温度参数; 符号“”为向量间相似度计算的内积操作。 通过关系对比损失函数的构建,使得当前实体对实例zi与其正样本集的特征一致性最大化; 同时,使得当前实体对实例zi与其负样本集的特征区别性最大化,进而学习到实体对更好的特征表示。 同理,基于软件知识社区文本的span级关系对比表示学习可以描述为算法52。 算法52关系对比表示学习算法 Input:候选实体对实例(si, sj),预训练语言模型SWBERT, Projection网络g Output:候选实体对实例(si, sj)的特征向量hi 1.Begin 2.获取实体对实例(si, sj)的向量表示hi 3.将向量hi投射到另一个向量表示空间,获得zi 4.按实体关系的数据增强方法,生成zi的正、负样本表示zp、zn 5.计算关系对比损失Lrc//式(5.7) 6.更新SWBERT和Projection网络g的参数使得Lrc最小化 7.返回实体对的特征向量表示hi 8.End 由算法52可知,基于软件知识社区文本的span级关系对比表示学习的目标是学习候选实体对更好的特征表示,并作为下游关系分类任务的输入,提升关系类型预测的性能。 2. 关系分类 关系分类层的目标是对候选实体对的关系类型进行预测,可以形式化描述为给定候选实体span集S=(s1,s2,…,sn)、实体对实例si=(xi,xi+1,…,xi+k)和sj=(xj,xj+1,…,xj+k)、预定义的关系类型集ε,关系分类的目标是将候选实体对(si,sj)的关系类型映射到集合ε∪NA,其中,NA表示没有语义关系。 因此,具体的关系分类过程包括以下两个步骤: (1) 向量拼接。通过上述关系对比表示学习,可获得候选实体对的向量表示hi和实体对之间的上下文向量表示cij。通过向量拼接,可获得用于关系分类的候选实体对的增强向量表示: sij=[hi; ci,j](5.8) (2) 关系类型预测。向量拼接操作后,将候选实体对的关系向量表示sij输入一个全连接层进行关系分类: rij=σ(Wij·sij+bij)(5.9) 式中: σ为sigmoid激活函数; Wij为权重矩阵; bij为偏置项。 综上所述,基于span级软件知识实体和关系联合抽取方法,首先以领域预训练语言模型SWBERT为输入特征编码器,获取句子序列的动态词向量表示; 然后以span为单元建模句子序列,生成丰富的实体span表示,以避免无法选择重叠实体问题; 最后在实体分类和关系分类任务中引入有监督对比表示学习方法,通过数据增强和对比损失构建,获取更适于分类任务的实体span和实体对特征表示,提升实体分类和关系分类的预测性能。因此,基于span级软件知识实体和关系联合抽取的过程可以描述为算法53。 算法53基于span级软件知识实体和关系联合抽取算法 Input:软件知识社区文本的句子序列X=(x1,x2,…,xn) Output:软件知识实体关系三元组 1.Begin 2.for each epoch do 3.for each batch do 4.通过SWBERT生成句子序列X的词向量表示 5.生成句子序列的span表示S=(s1,s2,…,sn) 6.for si from S do 7.调用算法51获取实体span实例si的向量表示hi 8.通过向量拼接获取实体span实例si的向量表示//式(5.5) 9.对span实例si的类型进行预测//式(5.6) 10.endfor 11.获得软件知识实体集E,并选取实体对实例(si, sj) 12.for si, sj from S do 13.调用算法52获取实体对实例(si, sj)的向量表示hi 14.通过向量拼接获取实体对实例(si, sj)的增强向量表示//式(5.8) 15.对实体对实例(si, sj)的关系类型进行预测//式(5.9) 16.endfor 17. 返回软件知识实体关系三元组 18.endfor 19.endfor 20.End 5.4实验与分析 为验证我们所提出的软件知识实体和关系联合抽取方法的实际效果,以软件知识社区StackOverflow为例开展实验与分析,并通过模型对比实验和模型消融实验对模型性能进行分析和评价。实验的软/硬件环境与前面章节保持一致。 5.4.1数据集构建 由于软件知识实体和关系联合抽取任务缺乏公开、适用的标注数据集,我们利用前面章节的软件知识实体抽取、软件知识实体关系抽取的数据集来构建软件知识实体和关系联合抽取数据集。在软件知识实体和关系的类型方面,构建了涵盖编程语言、系统平台、软件API、软件工具、软件开发库、软件框架、软件标准、软件开发过程8个预定义实体类型,以及使用关系、包含关系、兄弟关系、同义关系和其他语义关系5个预定义关系类型,详细信息如表51所示。 表51软件知识实体和关系类型 类型名称含义实例简写 实体 类型 Programming Language编程语言Java,Python,Cprla Software Platform软件平台Weblogic,Dolphinplat Software API软件APIQueryManager,isNumericapi Software Tool软件工具Pycharm,Firebugtool Software Library软件开发库jQuery,NumPylib Software Framework软件框架Hibernate,Djangofram SoftwareStandard软件标准HTTP,utf8stan Development Process软件开发过程umlet,LoadRunnerdepr 关系 类型 Use使用关系Windows 10,Cortanause Inclusion包含关系Python,PyBraininc Brother兄弟关系C,Javabro Consensus同义关系JavaScript,JScon Semantic其他语义关系Virtual Network,VPNsem 在数据集标注方面,我们在软件知识实体关系抽取数据集的基础上对实体和关系进行联合标注,利用JSON(JavaScript Object Notation)文件格式对句子序列、实体类型、实体span的起始位置和结束位置、关系类型和头尾实体等信息进行标注,形成软件知识实体和关系联合抽取标注数据集。同时,将该数据集按7∶1∶2的比例划分为训练集、验证集和测试集,用于CSSKG模型的训练和测试。数据集由19013个句子、43769个实体和25183关系组成,其中包含452个与重叠实体的关系实例。数据集的详细信息见表52。 表52数据集的详细信息 组成训练集验证集测试集合计 句子15016196380119013 实体34592429874843769 关系19875234507425183 5.4.2超参数设置 在CSSKG模型的训练过程中,对于基于span的模块部分,输入嵌入层的SWBERT预训练语言模型的词向量维度设置为768维,Batch size设置为3,span的最大值均设置为10,实体span负样本和关系负样本最大值均设置为100,Adam作为优化器,初始学习率设为5e-5; 对于对比表示学习的模块部分,采用对比损失作为模型的损失函数,温度参数较小更有利于训练,但由于数值不稳定性,极低的温度参数较难以训练,因此,温度参数设置为0.1。模型的超参数设置如表53所示。 表53模型的超参数设置 模 型 名 称参 数 名 称参数值 spanbased model Word embedding dimension768 Batch size3 spanbased model Learningrate5e-5 Max_span_size10 Num_epoch100 Num_negative_entity100 Num_negative_relation100 OptimizerAdam Dropout0.5 Contrastive Learning modelτ0.1 5.4.3对比实验结果与分析 为了验证我们提出的软件知识实体和关系联合抽取模型CSSKG的性能,选取了三个基于共享参数方法、基于联合解码方法的实体关系联合抽取模型作为基线方法进行对比实验,实验数据基于我们构建的软件知识实体和关系联合抽取标注数据集。 Mutihead模型[56]是一种基于共享参数方法的实体和关系联合抽取模型。该模型利用BILOU标注方法和CRF解码实现实体抽取,通过多头选择算法实现关系抽取,利用sigmoid层实现关系抽取。 SPERT模型[152]是一种基于共享参数方法的实体和关系联合抽取模型。该模型抛弃了传统基于BIO/BILOU标注的方法,利用预训练语言模型BERT获取句子序列的词向量表示,并通过枚举句子序列中所有可能的实体span,实现实体和关系联合抽取。 NovelTagging模型[55]是一种基于联合解码方法的实体和关系联合抽取模型。该模型基于一种新序列标注框架和LSTM网络实现了一个端到端的实体和关系联合抽取。 我们所提出的软件知识实体和关系联合抽取模型CSSKG是从span级对句子序列进行实体和关系抽取,其抽取结果的评价准则: 若软件知识实体span的边界及其类型均预测正确,则表示实体识别结果正确; 若软件知识实体span的边界、实体类型及实体间关系均预测正确,则表示关系抽取结果正确。模型对比实验结果如表54、图52和图53所示。 表54对比实验结果 模型 实体关系 P/%R/%F1/%P/%R/%F1/% Multihead68.2065.2366.6861.0356.8258.85 NovelTagging75.6765.3970.1667.1563.3165.17 SPERT83.7167.1774.5372.2769.6470.93 SCLSKG*82.9378.6980.7580.5676.3978.42 SCLSKG82.1978.9180.5280.3776.0378.14 图52实体抽取结果对比 图53关系抽取结果对比 由模型对比实验结果可见,软件知识实体和关系联合抽取模型CSSKG的F1值均高于其他三个基线模型,取得了较好的性能。 从软件知识实体抽取任务来看,CSSKG模型与Mutihead模型相比,精确率P值和F1值分别提升了13.99%和13.84%; CSSKG模型与NovelTagging模型相比,精确率P值和F1值分别提升了6.52%和10.36%; CSSKG模型与SPERT模型相比,精确率P值下降1.52%,F1值提升了5.99%。 从软件知识实体关系抽取任务来看,CSSKG模型与Mutihead模型相比,精确率P值和F1值分别提升了19.34%和19.29%; CSSKG模型与NovelTagging模型相比,精确率P值和F1值分别提升了13.22%和12.97%; CSSKG模型与SPERT模型相比,精确率P值和F1值分别提升了8.1%和7.21%。 从句子序列建模对象的层面上看,由于基于span的方法不受序列建模的顺序限制,能对重叠的实体进行选择,从而提高了模型的预测精度,相较于Mutihead模型和NovelTagging模型,SPERT模型和CSSKG模型分别获得最高的实体抽取精确率和关系抽取精确率。同时,相较于SPERT模型,CSSKG模型在基于span方法的基础上,在实体抽取和关系抽取阶段引入了对比表示学习方法,获得了更适应于分类的实体span和实体对的增强特征表示,实体抽取和关系抽取的F1值分别提升了5.99%和7.21%。 同时,我们探索了SCLSKG模型在剔除重叠实体的数据集上的性能表现。如表54、图52和图53所示,CSSKG*和CSSKG分别表示剔除重叠实体和保留重叠实体的模型性能。在剔除重叠实体后,SCLSKG模型的实体抽取和关系抽取的F1值分别仅提高0.23%和0.28%。这表明SCLSKG模型在这两种不同的数据集上的性能保持相对稳定。 另外,针对软件知识实体和关系联合抽取模型CSSKG对每个预定义软件知识实体类型和关系类型的预测结果进行了分析,实验结果如表55、表56、图54和图55所示。 表55各实体类型的抽取结果 实 体 类 型P/%R/%F1/% tool85.4181.1383.21 plat91.5388.9090.19 stan78.5973.4175.91 lib90.1687.3988.75 api76.3574.4675.39 prla89.1985.5187.31 fram76.8674.3175.56 depr69.4266.1767.75 表56各关系类型的抽取结果 关 系 类 型P/%R/%F1/% inclusion87.3285.0886.18 brother79.8376.6978.23 semantic66.1859.2162.50 use85.2580.0382.56 consensus83.2979.1581.17 图54各实体类型的抽取结果 图55各关系类型的抽取结果 从实验结果来看,软件知识实体和关系联合抽取模型CSSKG的实体抽取任务要比关系抽取任务质量更高。在实体识别任务中,模型在软件工具(Software Tool)、软件开发库(Software Library)和编程语言(Programming Language)等实体类型上都有较好的性能,并在软件平台(Software Platform)实体类型上取得了最高的F1值,但在软件开发过程(Development Process)实体类型上出现了最低的F1值。在关系分类任务中,包含关系(Inclusion)关系类型取得最高F1值,在其他语义关系(Semantic)关系类型上出现了最低的F1值。 5.4.4消融实验结果与分析 我们对软件知识实体和关系联合抽取模型CSSKG进行模型消融实验,其主要目标是验证所提出的实体对比表示学习、关系对比表示学习以及领域预训练语言模型SWBERT对软件知识实体和关系联合抽取的性能影响。为保证实验结果的合理性,在模型消融实验的过程中各模型参数保持相同的设置。 1. 对比表示学习对模型性能的贡献评价 软件知识实体和关系联合抽取模型CSSKG以span方法为基础,通过引入有监督的对比表示学习框架,实现实体span和实体对的特征增强表示,进而提升软件知识实体和关系抽取的性能。为此,我们选取CSSKG模型作为基准模型,验证实体对比表示学习和关系对比表示学习对软件知识实体和关系联合抽取任务的影响,实验结果如表57、图56和图57所示。 表57对比表示学习对模型性能的影响 模型实体对比 表示学习关系对比 表示学习 实体关系 P/%R/%F1/%P/%R/%F1/% CSSKGNN××68.4359.6163.7265.3258.3461.63 CSSKGEC√×81.9776.6979.2469.7462.5765.96 CSSKGRC×√69.1160.9364.7671.5165.7268.49 CSSKGALL√√82.1978.9180.5280.3776.0378.14 图56对比表示学习对实体抽取性能的影响 图57对比表示学习对关系抽取性能的影响 在表57中,模型CSSKGNN表示未引入实体对比表示学习和关系对比表示学习,模型CSSKGEC表示只引入实体对比表示学习,模型CSSKGRC表示只使用关系对比表示学习,模型CSSKGALL表示同时引入了实体对比表示学习和关系对比表示学习。 从对比实验结果来看,单独引入实体对比表示学习后,实体抽取和关系抽取的F1值分别提高15.52%和4.33%; 单独引入关系对比表示学习后,实体抽取和关系抽取的F1值分别提高0.04%和6.86%; 同时引入实体对比表示学习和关系对比表示学习后,实体抽取和关系抽取的F1值达到最高。 实验结果表明,基于聚合正样本、分离负样本思想的实体对比表示学习和关系对比表示学习能获取实体span和实体对更适于下游分类任务的特征表示,有助于提升软件知识实体和关系联合抽取任务的性能。 2. SWBERT模型对模型性能的贡献评价 在软件知识实体和关系联合抽取模型CSSKG的输入嵌入层,利用已精调的领域预训练语言模型SWBERT对输入句子序列进行编码,生成相应的词向量表示。为了评价领域预训练语言模型SWBERT对软件知识实体和关系联合抽取任务的性能贡献,我们选取CSSKG模型作为基准模型,从预训练语言模型的角度对模型进行消融实验。实验结果如表58、图58和图59所示。 在表58中,模型CSSKGNN表示未引入预训练语言模型,模型CSSKGBERT表示引入通用领域BERT模型,模型CSSKGSWBERT表示引入已精调的软件领域预训练语言模型SWBERT。 表58预训练语言模型对模型性能的影响 模型预训练模型 实体关系 P/%R/%F1/%P/%R/%F1/% CSSKGNN×77.2669.7173.2971.8468.2770.01 CSSKGBERT√80.9573.1976.8776.3670.1773.13 CSSKGSWBERT√82.1978.9180.5280.3776.0378.14 由实验结果可知,模型引入通用领域预训练语言模型BERT后,实体抽取和关系抽取的F1值分别提高3.58%和3.12%; 模型引入软件领域预训练语言模型SWBERT后,实体抽取和关系抽取的F1值分别提高7.23%和8.13%; 并且,模型引入软件领域预训练语言模型SWBERT与引入通用领域预训练语言模型BERT相比,实体抽取和关系抽取的F1值分别提高3.65%和5.01%。 图58预训练语言模型对实体抽取性能的影响 图59预训练语言模型对关系抽取性能的影响 实验结果表明,特定软件领域的预训练语言模型能更好地捕获软件知识社区文本中单词的领域特征,生成高质量的词向量表示,有助于提升下游的实体分类和关系分类任务性能。 5.4.5公共数据集的实验结果与分析 为了进一步探索我们提出的SCLSKG模型性能,在三个公共数据集上进行了模型实验与结果分析。CoNLL04数据集[161]是一个带有标注信息的新闻文章数据集,包括4种实体类型和5种关系类型。SciERC数据集[149]来自4个人工智能社区的500份人工智能会议论文集的摘要。ADE数据集[162]源于药物使用的医疗报告,包括2种实体类型和1种关系类型。 根据前面工作的评价方法,我们对CoNLL04数据集和ADE数据集采用宏观平均值的方法进行评价,对SciERC数据集采用微平均值的方法进行评价,实验结果如表59所示。 表59公共数据集的实验结果 数据集模型 实体关系 P/%R/%F1/%P/%R/%F1/% CoNLL04 Multihead83.7584.0683.9063.7560.4362.04 Multihead+AT[163]——83.61——61.95 Tablefilling[51]81.2080.2080.7076.0050.9061.00 SPERT85.7886.8486.2574.7571.5272.87 SCLSKG86.4587.3586.9376.1371.3173.12 SciERC SciIE[149]67.2061.5064.2047.6033.5039.30 DyGIE[150]——65.20——41.60 DyGIE++[151]——67.50——48.40 SPERT68.5366.7367.6249.7943.5346.44 SCLSKG68.2466.2867.2150.3744.6947.56 ADE BiLSTM+SDP[164]82.7086.7084.6067.5075.8071.40 Multihead84.7288.1686.4072.1077.2474.58 Multihead+AT[163]——86.73——75.52 SPERT88.9989.5989.2877.7779.9678.84 SCLSKG(without overlap)88.9189.1689.0375.6780.8178.16 SCLSKG(with overlap)87.5390.2588.8975.3580.3377.91 实验结果表明,SCLSKG模型在CoNLL04数据集上获得了性能提升,实体抽取和关系抽取的F1值分别提高了0.7%和0.3%。对于SciERC数据集,关系抽取的性能也有所提高,关系抽取的F1值提高了1.1%。对于ADE数据集,包含120个含有实体重叠的关系实例,与SPERT模型相比,SCLSKG模型在实体抽取和关系抽取方面没有实现性能提升。当包含重叠实体时,SCLSKG模型的实体抽取和关系抽取的F1值分别仅下降0.14%和0.25%。 5.4.6联合训练方法分析 我们基于对比表示学习和span方法提出软件知识实体和关系联合抽取模型CSSKG,对软件知识实体抽取和关系抽取进行联合建模,包括实体分类和关系分类两个子任务,需要根据联合损失函数对实体分类和关系分类两个任务进行联合训练。 因此,软件知识实体和关系联合抽取模型CSSKG的损失函数由实体对比表示学习损失Lec、实体分类损失Le、关系对比损失Lrc和关系分类损失Lr四部分组成,其中,实体分类损失Le采用Categorical Cross Entropy作为损失函数,关系分类损失Lr采用BinaryCross Entropy作为损失函数。 为了获得CSSKG模型最佳的联合训练结果,我们尝试了损失函数相加、损失函数相乘和损失函数线性结合三种不同的联合训练方法,具体公式如下: L=Le+Lec+Lr+Lrc(5.10) L=LeLec+Lr×Lrc(5.11) L=Lec+λ(·)Le+Lrc+λ(·)Lr(5.12) 损失函数相加表示实体对比损失Lec、实体分类损失Le、关系对比损失Lrc和关系分类损失Lr四个损失相加,见式(5.10); 损失函数相乘表示实体对比损失和实体分类损失相乘,关系对比损失和关系分类损失相乘,见式(5.11); 损失函数线性结合表示在实体分类损失和关系分类损失上加线性函数,并结合实体分类和关系分类两部分损失,见式(5.12)。 由模型联合训练方法的实验结果图510和图511可知,损失函数相乘的方法会导致模型无法收敛,取得较差的结果; 损失函数相加和损失函数线性结合的方法能完成模型训练与测试,线性结合方法取得了更好的效果。因此,我们采用损失函数线性结合的方法对软件知识实体和关系联合抽取模型进行训练。 图510实体抽取的联合训练方法 图511关系抽取的联合训练方法 5.4.7实例研究与分析 通过以上实验结果分析,我们所提出的基于span级对比表示学习的软件知识实体和关系联合抽取模型CSSKG,能较好地解决流水线式方法的任务依赖问题,缓解了实体重叠问题,在基于社区文本的软件知识领域取得了较好的性能。我们构建了包含43769个实体实例和25183个关系实例的软件知识图谱,其中,50个节点和1000个节点的概览图分别如图512和图513所示。 图51250个节点的概览图 图5131000个节点的概览图 从图512和图513可以看出,软件知识图的节点代表软件知识实体的实例,不同类型的软件知识实体采用不同的颜色来区分。例如,节点“Java”“PHP”“c#”的实体类型为“Programming Language”,节点“JUnit”“TestNG”“React”的实体类型为“Software Framework”。软件知识实例〈Pydantic,Inclusion,Python〉描述了一个软件知识事实,即头实体“Pydantic”通过“inclusion”边链接到尾实体“Python”。 软件知识实体和关系联合抽取模型CSSKG尽管取得了较好的性能,但也存在一些具体的问题。下面就CSSKG模型的软件知识实体和关系联合抽取实际案例进行分析,分析结果如表510所示,其中,符号“[]”表示抽取的软件知识实体。 表510软件知识实体和关系联合抽取实例分析 实例抽 取 结 果 实例1SpriteKit is [[Apples] framework] for creating 2D games for [[IOS] 7],[[macOS] 10.9],[[tvOS] 9] and [[watchOS] 3] 实例2StarlingFramework is an[ActionScript 3] library for hardware accelerated 2D graphics 实例3[BlackBerry] offers a variety of development tools,including the [BlackBerry Dynamics SDK],[Cylance REST APIs],[BlackBerry Workspaces APIs] and SDKs,BlackBerry QNX development and BlackBerry UEM REST APIs 实例4[CUDA] ([Compute Unified Device Architecture]) is a parallel computing platform and programming model for NVIDIA GPUs (Graphics Processing Units) 在实例1中,模型CSSKG不仅能抽取软件知识实体“Apples”和“IOS”,还能准确抽取软件知识实体“Apples framework”和“IOS 7”。经统计,在453个实体重叠的关系实例中,有267个被准确识别出来,这说明模型CSSKG能有效解决实体重叠问题。 在实例2中,由于实体span的边界错误,模型CSSKG没有准确识别出软件知识实体“ActionScript 3 library”,造成关系抽取出错。 在实例3中,模型CSSKG抽取出软件知识实体“BlackBerry”“BlackBerry Dynamics SDK”“Cylance REST APIs”,并准确识别软件知识实体“BlackBerry”和“BlackBerry Dynamics SDK”之间的关系为“Inclusion”。同时,在训练数据集中虽然没有标注软件知识实体“BlackBerry Dynamics SDK”和“Cylance REST APIs”之间的关系,但模型却预测出两个实体间的关系为“Brother”。 在实例4中,模型CSSKG将软件知识实体“CUDA”和“Compute Unified Device Architecture”分别抽取为“Software Platform”类型和“Software Tool”类型,造成实体抽取错误,导致没有正确识别两者之间的“Consensus”关系。 5.5本章小结 针对传统Pipeline方法存在的任务依赖问题和软件知识社区文本存在的实体重叠问题,我们提出了一种基于span级对比表示学习的软件知识实体和关系联合抽取方法,并以软件知识社区StackOverflow为例进行了实验与分析。实验结果表明,span级对比表示学习方法以span为单位建模句子序列,能缓解软件知识实体重叠问题; 同时,有监督的实体对比表示学习和关系对比表示学习能获取实体span和实体对的增强特征表示,有助于提升软件知识实体和关系分类的性能。