一种基于序列生成模型的多事件检测方法

文档序号:24552117发布日期:2021-04-06 12:04阅读:153来源:国知局
一种基于序列生成模型的多事件检测方法

本发明涉及自然语言处理技术领域,尤其涉及一种基于序列生成模型的事件检测方法。



背景技术:

随着互联网技术与应用的迅速发展,自然语言文本信息的交流和共享也日益频繁和广泛。这些文本信息通常以新闻资讯,机构公告,论坛评论等非结构化文本形式呈现,常常蕴含着许多拥有潜在价值的事件信息,挖掘这些事件信息具有很强的应用价值。例如,通过金融公告可以检测引起金融市场波动的事件,从而辅助投资者做出决策;通过实时检测社会突发事件,可以为应急处理争取时间。事件检测的目标就是从这些数量庞大、更新迅速、结构复杂的非结构化文本中检测是否有事件发生并得到发生事件的类型。

目前,文本事件检测方法多数利用深度学习方法构建序列标注模型对事件文本进行事件触发词抽取,若文本包含触发词则视为有事件发生,然后通过对触发词的分类得到事件的分类。然而,现有的方法有以下缺点:

1.现有方法过度依赖触发词的抽取和分类来进行事件监测。然而在实际场景中,文本中往往没有明确的触发词或者含有多个触发词。特别地,中文文本中某些触发词的边界难以判断。这些都对事件的检测造成了干扰。此外,触发词标注难度很高,需要人力和时间的消耗,有触发词标注的数据资源很少。因此,现有方法在实际应用中难以达到良好的效果。

2.现有方法对于各个事件类型的检测往往是独立的,没有考虑到事件类型之间的共现关系,例如袭击事件往往会和伤亡事件共同发生。忽略这部分信息影响了事件检测准确率的提升。

3.现有方法大多只关注了事件文本中的信息,没有利用事件类别名称所包含的语义信息。例如,在检测“投资”事件时,没有运用“投资”这个类别名称包含的语义信息,而是简单用数字作为类别的代号,这是一种语义浪费。

针对现有方法的缺陷,本发明提出了一种新颖的基于序列生成模型的多事件检测方法。将传统的基于序列标注和触发词抽取的方法转换为基于序列生成模型的方法。利用序列生成模型可以生成不定长序列的特性,实现了在无需进行触发词抽取的情况下也能进行多事件检测的效果,降低了对数据集的标注要求,增强了方法的可用性。在构建序列生成模型时,使用编码器-解码器的架构,在解码预测输出的过程中使用上一时间步的输出作为输入,因此可以学习各事件类别间的共现关系。此外,该方法除了考虑事件文本语义外,还加入了事件类别名称的语义信息,这相当于加入更多先验信息,在数据量较少的情况下也能得到较好的效果。



技术实现要素:

本发明提供了一种基于序列生成模型的多事件检测方法。在不需要事件触发词抽取的情况下,使用序列生成模型,同时利用事件文本和事件类别名称中的语义信息,并充分考虑事件共现关系来改善事件检测的效果。

一种基于序列生成模型的多事件检测方法,其包括以下步骤:

s1:获取事件文本语料后,对文本进行预处理,然后使用序列化文本标注方法对事件文本中的事件类别进行标注;

s2:构建基于序列生成框架的多事件检测模型;

s3:对模型进行训练和评估,并选择训练效果最好的模型作为最优模型;

s4:利用训练好的最优模型,使用集束搜索的方法进行预测,从而得到生成序列,解析生成序列得到完整的多事件检测结果。

优选地,以上各步骤可以采用如下具体实现方式:

优选地,获取事件文本语料后,对文本进行预处理,然后使用序列化文本标注方法对事件文本中的事件类别进行标注的步骤如下:

s11:获取事件文本语料后,对语料进行清洗;然后使用分词工具对语料进行分词;

s12:对每一条事件文本语料中包含的事件类型进行序列化标注,标注格式为直接将事件类型名称连成序列,中间用特定的分隔符隔开;若该文本不包含任何事件,则标注为“none”;然后将标注得到的序列首部添加自定义开始符“<sos>”,尾部添加自定义结束符“<eos>”。

优选地,构建基于序列生成框架的多事件检测模型的步骤如下:

s21:将事件文本输入模型的输入层,将词转化为向量形式,并编码实体及词性特征,具体如s211~s213所示:

s211:使用词嵌入模块将输入文本的每个词转化为向量形式;

s212:对文本中每个词对应的实体和词性类别进行编码,生成实体词性特征向量;

s213:将s211中得到的词向量和s212中词对应的实体词性特征向量拼接起来,共同组成维度为k的组合向量;将一条文本中所有词的组合向量全部拼接得到的文本特征向量表示为x1:n=[x1,x2,...,xn],其中n表示文本中词的个数,xi表示文本中的第i个词,i∈[1,n];

s22:使用包含双向lstm神经网络模型的编码器进行编码,具体如s221~s222所示:

s221:将s21得到的文本特征向量作为输入数据,传入编码器;

s222:编码器中的双向lstm深度神经网络对输入数据进行编码,编码后整个句子得到的编码器隐藏状态表示为h1:n=(h1,h2,...,hn),其中每个hi由前向lstm和后向lstm的输出拼接而成;

s23:使用注意力计算器计算每一个解码时间步输入文本的注意力特征,得到文本注意力特征向量和记忆向量,具体如s231~s235所示:

s231:设解码器每个时间步的隐藏状态为st,并用s222中编码器最后一步得到的隐藏状态hn作为解码器隐藏状态的初始值s0;随机初始化一个长度等于输入文本长度的记忆向量rt,后续用于累计所有时间步下每个输入词的注意力权重叠加,从而在后续计算注意力权重时提供先前的注意力决策,以避免对原文中某些词的重复关注而生成重复的序列;

s232:在解码的每个时间步t,计算输入文本中每个位置i与该时间步t的关联向量et,i:

et,i=vttanh(whhi+wsst+wrrt,i+be)

其中v,wh,ws,wr,be是可以训练的参数;该时间步t的输出位置与每个输入文本位置的关联向量组合表示为向量et=[et,1,et,2,...,et,n];

s233:根据s232得到的关联向量et计算当前时间步t下输入文本每个词的注意力特征权重at=[at,1,at,2,...,at,n]:

at=soffmax(et)

s234:累计当前时间步t之前的所有时间步下每个输入文本位置的注意力权重at,用于更新当前时间步下的记忆向量rt,计算公式如下:

s235:利用s233生成的注意力权重at和s222生成的隐藏向量hi计算当前时间步t下的文本注意力特征向量ct:

s24:使用解码器中的单向lstm开始解码,每一步对隐藏状态进行更新,并计算得到该步输出词的概率分布,具体如s241~s243所示:

s241:使用解码器中的单向lstm网络解码,设lstm单元在时间步t的输出为yt,隐藏状态为st;在每一时间步t,使用s211中的词嵌入模块,查找上一时间步的输出词序号yt-1所对应的词向量gt-1;

s242:每一时间步t,使用上一时间步的隐藏状态st-1,并将上一时间步输出对应的词向量gt-1和s235中得到的文本注意力特征向量ct拼接起来作为lstm单元的输入,从而更新当前时间步的隐藏状态:

st=lstm(st-1,[gt-1,ct])

并且计算得到解码器的输出:

ot=vo(vsst+vggt-1+vcct)+bo

其中vo,vs,vg,vc,bo都是可以学习的参数;

s243:使用解码器的输出ot和掩码向量it得到该解码时间步输出词表的概率分布pv:

pv=soffmax(ot+it)

掩码向量随机初始化,之后如果上一步输出的词类别为l,则掩码向量的第l个元素设置为负无穷,从而避免解码器一直生成重复的序列。

进一步的,步骤s211中,所述词嵌入模块使用包括word2vec和glove在内的分布式词向量或包括bert在内的预训练语言模型。

进一步的,步骤s233中,所述注意力特征权重at中元素的展开形式为:

进一步的,步骤s241中,初始的第一个时间步中,将自定义的开始符“<sos>”作为上一时间步的输出词序号y0。

进一步的,对模型进行训练和评估,并选择训练效果最好的模型的步骤如下:

s31:将事件文本语料划分为训练集、验证集和测试集;训练集用于进行训练,验证集用于对模型的效果进行验证并对模型进行挑选,测试集用于进行测试;

s32:对s2构建的多事件检测模型进行训练,训练过程中使用teacherforcing机制进行训练;

s33:在模型的训练过程中,计算单一时间步的损失losst:

其中代表该事件步输出正确类别的词w*的概率,at,i,rt,i分别是输入位置i的注意力权重和记忆向量,λ是设定的超参数;

计算所有时间步t的整体损失:

通过最小化loss来训练模型,更新参数;

s34:使用准确率、召回率和f1值对模型效果进行评估,选择在验证集上f1分数最高的模型作为最优模型。

进一步的,利用训练好的模型,使用集束搜索的方法进行预测,从而得到生成序列,解析生成序列得到完整的多事件检测结果的步骤如下:

s41:在模型的测试与应用阶段,将测试文本输入步骤s3训练选择得到的最优模型中,每个时间步可以得到输出词表的概率分布pv;

s42:利用得到的概率分布,通过集束搜索的方法选择每一时间步的输出,最终得出最优生成序列;

s43:通过s1中序列化文本标注方法对应的标注规则解析生成序列,去掉生成序列中的分隔符、开始符和结束符,得到最终的多事件检测结果。

本发明相对于现有技术而言,具有以下有益效果:

为了解决现有方法对触发词抽取的过度依赖和对事件共现关系、事件类别语义信息忽略的缺陷,本发明利用序列生成模型可以生成不定长序列的特性,实现了在无需进行触发词抽取的情况下也能进行多事件检测的效果,降低了对数据集的标注要求,增强了方法的可用性。在构建序列生成模型时,使用编码器-解码器的架构,在解码预测输出的过程中使用上一时间步的输出作为输入,因此可以学习各事件类别间的共现关系。此外,本发明同时编码事件文本语义和事件类别名称的语义信息,使得在数据量较少的情况下也能加入更多先验信息得到良好的效果。

附图说明

为了更清楚地说明本发明的实施例的技术方案,下面将对实施例中所使用的附图进行简单地介绍。显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明一种基于序列生成模型的多事件监测方法的流程图;

图2为本发明提供的基于序列生成框架的多事件检测模型的架构图。

具体实施方式

为了更清晰地阐述本发明的技术方案,本发明非限制性地选择公开了实施例和附图,下面结合附图详细说明本发明的技术实现步骤。

如图1所示,一种基于序列生成模型的多事件检测方法,包括以下步骤:

s1:获取事件文本语料后,对文本进行预处理,然后使用序列化文本标注方

法对事件文本中的事件类别进行标注;

s2:构建基于序列生成框架的多事件检测模型;

s3:对模型进行训练和评估,并选择训练效果最好的模型作为最优模型;

s4:利用训练好的最优模型,使用集束搜索(beamsearch)的方法进行预测,从而得到生成序列,解析生成序列得到完整的多事件检测结果。

本实施例中,步骤s1的具体实现方式包括:

s11:获取事件文本语料后,对语料进行停用词和乱码等无关字符的清洗;然后使用分词工具对语料进行分词;

s12:对每一条事件文本语料中包含的事件类型进行序列化标注,标注格式为“事件类型a的名称[分隔符]事件类型b的名称[分隔符]事件类型c的名称...”,即直接将事件类型名称连成序列,中间用特定的分隔符隔开。若该文本不包含任何事件,则标注为“none”。然后将标注得到的序列首部添加自定义开始符“<sos>”,尾部添加自定义结束符“<eos>”。

如图2所示,本实施例中步骤s2的具体实现方式包括:

s21:将事件文本输入模型的输入层,将词转化为向量形式,并编码实体及词性特征;

s22:使用包含双向lstm神经网络模型的编码器进行编码;

s23:使用注意力计算器计算每一个解码时间步输入文本的注意力特征,得到文本注意力特征向量和记忆向量;

s24:解码器中的单向lstm开始解码,每一步对隐藏状态进行更新,并计算得到该步输出词的概率分布。

本实施例中,上述s2的各子步骤可通过下列具体步骤实现:

本实施例中,步骤s21的具体实现方式包括:

s211:使用词嵌入模块将输入文本的每个词转化为向量形式,词嵌入模块可以使用包括word2vec和glove等的分布式词向量或包括bert等在内的预训练语言模型;

s212:对文本中每个词对应的实体和词性类别进行编码,生成特征向量;

s213:将s211中得到的词向量和s212中词对应的实体词性特征向量拼接起来,共同组成维度为k的向量。设一条文本包含的词个数为n,则拼接后的向量可以表示为x1:n=[x1,x2,...,xn],其中xi表示文本中的第i个词,i∈[1,n]。

本实施例中,步骤s22的具体实现方式包括:

s221:将s21得到的特征向量作为输入数据,传入编码器;

s222:编码器中的双向lstm深度神经网络对输入数据进行编码,编码后整个句子得到的编码器隐藏状态可表示为h1:n=(h1,h2,...,hn),其中每个hi由前向lstm和后向lstm的输出拼接而成;

本实施例中,步骤s23的具体实现方式包括:

s231:设解码器每个时间步的隐藏状态为st,并用s222中编码器最后一步得到的隐藏状态hn作为解码器隐藏状态的初始值s0。随机初始化一个长度等于输入文本长度的记忆向量rt,后续用于累计所有时间步下每个输入词的注意力权重叠加,从而在后续计算注意力权重时提供先前的注意力决策,以避免对原文中某些词的重复关注而生成重复的序列;

s232:在解码的每个时间步t,计算输入文本中每个位置i与该时间步t的关联向量et,i:

et,i=vttanh(whhi+wsst+wrrt,i+be)(1)

其中v,wh,ws,wr,be是可以训练的参数。因此该时间步t的输出位置与每个输入文本位置的关联向量组合可表示为向量et=[et,1,et,2,...,et,n]。

s233:根据s232得到的关联向量et计算当前时间步t下输入文本每个词的注意力特征权重at=[at,1,at,2,...,at,n]:

at=soffmax(et)(2)

展开形式为:

s234:累计当前时间步t之前的所有时间步下每个输入文本位置的注意力权重at,用于更新当前时间步下的记忆向量rt,计算公式如下:

s235:利用s233生成的注意力权重at和s222生成的隐藏向量hi可以计算当前时间步t下的文本注意力特征向量ct:

本实施例中,步骤s24的具体实现方式包括:

s241:使用解码器中的单向lstm网络解码,设lstm单元在时间步t的输出为yt,隐藏状态为st。在每一时间步t,使用s211中的词嵌入模块,查找上一时间步的输出词序号yt-1所对应的词向量gt-1。特别地,由于初始的第一个时间步不存在上一时间步,因此第一步将自定义的开始符“<sos>”作为假设的上一时间步的输出词序号y0;

s242:每一时间步t,使用上一时间步的隐藏状态st-1,并将上一时间步输出对应的词向量gt-1和s235中得到的文本注意力特征向量ct拼接起来作为lstm单元的输入,从而更新当前时间步的隐藏状态:

st=lstm(st-1,[gt-1,ct])(6)

并且可以计算得到解码器的输出:

ot=vo(vsst+vggt-1+vcct)+bo(7)

其中vo,vs,vg,vc,bo都是可以学习的参数。

s243:使用解码器的输出ot和掩码向量it得到该解码时间步输出词表的概率分布pv:

pv=softmax(ot+it)(8)

掩码向量随机初始化,之后如果上一步输出的词类别为l,则掩码向量的第l个元素设置为负无穷,从而避免解码器一直生成重复的序列。

本实施例中,步骤s3的具体实现方式包括:

s31:将事件文本语料划分为训练集、验证集和测试集;训练集用于进行训练,验证集用于对模型的效果进行验证并对模型进行挑选,测试集用于进行测试;

s32:对s2构建的多事件检测模型进行训练,训练过程中使用teacherforcing机制进行训练;

s33:在模型的训练过程中,计算单一时间步的损失losst:

其中代表该事件步输出正确类别的词w*的概率,at,i,rt,i分别是输入位置i(即xi在文本中的位置i)的注意力权重和记忆向量,λ是设定的超参数。

计算所有时间步t的整体损失:

通过最小化loss来训练模型,更新参数;

s34:使用准确率(precision)、召回率(recall)和f1值对模型效果进行评估。选择在验证集上f1分数最高的模型作为最优模型。

本实施例中,步骤s4的具体实现方式包括:

s41:在模型的测试与应用阶段,将测试文本输入步骤s3训练选择得到的最优模型中,每个时间步可以得到输出词表的概率分布pv;

s42:利用得到的概率分布,通过集束搜索(beamsearch)的方法选择每一时间步的输出,最终得出最优生成序列;

s43:通过s1中序列化文本标注方法对应的标注规则(具体参见s12)解析生成序列,去掉生成序列中的自定义分隔符、开始符和结束符,得到最终的多事件检测结果。

为了进一步说明本发明的技术效果,下面基于一个具体案例来展示上述基于序列生成模型的多事件检测方法在具体数据上的效果。

实施例

为了更清楚地阐述本发明提出的技术方法,以ace2005公开事件数据集为例,具体阐述本发明提出的一种基于序列生成模型的多事件检测方法的实现步骤:

1.对ace2005公开数据集的事件文本语料进行停用词和乱码等无关字符的清洗,然后使用jieba分词工具对语料进行分词;

2.对每一条事件语料进行标签标注,比如一条语料包含“袭击”、“受伤”、“死亡”三类事件,则标注为“<sos>袭击<seq>受伤<seq>死亡<eos>”;若一条文本中不包含事件信息,则标注为“<sos>none<eos>”;其中“<sos>”是开始符,“<seq>”是分隔符,“<eos>”是结束符;

3.使用glove词向量将文本中的词转化为100维词向量矩阵;

4.将文本中词对应的实体类别编码为14位特征向量,将词性类别编码为14维特征向量,合并得到28位特征向量;

5.将词向量与实体词性特征向量拼接为128维的特征向量。长度为n的句子可以表示为x1:n=[x1,x2,...,xn],其中

6.将拼接后的128维特征向量传入编码器;

7.编码器中的双向lstm深度神经网络对传入的特征向量进行编码,编码后整个句子得到的隐藏状态可表示为h1:n=(h1,h2,...,hn),其中每个hi由前向lstm的输出和后向lstm的输出拼接而成;

8.解码器在每个时间步t下的隐藏状态为st,使用编码器最后一步得到的隐藏状态hn作为解码器隐藏状态的初始值s0。随机初始化一个长度等于输入文本长度的记忆向量rt,目的是记录已经生成的注意力权重,从而避免对原文中某些词的重复关注而导致的生成序列重复;

9.在解码的每个时间步t,使用tanh函数和线性层实现下列公式的计算,从而得到输入文本中每个位置i与该时间步t的关联向量et,i:

et,i=vttanh(whhi+wsst+wrrt,i+be)

其中v,wh,ws,wr,be是可以训练的参数。因此该时间步t的输出位置与每个输入文本位置的关联向量组合可表示为向量et=[et,1,et,2,...,et,n];

10.利用得到的关联向量et,使用softmax函数,计算当前时间步t下输入文本每个词的注意力特征权重at=[at,1,at,2,...,at,n],计算公式如下:

at=softmax(et)

展开形式为:

11.累计当前时间步t之前的所有时间步下每个输入文本位置的注意力权重at,用于更新当前时间步下的记忆向量rt,rt计算公式如下:

12.使用注意力权重at和编码器隐藏向量hi,计算当前时间步t下的文本注意力特征向量ct,计算公式如下:

13.使用解码器中的单层lstm网络开始解码,设lstm网络在时间步t的输出为yt,隐藏状态为st。特别地,第一步将自定义的开始符“<sos>”作为前一步的输出y0。使用glove词向量查找输出yt-1对应的词向量gt-1;

14.每一时间步t,使用上一时间步的隐藏状态st-1,并将上一时间步输出对应的词向量gt-1和文本注意力特征向量ct拼接起来作为lstm单元的输入,更新当前时间步的隐藏状态st,计算公式如下:

st=lstm(st-1,[gt-1,ct])

然后使用线性层计算得到解码器的输出ot:

ot=vo(vsst+vggt-1+vcct)+bo

其中vo,vs,vg,vc,bo都是可以学习的参数。

15.随机初始化一个掩码向量it,it长度等于输出词的总类别数。it后续的更新方式如下:如果上一步输出的词类别为i,则掩码向量的第i个元素设置为负无穷。从而避免解码器一直生成重复的序列。

然后利用解码器的输出ot和掩码向量it,通过softmax函数得到该解码时间步输出词表的概率分布pv,计算公式如下:

pv=softmax(ot+it)

16.将ace2005事件数据集按照60%、20%和20%的比例划分为训练集,验证集和测试集。使用训练集进行训练,使用验证集对模型的效果进行验证并对模型进行挑选,使用测试集进行测试;

17.对步骤3至步骤15所构建的基于序列生成框架的多事件检测模型进行训练,训练中使用teacherforcing机制。

18.使用如下公式计算每一个时间步的损失losst:

其中代表该事件步输出正确类别的词w*的概率,at,i,rt,i分别是输入位置i的注意力权重和记忆向量,λ是设定的超参数。

利用如下公式计算所有时间步t的整体损失:

通过最小化loss来训练模型,更新参数;

19.使用准确率(precision)、召回率(recall)和f1值三个指标对训练得到的模型效果进行评估。选择在验证集上f1分数最高的模型作为最优模型使用。

20.使用测试集对模型进行测试与应用,将测试文本输入最优模型中,每个时间步可以得到输出词表的概率分布pv;

21.利用得到的概率分布,通过集束搜索(beamsearch)的方法选择每一时间步的输出,最终得出综合效果最优的生成序列;

22.去掉生成序列中的自定义分隔符<seq>、开始符<sos>、结束符<eos>,可以直接得到该条文本中包含的事件类型。比如“袭击”、“受伤”、“死亡”。当文本中不包含事件信息时,会得到“none”的结果。

以上所述的实施例只是本发明的一种较佳的方案,然其并非用以限制本发明。有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型。因此凡采取等同替换或等效变换的方式所获得的技术方案,均落在本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1