本发明涉及数据处理技术领域,具体涉及一种基于bert的多模型融合提取事件主体的方法。
背景技术:
事件识别是舆情监控领域和金融领域的重要任务之一,“事件”在金融领域是投资分析,资产管理的重要决策参考。面向金融领域的事件主体抽取任务属于事件抽取任务中的限定域事件抽取,是信息抽取和知识图谱构建的重要环节之一。“事件识别”的复杂性在于事件类型和事件主体的判断,只有发生特定事件类型的主体才是提取目标。
目前主要有两类方法:基于模式匹配的方法和基于机器学习的方法。
基于模式匹配的方法是指对事件主体的抽取是在一些模式的指导下进行的,所以模式准确性是影响整个方法性能的重要因素。该类方法依赖于文本的具体形式(语言、领域和文档格式等),获取模板的过程费时费力,具有很强的专业性,而且,制定的模式很难覆盖所有的事件类型,当语料发生变化时,需要重新获取模式。鉴于基于模式匹配的方法可移植性低、召回率差,基于机器学习的事件主体抽取成为主流方法。
基于机器学习的事件抽取方法的代表方法是基于有监督学习的事件抽取,即将事件主体抽取建模成一个序列标注问题,提取特征向量后再使用有监督的分类器进行回归。本文采用了基于机器学习的方法来从金融事件文本中抽取事件主体。
bert(pre-trainingofdeepbidirectionaltransformersforlanguageunderstanding)通过预训练技术,刷新了11项nlp任务的最优结果,将自然语言处理中的预训练技术发展到了普适的程度。bert模型进一步增强了词向量模型的泛化能力,充分描述字符级、词级、句子级甚至句间关系特征。因此,本文均采用bert作为编码器,并在单个模型的结果上进行融合,进一步提升事件主体的提取准确度。
技术实现要素:
针对现有技术的不足,结合最新技术bert预训练网络编码,并使用多种网络结构解码,从而可以使用差异化较大的模型做融合,达到提取特定事件类型的主体的目的。
为实现上述目的,本发明提供了如下技术方案:一种基于bert的多模型融合提取事件主体的方法,包括以下步骤:
步骤1:对爬取到的原始数据进行预处理,得到事件主体的训练样本和预测样本;
步骤2:对训练样本和预测样本进行嵌入操作,得到bert预训练网络的训练样本输入序列和预测样本输入序列;
步骤3:采用多个基于bert预训练网络的不同复杂度的单模型,利用训练样本输入序列对所述单模型进行训练,并优化网络参数;
步骤4:将预测样本输入序列输入到经训练后的多个单模型,输出多个模型结果;
步骤5:对所述多个模型结果进行融合,得到预测样本的最终预测结果。
进一步的,所述步骤1具体包括:
步骤11:去除爬取数据中不包含信息的无效字符。
步骤12:将经步骤11处理后的爬取数据分为训练样本和预测样本。
进一步的,所述步骤2具体包括:
步骤21:针对训练样本和预测样本的所有事件主体,将每个事件主体的两个输入拼接为字符串序列;
步骤22:对所述字符串序列进行字符嵌入、位置嵌入、段落嵌入的操作,得到bert预训练网络的训练样本输入序列和预测样本输入序列。
进一步的,所述每个事件主体的两个输入包括:事件的相关描述文本和事件类型。
进一步的,所述字符串序列形式为:[cls]事件类型[sep]事件的相关描述文本[sep]。
进一步的,所述步骤3中的多个基于bert预训练网络的不同复杂度的单模型包括:
bert预训练网络 全连接层模型;
bert预训练网络 自注意力层 全连接层模型;
bert预训练网络 卷积层 自注意力层 全连接层模型。
进一步的,步骤4具体包括:
针对bert预训练网络 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,传递到全连接层进行解码,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第一模型结果;
针对bert预训练网络 自注意力层 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,输入到自注意力层,再传递到全连接层,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第二模型结果;
针对bert预训练网络 卷积层 自注意力层 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,输入到两个1维卷积层得到卷积输出,卷积输出与向量输出相加后输入到自注意力层和全连接层,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第三模型结果。
进一度的,所述步骤5具体包括:
针对字符个数小于80的样本,使用第一模型结果;
针对字符个数大于等于80的样本,以权重比例第一模型结果:第二模型结果:第三模型结果=3:4:3进行融合;
针对20个概率分布均匀的样本,以权重比例第一模型结果:第二模型结果:第三模型结果==3:3:4进行融合。
进一步的,所述步骤5中加上权重后对于概率值小于0.5的答案,不考虑融合。
进一步的,所述步骤5还包括:过滤错误答案:
词性标注:调用预训练好的词性标注模型,对每个模型输出结果进行了词性标注,若词性是名词类,则保留此结果;否则,将其过滤掉,进而取第二模型结果和第三模型结果;
停用词过滤:将主体中不可能出现的符号作为停用词,若预测结果出现停用词,则将其过滤。
句法分析:事件主体中不可能包含完整的主谓宾结构,对检测出来的答案进行句法分析,如果包含完整的主谓宾结构,则将其过滤。
进一步的,所述停用词包括但不限于标点符号,特殊动词,特殊名词等。
本发明的有益效果:本发明提供了一种基于bert的多个模型融合用来提取金融领域事件主体的方法。通过从简单到复杂设计模型的方式,保证模型的多样化,调整参数进行训练,将多个模型的检测结果进行融合,进一步提升检测的准确率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图示出的结构获得其他的附图。
图1示出本发明的基于bert的多模型融合提取事件主体的方法流程图;
图2示出本发明实施例的将字符串序列嵌入为bert预训练网络要求的输入的示意图;
图3示出本发明实施例的提取事件主体方案的结构示意图;
图4示出本发明实施例的bert 全连接层的网络结构图;
图5示出本发明实施例的bert self-attention 全连接层的网络结构图;
图6示出本发明实施例的bert 卷积 self-attention 全连接层的网络结构图;
图7示出本发明实施例的通过序列向量获取事件主体的流程图;
图8示出本发明实施例的提取到的事件主体样例。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
本公开的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
多个,包括两个或者两个以上。
和/或,应当理解,对于本公开中使用的术语“和/或”,其仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。
如图1所示,本发明公开的基于bert的多模型融合提取金融领域事件主体的方法包括以下步骤:
对原始数据进行预处理,得到事件主体的训练样本和预测样本;
对训练样本和预测样本进行嵌入操作,得到bert预训练网络的训练样本输入序列和预测样本输入序列;
采用多个基于bert预训练网络的不同复杂度的单模型,利用训练样本输入序列对所述单模型进行训练,并优化网络参数;
将预测样本输入序列输入到经训练后的多个单模型,输出多个模型结果;
对所述多个模型结果进行融合,得到预测样本的最终预测结果。
具体地,从以下步骤进行说明:
步骤一:数据预处理。因为数据是从网上爬取的真实新闻语料库,所以存在一些不包含信息的特殊字符,去掉样本中的特殊字符,比如▽[[ _ ]],去掉连续的空格字符。
步骤二:对模型的输入做嵌入
1将事件类型和金融事件描述文本拼接,拼接形式为[cls]事件类型[sep]金融事件描述文本。
2字符嵌入,使用bert预训练模型给定的字典,对输入样本进行字符嵌入。
3位置嵌入,将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一步。
4段落嵌入,用于区分拼接后的两个部分,例如a是事件类型,b是描述该事件的发生情况的文本,对于这样拼接而成的句子对,a的特征值是0,b的特征值是1。
步骤三:设计并训练单个模型。为了保证融合时候有更高的提高,要保证单模型的多样化,这里我们从简单到复杂设计了三个单模型。
1bert预训练网络编码后的输出,传递到全连接层(fullconnectionlayer)进行解码,得到输出,将输出的结果整理出前20个概率最大的事件主体,后续做融合使用。
2长句子样本且样本中含有多个实体,部分是对应事件的主体,也就是我们要提取的内容,另一部分虽然是实体,但并不是该事件的主体,针对这个问题,在第一个模型的基础上,添加了self-attention层。bert预训练网络编码后的向量,输入到自注意力层(self-attentionlayer),再接全连接层,得到输出,输出的结果整理出前20个概率最大的事件主体,后续融合使用
3对于部分样本,使用第一个模型和第二个模型输出前20个概率最大的结果,但是每个结果之间的概率差别不大,分布较平均,说明预测出来的不同结果的区分程度较低,那么概率最大的结果作为答案就不太合理,所以添加了一个卷积层,通过学习上下文信息来增加同一个样本的20个预测结果的概率的区分度。bert预训练网络编码后的向量,输入到两个1维卷积层,然后和bert输出相加后输入到自注意力层和全连接层,得到输出,输出结果整理出前20个概率最大的事件主体,后续融合使用。
4调整网络参数,训练以上三种模型,并保存单个模型f1-score较好的结果。
步骤四:模型融合
1加权融合多个模型的最优答案作为单个样本的最终预测结果,因为符合给定事件类型的主体往往不止一个。对于句子较短的样本使用第一个模型;对于长句子样本,给予第二个模型较高的权重;对于20个答案概率分布均匀的样本,给予第三个模型较高的权重。加上权重后对于概率值过小的答案,不考虑融合。
2过滤一些显而易见的错误答案。在融合多个模型的多个主体的过程中,针对错误答案进行一定的过滤处理:
词性标注;调用预训练好的词性标注模型,对每个模型输出结果进行了词性标注。若词性是名词类,则保留此结果;否则,将其过滤掉,进而取其模型的第二第三预测值。
停用词过滤;将主体中不可能出现的符号作为停用词,如标点符号,特殊动词,特殊名词等,若预测结果出现停用词,则将其过滤。
句法分析;事件主体中不可能包含完整的主谓宾结构,对检测出来的答案进行句法分析,如果包含完整的主谓宾结构,则将其过滤。
实施例
1.数据预处理。
对数据进行清洗和处理,包括以下处理方案:
去掉对训练语言模型没有用处的特殊符号,比如▽[[ _ ]];
将连续多个空格替换成逗号;
对于有多个事件主体的样本,事件主体需要调整为与原文中的顺序一致
数据分为训练样本和预测样本;
2.将训练样本嵌入为向量
训练样本的输入有两个,一个是事件的相关描述文本,一个是事件类型,比如“申万调低雨润评级”是事件的相关描述文本,事件类型是“评级调整”。
首先,要将两个输入按照特定形式拼接为一个字符串序列,每个序列的第一个字符始终是特殊嵌入字符[cls],事件类型和事件的相关描述文本之间用特殊字符[sep]把它们分开,事件类型在前面,结尾加上[sep]字符。例如:[cls]评级调整[sep]申万调低雨润评级[sep]。
然后,对上述字符串序列进行字符嵌入、位置嵌入、段落嵌入的操作,得到bert预训练网络的输入,附图2使用其中一个训练样本表示了将训练样本嵌入为向量的过程:
字符嵌入:本文使用google开源的预训练bert中文模型提供的字典进行字嵌入,字典中的每个字都有唯一的索引号,对应句子序列中的字,找到索引号,用索引号的数值代替对应的字符。该字典总共包含21128个字符,其中,没有包含在字典中的字符,用[unk]替代。
位置嵌入:位置编码会在词向量中加入了单词的位置信息,可以支持的序列长度最多为512个词块。位置编码规则使用公式:
其中,pos表示该词在句子序列中的实际位置,dmodel是词向量的维度为512,即每个字嵌入为一个512维的向量,i表示词向量的第i个维度。
段落嵌入,将事件类型(用a表示)嵌入到序列,以ea表示,将事件描述(用b表示)嵌入到序列,以eb表示,如附图2所示。段落嵌入使得bert可以区分拼接成一个句子序列中的两部分。
3.单个模型的设计
模型整体思路:
金融领域事件主体提取方案的结构示意图如附图3所示。经过2中所述步骤后,将转化嵌入好的序列s1=e[cls]e1...ene[sep]e'1...e'm输入到bert网络,bert网络编码后,再解码成新的序列s2=ct1...tnt[sep]t'1...t'm,s1的长度和s2的长度相等,解码后输出的新序列中每个数值ti代表位置i处的字符作为开始/结束位置的分值,数值越大,表示该位置越有可能是事件主体的开始/结束位置,结合一些规则,确定开始和结束的范围,就可以从事件描述文本中提取出事件主体。
单个模型结构:
bert 全连接层:模型结构如附图4所示,构建好输入序列后,输入到bert的预训练网络中,经bert编码,序列中的每个字被编码成了768维的向量输出。经过bert网络的输出,输入到一个fullconnectionlayer(全连接层),全连接层的参数个数是输入序列长度的两倍,将全连接层的输出分成两个向量,分别代表每个字作为主体的开始字符和每个字作为主体的结束字符的得分,分别与实际表示开始位置和结束位置的向量计算交叉熵损失,两者的损失和作为整体的损失,使用adam(adaptivemomentestimation,自适应矩估计)优化算法优化网络参数。
bert self-attention 全连接层:在bert 全连接层模型的基础上,本文设计了使用bert编码,self-attention 全连接层解码的模型,结构如附图5所示,因为self-attention在可以学习到句子内部长距离依赖关系,忽略词之间的距离直接计算依赖关系,能够学习一个句子的内部结构,所以在解码过程中加入self-attention。bert编码后的输出向量,分别输入到计算开始位置的self-attention层和计算结束位置的self-attention层中,再分别输入到全连接层,然后,分别与表示开始位置和结束位置的向量计算交叉熵作为损失,最后取两者损失和作为最终的损失,使用adam优化算法优化网络参数。
bert 卷积层 self-attention 全连接层:在bert self-attention 全连接层的基础上,本文设计了bert 卷积层 self-attention 全连接层的模型。在上一个模型的基础上添加了两个1维卷积层,卷积可以获取上下文的一些信息,丰富网络学习到的参数,另外为了避免过拟合,卷积之后的输出加上bert的输出,即添加了一个残差层,再分别输入到计算开始位置的self-attention层和计算结束位置的self-attention层中,后面再传到全连接层,如附图6所示,分别与实际表示开始位置和结束位置的向量计算交叉熵损失,两者的损失和作为整体的损失,使用adam优化算法优化网络参数。
单个模型提取事件主体规则:
获取事件主体的过程如附图7所示:其中start_logits和end_logits分别是每个字作为主体的开始字符和每个字作为主体的结束字符的得分,得分越高,表明越有可能是要提取的事件主体在事件描述中的开始位置和结束位置,随着训练中调整参数的过程,start_logits和end_logits的数值会发生变化,得出结果与表示开始位置和结束位置的目标向量靠近。index是对描述段落中每个字符的编号,而start_index是和排名前20的start_logits相对应的字符编号,同理,end_index是和排名前20的end_logits相对应的字符编号。分别取出前20个最大的值,两两组合,经过规则判断,比如end_index必须大于start_index,得出一系列满足规则条件的start_index和end_index,分别将他们对应的分值相加,得到该结果对应的总分值,取前20个分值最大的作为结果,其中,提取的事件主体就是在描述事件的文本中start_index开始到end_index结束这一区间的字符。
4.模型融合
本文设计的单个模型均是输出一个主体,而符合给定事件类型的主体往往不止一个,因此,本文采用的融合方式是融合多个模型的最优答案作为单个样本的最终预测结果。对于句子字符个数小于80的样本使用第一个模型的结果,模型简单,正确率高;对于长句子样本,给予第二个模型较高的权重,权重比例模型1:模型2:模型3=3:4:3;对于20个答案概率分布均匀的样本,前2个答案的概率和占比小于0.85,给予第三个模型较高的权重,权重比例模型1:模型2:模型3=3:3:4。加上权重后对于概率值小于0.5的答案,不考虑融合。
每个模型对某个样本的预测都可能存在错误,而有些错误是显而易见的,而且存在固定的模式。因此在融合多个模型的多个主体的过程中,针对错误答案做了一定的过滤处理,主要方法有:
(1)词性标注;调用预训练好的词性标注模型,对每个模型输出结果进行了词性标注。若词性是名词类,则保留此结果;否则,将其过滤掉,进而取其模型的第二第三预测值。
(2)停用词过滤;将主体中不可能出现的符号作为停用词,如标点符号,特殊动词,特殊名词等,若预测结果出现停用词,则将其过滤。
(3)句法分析;主体都是公司或者机构这类名词,不可能存在主谓宾结构,对检测的结果进行句法分析,如果出现主谓宾结构,则将改结果过滤掉。
虽然单个模型经过修改,提高了网络学习到的参数,但是单个模型的提升效果仍然有限,经过差异化较大的模型融合之后,得到了很大的提高。
附图8展示了提取到的主体结果,其中第一列是每个样本的编号,第二列是提取出来的事件主体。
本文采用编码-解码的设计思路来构建单个模型,从而使每个模型独立而结构类似,可以很好的适应模型融合。
本发明所提出的基于bert的多模型融合的方法对提取金融领域事件主体有较好的效果。比如“公司a产品出现添加剂,其下属子公司b和公司c遭到了调查”,对于“产品出现问题”事件类型,该句中事件主体是“公司a”,而不是“公司b”或“公司c”。
上述实施例对本发明的具体描述,只用于对本发明进行进一步说明,不能理解为对本发明保护范围的限定,本领域的技术工程师根据上述发明的内容对本发明做出一些非本质的改进和调整均落入本发明的保护范围之内。
1.一种基于bert的多模型融合提取事件主体的方法,其特征在于,包括以下步骤:
步骤1:对原始数据进行预处理,得到事件主体的训练样本和预测样本;
步骤2:对训练样本和预测样本进行嵌入操作,得到bert预训练网络的训练样本输入序列和预测样本输入序列;
步骤3:采用多个基于bert预训练网络的不同复杂度的单模型,利用训练样本输入序列对所述单模型进行训练,并优化网络参数;
步骤4:将预测样本输入序列输入到经训练后的多个单模型,输出多个模型结果;
步骤5:对所述多个模型结果进行融合,得到预测样本的最终预测结果。
2.根据权利要求1所述的方法,其特征在于,所述步骤1具体包括:
步骤11:去除原始数据中不包含信息的无效字符;
步骤12:将经步骤11处理后的原始数据分为训练样本和预测样本。
3.根据权利要求1所述的方法,其特征在于,所述步骤2具体包括:
步骤21:针对训练样本和预测样本的所有事件主体,将每个事件主体的两个输入拼接为字符串序列;
步骤22:对所述字符串序列进行字符嵌入、位置嵌入、段落嵌入的操作,得到bert预训练网络的训练样本输入序列和预测样本输入序列。
4.根据权利要求3所述的方法,其特征在于,所述每个事件主体的两个输入包括:事件的相关描述文本和事件类型。
5.根据权利要求4所述的方法,其特征在于,所述字符串序列形式为:[cls]事件类型[sep]事件的相关描述文本[sep]。
6.根据权利要求1所述的方法,其特征在于,所述步骤3中的多个基于bert预训练网络的不同复杂度的单模型包括:
bert预训练网络 全连接层模型;
bert预训练网络 自注意力层 全连接层模型;
bert预训练网络 卷积层 自注意力层 全连接层模型。
7.根据权利要求6所述的方法,其特征在于,步骤4具体包括:
针对bert预训练网络 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,传递到全连接层进行解码,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第一模型结果;
针对bert预训练网络 自注意力层 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,输入到自注意力层,再传递到全连接层,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第二模型结果;
针对bert预训练网络 卷积层 自注意力层 全连接层模型,将预测样本输入序列经bert预训练网络编码为向量输出,输入到两个1维卷积层得到卷积输出,卷积输出与向量输出相加后输入到自注意力层和全连接层,得到模型输出,提取模型输出中前20个概率最大的事件主体作为第三模型结果。
8.根据权利要求7述的方法,其特征在于,所述步骤5具体包括:
针对字符个数小于80的样本,使用第一模型结果;
针对字符个数大于等于80的样本,以权重比例第一模型结果:第二模型结果:第三模型结果=3:4:3进行融合;
针对20个概率分布均匀的样本,以权重比例第一模型结果:第二模型结果:第三模型结果==3:3:4进行融合。
9.根据权利要求8所述的方法,其特征在于,所述步骤5中加上权重后对于概率值小于0.5的答案,不考虑融合。
10.根据权利要求8所述的方法,其特征在于,所述步骤5还包括:过滤错误答案:
词性标注:调用预训练好的词性标注模型,对每个模型输出结果进行了词性标注,若词性是名词类,则保留此结果;否则,将其过滤掉,进而取第二模型结果和第三模型结果;
停用词过滤:将主体中不可能出现的符号作为停用词,若预测结果出现停用词,则将其过滤;
句法分析:事件主体中不可能包含完整的主谓宾结构,对检测出来的答案进行句法分析,如果包含完整的主谓宾结构,则将其过滤。
技术总结