一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于知识约束的两步式辟谣文本生成方法与流程

2021-11-09 21:10:00 来源:中国专利 TAG:


1.本发明涉及自然语言处理领域,尤其是涉及一种基于知识约束的两步式辟谣文本生成方法。


背景技术:

2.近年来,随着互联网以及信息技术的高速发展,网络已经成为当今社会最重要信息交流平台。根据“中国互联网络信息中心”发布的报告指出我国网民使用手机上网的比例达到99.3%,网络信息的时效性以及手机的便携性都极大地推动信息传播的效率。然而,随着社交媒体的高速发展,互联网也为谣言的滋生和传播提供丰富的沃土。
3.谣言广泛传播后给个人和企业带来的损失,摧毁社会信任体系。因此,谣言相关的研究工作具有很强的现实意义。目前,大多数学者对于谣言的研究主要集中在谣言的特征、谣言的传播模式和谣言的检测等方面,关于自动生成辟谣文本的研究非常有限。
4.现有的辟谣工作大多是基于人工的,而人工辟谣工作繁琐,需要消耗大量的人力物力,同时人工辟谣还存在时效性滞后的问题。辟谣文本生技术能够极大降低辟谣工作的人工成本和时间成本,是及时抑制谣言传播、有效降低谣言社会危害性的关键技术。
5.辟谣文本生成可以看作是自然语言生成的子任务,但它与其它文本生成任务又有所不同,辟谣文本生成任务不能简单地看作是端到端的生成任务,因为谣言本身携带的信息往往不足以支持辟谣文本的生成,即使是基于人工的辟谣方法,大多时候也需要借助常识或专业知识等外部信息,才能够完成辟谣工作。
6.外部知识的引入方法中,最常见的是通过知识图谱的方式来引入外部知识,知识图谱的基本组成单位是“实体

关系

实体”构成的三元组。在辟谣文本生成的任务中,假如在已有知识图谱的情况下,就能够获取辟谣相关的知识三元组链条,这些三元组知识链条可以用来支撑辟谣文本的生成。
7.辟谣文本生成主要存在以下几个难点:
8.(1)辟谣文本生成对外部知识高度依赖,谣言本身信息无法支撑辟谣文本的生成,即使是人工辟谣,往往也需要借助常识或专业知识等外部信息才能完成辟谣。
9.(2)对于长文本的生成,现有的文本生成方法只在开放性生成领域上表现良好,这其中还得益于解码搜索算法的随机性,而辟谣文本是具有逻辑性的辟谣说明,存在着长文本生成困难的问题。


技术实现要素:

10.本发明的目的在于针对上述辟谣文本对外部知识高度依赖以及辟谣长文本生成困难等问题,提供可以增加辟谣文本的说服力又可以为完整的辟谣文本生成做支撑,使生成的辟谣文本更具逻辑性的一种基于知识约束的两步式辟谣文本生成方法。
11.本发明包括以下步骤:
12.1)处理数据,得到知识三元组;
13.2)将知识三元组序列传入知识文本生成模型,得到知识文本序列;
14.3)将知识文本序列和谣言文本序列传入辟谣结论生成模型,得到辟谣结论文本序列;
15.4)将谣言文本序列和知识三元组传入辟谣结论生成模型,得到一步式生成的辟谣文本;
16.5)将知识文本序列和辟谣结论文本序列共同作为两步式生成的辟谣文本。
17.在步骤1)中,所述处理数据,得到知识三元组,可利用哈工大开源的ltp模型,先利用ltp模型得到句法分析树,然后以谓词为中心抽取三元组。
18.在步骤2)中,所述知识文本生成模型采用transformer多层解码器的架构,在原来tranformer的基础上去掉encoder

decoder之间的注意力层,同时更改解码器中的注意力机制。
19.在步骤3)中,所述辟谣结论生成模型采用15g中文语料训练好的pytorch版的gpt2

ml架构。
20.在步骤4)中,所述一步式生成是基于端到端的模型,采用15g中文语料训练好的pytorch版的gpt2

ml架构的辟谣结论模型,传入的是谣言文本序列和知识三元组,输出的是知识文本序列和辟谣结论文本序列,共同作为一步式生成辟谣文本。
21.在步骤5)中,所述知识文本序列由基于transformer多层解码器架构的知识文本生成模型得到,辟谣结论文本序列由采用15g中文语料训练好的pytorch版的gpt2

ml架构的辟谣结论模型得到,两者共同作为两步式生成的辟谣文本。
22.本发明以谣言为研究对象,基于transformer的多层解码器架构建立知识文本生成模型,利用知识三元组生成知识文本序列,同时采用pytorch版的gpt2

ml模型建立辟谣结论生成模型,引入谣言约束和知识约束生成辟谣结论,将生成的知识文本序列和辟谣结论共同组成辟谣文本。本发明通过建立两个模型,知识文本生成模型、辟谣结论生成模型,将这两部分生成的文本共同当作辟谣文本。本发明第一步基于知识三元组生成知识文本序列,它既可以增加辟谣文本的说服力又可以为完整的辟谣文本生成做支撑;第二步同时引入谣言约束和知识约束生成辟谣结论部分;这两步式生成的文本共同当作辟谣文本。两步式辟谣文本方法效果明显优于其他的生成方法,本发明通过引入外部知识来缓解缓解辟谣长文本生成困难的问题,还使生成的辟谣文本更具逻辑性。
附图说明
23.图1为本发明的总体结构图。
24.图2为本发明中知识文本生成模型的结构图。
25.图3为知识文本生成模型的掩码机制图。
26.图4为两步式辟谣文本生成结构图。
27.图5为gpt2

ml模型结构图。方框部分为transformer模块结构,48x代表一共包含48层。
28.图6为预训练的gpt2

ml模型结构图。
29.图7为知识文本生成模型微调的实验结果图。曲线a代表知识文本生成模型ktg的结果,曲线b代表ktg

fine,即模型在辟谣知识文本训练集上微调后的实验结果,纵坐标是
bleu

1指标的值。
30.图8为不同大小训练集对辟谣结论生成实验结果的影响。
具体实施方式
31.以下实施例将结合附图对本发明作进一步的说明。
32.本发明实施例建立两个模型,知识文本生成模型、辟谣结论生成模型,将这两部分生成的文本共同当作辟谣文本。图1为本发明的总体结构图。第一步如图左半部分所示,先利用知识文本生成模型生成知识文本序列;第二步如图右半部分所示,利用辟谣结论生成模型生成辟谣结论文本序列;这两步式生成的文本共同当作辟谣文本。
33.1、知识文本生成模型
34.本发明采用transformer多层解码器结构来做知识文本的生成,与原始的transformer解码器稍微不同的地方在于去掉encoder

decoder之间的注意力层,同时更改解码器中的注意力机制,位置嵌入方法也做一定的修改,模型的总体结构如图2所示。该模型是基于transformer单解码器结构的知识文本生成模型。“[bos]”是文本序列开始的表示符;“[sep]”表示分隔符,在模型训练时,三元组序列之间以及三元组序列与知识文本序列之间用它来分隔;“[eos]”表示句子的结束符;中间部分为本发明使用的transformer模块,10x表示transformer模块一共有10层,它们之间是叠加的;linear&softmax表示输出层。
[0035]
原始的transformer模型是包括编码器和解码器两部分,模型整体结构与transformer的解码器模块相似,只是去掉原始论文中encoder

decoder之间的注意力机制。
[0036]
知识文本生成模型中,给定一组或几组知识三元组g=((s1,r1,o1),(s2,r2,o2(,

,(s
m
,r
m
,o
m
)),其中,m为三元组的个数,s是三元组的头实体,r是实体间的关系,o是三元组的尾实体。根据这些知识三元组来生成对应的知识文本序列y=(y1,y2,y3,

,y
m
),m表示输出序列的长度,其中y属于词表c。在模型的训练阶段,利用greedysearch算法来选择出概率最大的候选序列与真实的文本序列y=(y1,y2,y3,...,y
m
)计算差损失,损失函数通常选用交叉熵,模型的目标函数可以表示为:argmaxp(y|x,θ),其中θ为模型的参数,这里可以将p(y|x)展开为:为模型的参数,这里可以将p(y|x)展开为:
[0037]
p(y|x)实际上是求在给定x的情况下,求出序列{y1,y2,...,y
m
}的联合概率分布,通常解码操作是逐步进行的,即从左到右逐步生成每一个token,所以在解码时刻t时,待生成的token不仅与模型参数θ有关,还与t时刻前所生成的所有token有关,从而生成连续的可读序列。
[0038]
由于使用的是单解码器模型,所以需要对其注意力机制做一定的改进,原始的解码器中注意力机制是单向的,而通常对于输入端的信息,为保证句子语义的完整性,注意力机制需要时双向的,而对于目标端的输出,注意力机制则需要是单向的。在模型的设计中,这些操作通常是借助掩码来实现的,所以本章节的模型对掩码方式做一些小改动,使得模型的输入端数据的注意力机制是双向的,输出端数据的注意力机制是单向的;在模型的预测阶段,则不用考虑掩码的影响,掩码方式具体如图3所示。
[0039]
图3为知识文本生成模型的掩码机制图。图3左半部分,src代表源端的输入,这里
具体是指知识三元组序列,trg代表的是目标端的输出,这里是指待生成的知识文本序列,深色部分表示添加掩码不可见,亮色部分表示可见,这样可以通过掩码的方式使得输入端的信息是双向可见的,输出端的信息是单向可见的。图3的右半部分可以直观的看出输入端和输出端对应的关系,其中,“[bos]”代表序列开始的特殊符,“[sep]”代表序列的分隔符,“[eos]”代表序列的结束符,虚线代表目标端生成时可见的序列内容,即只能看到该token前面的所有序列,这样模型从“[sep]”开始,生成目标端序列,直到结束符“[eos]”出现,通过使用这种掩码的方式,使得模型能够在训练的时候并行计算。
[0040]
给定输入序列x={x1,x2,

,x
n
),经过矩阵变换后得到q、k、v,分别代表query、key和value。在自注意力机制中,query是自身变换过来的,而在其它的注意力机制中,query来自外部。自注意力机制的公式如下所示:
[0041][0042]
其中,是人为指定的超参数,这是因为向量维度越长,运算后的值也越大,因此加上用以平衡。
[0043]
从自注意力机制的公式中,可以看出,自注意力计算公式是并行的,而在自然语言处理任务中,文本通常都是以序列的结构呈现的,这就导致如果直接用自注意力机制的方法,模型会同时看到整个序列的信息。在文本生成等领域,模型通常需要单向地逐步解码来生成文本序列,这就需要自注意力机制关注到已生成的序列。在实际的应用中,自注意力机制通常是配合不用方式的掩码来使用,通过掩码的方法来使自注意力机只关注到部分信息,通过调节给定掩码的方式来适应不用的任务。
[0044]
多头自注意力机制是基于自注意力的,具体方法是重复执行多次attention操作,再将所有的值连接起来,得到注意力操作后的序列,这就是多头自注意力机制。采用多头注意力机制主要是因为不同的头可能会注意到序列中不同方面的信息。
[0045]
对于输入的三元组g=((s1,r1,o1),(s2,r2,o2),

,(s
m
,r
m
,o
m
)),每个三元组的实体和关系之间用空格隔开,三元组之间用特殊符号“[sep]”分隔,然后将其分词。这里用x=(x1,x2,

,x
n
)表示由三元组经过上述处理后得到的序列,模型的输入用h0表示,h0的计算公式如下:
[0046]
h0=xw
e
pw
p
[0047]
其中,w
e
是词向量的嵌入矩阵,w
p
是位置嵌入矩阵,x代表输入的数据,p表示输入的位置编码,由于自注意力机制是并行运算的且不会考虑句子的前后关系,所以用它来表示输入数据的时序信息。得到h0后,再将依次其传入10层的transformer模块中,具体公式如下:
[0048][0049]
这里将transformer模块命名为transformer
block
,最后得到h
10
,其中l表示transformer模块的层数。每个transformer
block
的结构以及对数据的处理方式都是一样的,每个transformer模块主要包括多头自注意力机制层、批归一化层和前向传播层。
[0050]
这些transformer模块可以理解为是堆叠在一起的,数据会依次经过每层的transformer模块,最后经过一个全连接层和softmax归一化操作,得到相应词在词汇表上
的概率分布,这里记作p(y),公式如下,l为transformer模块的层数:
[0051][0052]
在模型训练阶段,采用基于极大似然估计的方法,使用交叉熵损失函数,并联合相应的优化算法来对模型进行训练。损失函数如下所示:
[0053][0054]
2、辟谣结论生成模型
[0055]
本发明辟谣结论生成模型的任务是在给定谣言文本和相应的外部知识三元组的情况下,生成辟谣文本序列。这里的辟谣文本可以细分为两部分,一部分是知识文本,它可以增加辟谣文本的说服力,另一部分是辟谣的结论,这部分主要是对谣言本身的内容做说明。
[0056]
将谣言文本序列定义为x=(x1,x2,x3,

,x
n
),其中n为谣言句子的长度,x属于词表c。知识三元组的定义方式与知识文本生成部分相似,这里记作g=((s1,r1,o1),(s2,r2,o2),

,(s
m
,r
m
,o
m
)),同样地,m为三元组的个数,s是三元组的subject,r是实体间的关系,o是三元组的object,其中每条谣言文本数据至少对应一组知识三元组。
[0057]
辟谣文本序列定义为y=(y1,y2,y3,

,y
n
),其中,n为辟谣文本长度,y属于词表c。辟谣文本序列包含两部分组成,一部分是外部知识文本,这里定义为y1=(y1,y2,y3,

,y
m
),m为知识文本的长度,另一部分是辟谣的结论部分,这里定义为y2=(y
m 1
,y
m 2
,y
m 3
,

,y
n
),所有的序列都共用一个词表。
[0058]
本发明辟谣结论生成部分的任务可以表述为,在给定谣言x和知识三元组g的情况下,生成辟谣文本y。模型的总体框架如图4所示,输入数据是谣言和知识三元组,输出辟谣文本序列y=(y1,y2,y3,

,y
n
)。
[0059]
模型的第一步是生成外部知识文本,也就是图4中虚线方框中的模型,该模型采用的是知识文本生成中训练好的模型,在后续的训练过程中,该部分模型的参数不作更新,只更新辟谣结论生成模型的参数。生成的外部知识文本可以作为辟谣的依据来增强辟谣文本的说服力,同时也为第二步的辟谣结论生成做支撑。
[0060]
模型的第二步是生成辟谣的结论,辟谣结论模型的输入是第一步生成的知识文本和谣言文本序列,输出的是辟谣结论文本序列,模型在第二步训练时,只对辟谣结论序列{y
m
,y
m 1
,

,y
n
}计算损失,并只对辟谣结论模型的参数做更新。
[0061]
这里与teacher forcing的思想类似,辟谣结论生成模型在训练阶段输入的知识文本为真实的知识文本,在模型的预测阶段,输入的则是由知识三元组生成的知识文本,这样做最主要的原因是为防止生成的知识文本的误差在辟谣结论生成模型中进一步累积。
[0062]
鉴于辟谣文本的数据量过小,而文本生成任务与其它自然语言处理任务不同,它往往需要大量的数据来训练模型才能生成可读性高的文本,bert作为一个经典的预训练语言模型,在文本理解等任务上表现良好,但是bert模型预训练的时候是双向的,与文本生成任务并不契合,而基于编码器

解码器框架的模型需要重新学习解码器端对于编码器端的注意力,在训练数据过少的情况下,难以得到好的生成效果,有实验证明使用通用的编码器

解码器框架可以利用bert等模型来做文本生成任务,但是所需要的文本数据量仍然要
比本发明中的辟谣文本数据量大很多。
[0063]
由于辟谣文本数据非常有限,而文本生成模型往往需要大量的数据来训练模型,才能够生成可读性较高的文本。同时,由于辟谣文本数据的特殊性,其他文本数据也不太适合用来辅助训练,因此,本发明辟谣结论生成部分使用基于预训练语言模型的方法,在预训练好的gpt

2的基础上来做辟谣文本生成的任务,通过训练更新其部分参数的方法来生成辟谣结论。
[0064]
gpt

2语言模型是单向的自回归模型,这与文本生成任务相契合,同时有实验证明只用3000条数据微调模型就可以在文章摘要生成任务上取得比较好的结果。但是gpt

2论文作者没有给出预训练好的中文语言模型,这里采用的是gpt2

ml,模型结构图如图5所示,选用的是由15g的中文语料训练得到的模型,本发明的实验是该模型的基础上做辟谣结论的生成,另外,该模型只提供预训练好的tensorflow版本的模型,这里将其转换为pytorch版本的模型来使用。
[0065]
模型训练时,冻结模型的大部分参数,指对绿色部分进行更新,也就是只更新文本和位置编码层和最后的全连接层的参数,其它参数都保持不变,用来生成辟谣结论部分。另外,由于gpt

2论文没有开源关于中文的分词器(tokenizer),这里使用的是bert开源的tokenizer,其它与gpt

2原始论文保持一致,词表使用的是预训练模型给定的词表。
[0066]
这里设数据进入文本和位置编码层后得到向量h0,其具体计算方法如下所示:
[0067]
h0=xw
c
pw
p
qw
q
[0068]
其中,w
c
、w
p
和w
q
分别代表词向量嵌入矩阵、位置向量嵌入矩阵和段矩阵,可以将段嵌入矩阵理解为区分输入端和输出端的标识。x为输入的数据;p为位置编码;q用来标记输入token的种类,这里具体是用0来标记谣言文本序列和知识文本序列,用1来表示辟谣结论文本序列,这是因为gpt2

ml语言模型对于源端和目标端的信息是同步输入并行计算的,所以需要q来区分源端和目标端的输入。需要说明的是,这里的w
c
和w
q
是共用一个矩阵的,这是因为预训练模型的开源代码是这么给定的,为不破坏模型的整体效果,所以这里与预训练模型保持一致。
[0069]
在得到输入的隐向量h0后,依次传入48层transformer模块,设经过所有的transformer模块后得到的向量为h
48
,再经过全连接层和softmax得到在词汇表上的概率分布,记作p(y),计算公式如下所示:
[0070]
p(y)=softmax(h
48
w
o
)
[0071]
其中,w
o
的维度与文本嵌入层的维度一致,从而得到输出在词汇表上的概率分布。在模型的训练阶段,使用最大似然的方法来训练模型,损失函数为交叉熵损失函数,具体公式如下所示:
[0072][0073]
模型在训练阶段的运算时并行的,模型的输入长度与输出长度保持一致,这里计算损失时,会利用段标识符q来区分源端与目标端,从而只计算目标句子的损失,这里计算的是序列{y
m 1
,y
m 2
,

,y
n
}的损失。
[0074]
为验证两步式辟谣文本生成的有效性,本发明中也尝试使用一步式的生成方法来
生成辟谣文本,具体方法是将谣言和知识三元组输入模型,然后生成辟谣文本,一步式生成就是基于的端到端的模型,输入数据在经过编码器,解码成输出的数据,但是,鉴于训练集数据量过小,这里同样也在预训练好的gpt2

ml模型训练,模型结构如图6所示。
[0075]“[sep]”为文本分隔符,模型的输入端为谣言文本序列和知识三元组序列,输入端为完整的辟谣文本序列。这里对于模型的微调方式与两步式的微调方式保持一直,也是只更新模型的文本和位置编码层以及最后的全连接层,其中数据分隔方法、数据处理方法等都与两步式生成模型保持一致,训练时也是采用基于极大似然估计的方法并联合相应优化算法对模型进行训练,这里模型的损失函数计算序列{y1,y2,

,y
n
}的损失,具体计算公式如下所示:
[0076][0077]
鉴于gpt

2预训练模型采用的解码策略是top

k采样方式,本发明的所有实验都保持使用这种解码策略。这里可以将解码过程表示为:已知模型和长度为m个tokens的序列{y1,y2,

,y
,
},解码的任务是生成后面n个连续的序列{y1,y2,

,y
m n
},这里的m和n与模型部分代表的含义不同,不是代表辟谣文本长度,只是为方便公式表达。这里将模型最终输出的概率分布记作p(y
1∶m n
),由于解码器是逐步解码的,可以将概率分布分解表示为:
[0078][0079]
在模型解码时,每一个时间步都输出一个概率分布,这里将时间步i时刻输出的概率分布记作p(y
i
|y
1∶i
‑1),这里的概率分布时经过softmax归一化操作得到的概率分布,所以其概率之和为1,这里人为给定一个超参数k,从该时刻输出的概率分布中选出概率最大的k个token,组成词表v
(k)
,令公式num中的p

值最大:
[0080][0081]
然后,将不在词表v
(k)
中的所有token的概率设为0,然后再重新归一化得到新的概率分布p

(y|y
1∶i
‑1),具体公式如下所示:
[0082][0083]
在得到i时刻的模型输出的概率分布后,按照新的概率分布从中随机选择token作为该时刻的输出,这里的随机并非是从词表v
(k)
中随机选择一个token,而是根据概率分布来选择,概率越大的token被选取的概率也就越大,概率为0则不会被选取。
[0084]
模型解码时,每步的输出都是按照上述方法进行选择,直到选取到分隔符“[sep]”则停止,没有用结束符“[eos]”是因为预训练模型用的是“[sep]”,为保持模型效果,实验中也使用分隔符代表句子结束符,如果始终没有学习到结束符,则生成到人为指定的最大长度停止。
[0085]
以下具体实施例含两部分:知识文本生成部分、辟谣结论结论生成部分。知识文本
生成部分包含3个实施例:知识文本生成模型性能评估、知识文本模型微调实验、知识文本生成实例分析;辟谣结论生成部分包含5个实施例:辟谣结论生成评估、微调方法对比、训练数据大小对实验结果的影响、两步式辟谣文本生成评估、实例分析。
[0086]
1.知识文本生成部分实验
[0087]
本发明构建基于知识三元组到知识文本的语料,语料的构建过程需要对句子进行三元组抽取,对三元组的抽取主要是基于哈工大开源的ltp模型,具体的做法是先利用ltp模型得到句法分析树,然后以谓词为中心抽取三元组,在得到这些三元组后,同样利用ltp模型得到句子中的命名实体,再根据这些命名实体尝试抽取命名实体有关的三元组。
[0088]
本发明知识文本生成部分使用的数据集一共有两份:(1)维基百科中文数据集。(2)辟谣知识文本数据集。目的是为生成知识文本,为完整的辟谣文本生成做铺垫。
[0089]
鉴于中文维基百科数据集中包含许多噪音且大多是以词条的方式出现,这里处理该数据的方式是按照中文常用的句子结束符来对文本进行分割,再将含有特殊符号的句子都去掉,最后保留长度在20到60个字之间的句子。使用三元组抽取工具,只保留能够抽取出三元组的句子,将不能抽取出三元组的句子舍弃掉,最终构成实验所用的维基百科数据集,维基百科数据集样例如表1所示。
[0090]
表1维基百科数据集样例
[0091][0092]
如表1所示,为统一表示,将数据集中的三元组当作知识三元组,对应的文本当作知识文本,可以看出有些文本抽取的三元组效果较好,有些则不太能反应句子的整体情况。维基百科数据集详细信息如表2所示:
[0093]
表2维基百科数据集详细信息
[0094] 数量知识文本平均长度36.5知识文本最大长度60平均三元组个数1.48样本总量474,789
[0095]
训练集、验证集、测试集按照80%、10%和10%的比例进行划分,数据集具体信息如表3:
[0096]
表3维基百科数据集划分
[0097] 数量训练集379,831
验证集47,479测试集47,479
[0098]
辟谣知识文本数据集是由人工标注得到,数据来源为“中国互联网联合辟谣平台”,在得到辟谣相关的知识文本后,同样采用上述ltp工具抽取三元组,对无法利用工具抽取知识三元组的文本,采用人工标记得到,最终得到369条知识文本数据,数据信息如表4:
[0099]
表4辟谣知识文本数据集
[0100] 数量知识文本平均长度29.8知识文本最大长度54平均三元组个数1.41样本总量369
[0101]
鉴于辟谣知识文本数据过少,本发明实施例将所有的辟谣知识文本数据全部当作测试集。
[0102]
对比例都是基于encoder

decoder架构的,编码器输入的最大长度没有固定,根据数据自动调整,每个batch中序列的长度都调整为该批次中数据token长度的最大值。解码器在训练的时候,也是根据每个batch自动调整长度的。在预测的时候,编码器保持与训练时一样,解码器的最大长度设为60,都是采用beam search的解码搜索算法,beam search方法中的beam size都设为10。
[0103]
在所有的对比例中,解码器输出的文本都是以“[bos]”开始,以“[eos]”结束,所有的模型都是采用极大似然估计训练,损失函数都采用交叉熵损失函数,对于所有的填充词“[pad]”,不计算其损失,只对知识文本计算损失。
[0104]
实施例的运行环境如表5所示:
[0105]
表5运行环境
[0106]
模型训练环境操作系统:ubuntu 16.04cuda:nvidia cuda toolkit 10.1编程语言:python 3.6深度学习框架:pytorch 0.4gpu:nvidia gtx 1080xram:32g
[0107]
使用的单解码器模型参数设置如表6所示:
[0108]
表6模型训练相关参数设置
[0109]
训练超参数词表大小:25002位置嵌入最大长度:1024mask的最大长度:1024纬度大小:768transformer层数:10
每层注意力头个数:12激活函数:geludropout:0.1batch size:32epoch:30优化函数:adam初始学习率:0.00015生成句子最大长度:100beam size:10
[0110]
实施例1:知识文本生成模型性能评估
[0111]
知识文本生成部分使用多种评价指标对不同文本生成模型作对比,结果如表7所示,加粗标识的是每一个评价指标最好的结果。这些指标主要是基于n

gram来计算的,因此,不同的分词方式,会使评价的指标数值略有不同,所有实施例和对比例都是采用与模型训练时相同的分词工具,然后使用统一的评测工具计算得分。
[0112]
表7不同模型在wiki数据集上的测试结果
[0113] bleu

1bleu

2bleu

3bleu

4rouge

lseq2seq19.258.024.422.5819.56seq2seq

att37.1827.8220.9616.0541.47transformer41.6733.0426.2520.1248.64ktg42.1633.0427.0122.1449.48
[0114]
从表7中可以看出,seq2seq加入注意力机制后,生成的效果显著提高,这是知识文本平均长度较长,循环神经网络在生成长句子时,容易损失很多信息,加入注意力机制后,能在一定程度上缓解循环神经网络信息损失的问题。transformer与循环神经网络相比,在结构上更适合文本生成任务。ktg是文发明使用的知识文本生成模型,即对掩码做改进的单解码器模型,在所有的指标上都优于经典的基于编码器

解码器框架的方法,实验证明,本发明知识文本生成模型的有效性。
[0115]
由于该模型主要是为辟谣文本生成任务服务的,这里也在辟谣数据集中的知识文本生成上做实验,所有的辟谣文本中的知识文本都是当作测试集,模型不在辟谣知识文本数据上做训练,直接将辟谣知识文本数据集中的知识三元组输入模型,生成知识文本,参考文本为真实的知识文本,在辟谣文本数据集上的结果如表8所示。
[0116]
表8不同模型在辟谣知识文本数据集上的文本生成结果
[0117] bleu

1bleu

2bleu

3bleu

4rouge

lseq2seq18.889.154.772.3318.04seq2seq

att40.3532.2225.9520.8445.84transformer47.3738.2730.9424.7548.03ktg47.6739.7533.1027.2450.25
[0118]
对比表7和表8各方法在不同数据集上的表现,可以看出各模型在两份测试集上表现相近,说明维基百科数据适合用来训练辟谣知识文本,这可能是因为维基百科数据本就是基于知识构建的知识文本数据集,在内容和形式上都与辟谣知识文本相近。同时,也可以
看出模型的泛化能力较强。
[0119]
对比其它模型,ktg模型在辟谣文本数据集上的表现同样要高于其它的基于编码器

解码器框架的经典模型,证明ktg模型生成辟谣知识文本的有效性。
[0120]
实施例2:知识文本模型微调实验
[0121]
微调实验目的是为生成辟谣的知识文本,为探索如何更好地生成辟谣知识文本,这里将辟谣知识文本数据按照90%、10%的比例再次划分数据集,没有划分验证集,具体如表9所示:
[0122]
表9辟谣知识文本数据集划分
[0123] 数量训练集332测试集37
[0124]
在维基百科数据训练好的模型的基础上,再使用辟谣知识文本数据进行训练,相当于是把维基百科训练好的模型当作预训练模型,然后在辟谣知识文本数据集上进行微调,鉴于辟谣知识文本数据过少,这里对模型进行微调的方式是只更新模型最后的全连接层,微调后的结果如表10所示:
[0125]
表10模型在辟谣知识文本上微调的结果
[0126] bleu

1bleu

2bleu

3bleu

4rouge

lktg49.5040.7033.5928.0052.36ktg

fine50.3541.6534.7229.1253.10
[0127]
根据表10所示,ktg和ktg

fine都是代表本发明中知识文本生成部分使用的单解码器模型,这里ktg具体是指模型在维基百科数据集上训练后,在辟谣知识文本测试集上的实验结果;ktg

fine代表模型在辟谣知识文本训练集上微调后的实验结果,这里取的是综合指标最好的结果。
[0128]
表8和表10中的ktg各项指标值略有差异,这是因为表8是在所有的辟谣知识文本数据上的实验结果,测试的数据越多,越能体现模型的效果。而表10是为探索模型微调的效果,所以将辟谣知识文本划分为训练集和测试集,以说明微调对实验结果的影响。
[0129]
从表10中可以看出,模型在微调后的实验结果要优于微调前的结果,这说明,对与在维基百科数据上训练好的模型,使用辟谣知识文本数据进行微调,能够使模型学习到辟谣文本知识所特有的信息,从而提高方法效果。
[0130]
为直观感受微调模型对实验结果的影响,这里选取bleu

1作为评价模型效果的指标,结果如图7所示。bleu

1可体现模型生成的准确率,从图中可看出,通过微调模型,可使其在辟谣知识文本生成上的表现更好。同时能够发现,训练到后面,模型的效果显著下降,这可能是因为辟谣知识文本数据量过少,在小数据集上训练会破坏模型整体的文本生成能力。
[0131]
实施例3:知识文本生成实例分析
[0132]
这里分别对维基百科知识文本和辟谣知识文本进行实例分析,对维基百科数据的实例分析如表11所示:
[0133]
表11 wiki知识文本生成样例
[0134][0135][0136]
从表11中可以看出,seq2seq模型往往会忽略源端输入的信息,这可能是循环神经网络对于信息的损失比较大;seq2seq

att效果要比不加注意力机制好很多,明显能够捕获源端输入的信息;transformer和ktg效果要明显优于其它的模型,生成的句子可读性强,并且不会偏离知识三元组,基本会围绕知识三元组来进行生成。
[0137]
对辟谣知识文本生成的结果同样取出两条样例进行分析,样例信息如表12所示:
[0138]
表12辟谣知识文本生成样例
[0139][0140]
对于表12中的样例1,虽然ktg生成的文本与真实的参考文本有一定的出入,但是生成的句子也是合理的;对于表12中的样例2,知识文本中没有出现“眼睛”,但transformer
和ktg都生成与真实文本相同的句子,说明对于常规的句子,模型有一定的记忆能力。这些实例都说明ktg生成的句子可读性较强,基本不会偏离知识三元组,并且具有一定的逻辑性。
[0141]
2.辟谣结论生成部分实验
[0142]
基于上一部分实验中的数据标注规范,从“中国互联网联合辟谣平台”上标得到369条辟谣文本数据,每组数据都包含“谣言文本”、“知识文本”和“辟谣结论”,除此之位,本文还从知识文本中抽取“知识三元组”,其中,知识三元组是采用的是自动抽取方法得到,其它部分都是由人工标记得到的,对于无法自动抽取知识三元组的知识文本,采用人工标记的方式得到相应的知识三元组,从而得到辟谣文本数据集,辟谣数据集的详细信息如表13所示:
[0143]
表13辟谣文本数据集详细信息
[0144]
辟谣文本数据集谣言平均长度:12.6谣言最大长度:43知识文本平均长度:29.8知识文本最大长度:54辟谣结论平均长度:15.7辟谣结论最大值:36知识三元组平均个数:1.4数据总量:369
[0145]
由于数据集的数量有限,这一部分的实验数据按照90%和10%的比例划分训练集和测试集,没有划分验证集,具体信息如表14所示。
[0146]
表14辟谣数据集样本数
[0147] 数量训练集332测试集37
[0148]
数据样例如表15所示:
[0149]
表15辟谣文本数据样例
[0150][0151]
由于gpt2

ml模型的参数较多,需要更大的显存才能进行实验,这里实验的运行环境与之前的实验环境有所不同,实验具体运行环境如下表16所示:
[0152]
表16实验运行环境
[0153]
模型训练环境操作系统:ubuntu 16.04cuda:nvidia cuda toolkit 10.1编程语言:python 3.6深度学习框架:pytorch 1.2gpu:nvidia gtx titan x 1ram:128g
[0154]
鉴于实验数据量过少,这里对比实验参数设置的比较小。对比实验中,涉及到长短记忆神经网络单元的隐藏参数都设为128,词向量维度为128,编码器数据长度不限制,解码器在模型预测的时候,所有解码器的最大长度设为40,所有但解码器模型最大长度设为130。
[0155]
transformer模型的编码器和解码器层数都为6,其中所有涉及到自注意力机制的都是8个头,词向量维度为128,位置编码方式与原论文中保持一致。为实验的公平性,这部分的所有的实验都公用一个词表,词表的大小为8021,分词的方式也保持一致,数据的处理方式也是一致的,三元组内部元素之间使用空格分隔,三元组之间使用特殊的符号分隔。
[0156]
两步式生成模型是基于预训练模型的,关于gpt2

ml参数及训练时参数设置表17:
[0157]
表17 gpt2

ml模型训练相关参数设置
[0158]
训练超参数词表大小:8021位置嵌入最大长度:1024mask的最大长度:1024维度大小:1536transformer层数:48每层注意力头个数:24激活函数:geludropout:0.1batch_size:8epoch:20优化函数:adam初始学习率:0.00005生成时句子最大长度:150top

k:8
[0159]
同样需要注意的是,这里的“生成时句子最大长度”150主要是在预测时使用的,它指的不是生成句子的最大长度,而是指模型在预测时“谣言文本序列”和“辟谣文本序列”的长度之和不大于150。top

k代表的是top

k随机解码中k的大小。
[0160]
为保证实验的公平性,这部分所有的实验都共用一套词表。由于不同的分词可能会导致评测指标的结果有所差异,而gpt

2模型没有开源中文的分词器(tokenizer),这里所有模型的分词方法都采用基于bert开源的tokenizer,然后使用评测工具计算结果。
[0161]
实施例1:辟谣结论生成评估
[0162]
首先对辟谣结论生成的结果进行评估,参考文本为真实的辟谣结论文本序列,将模型的输入看作为谣言序列和知识文本,针对辟谣结论的生成效果进行评估,实验部分用多种评价指标对不同的文本生成模型对比,实验结果如表18所示:
[0163]
表18不同模型在测试集上的生成文本实验结果
[0164] bleu

1bleu

2bleu

3bleu

4rouge

lseq2seq2.852.04e

83.97e

111.76e

113.97seq2seq

att2.852.04e

83.97e

111.76e

113.97transformer2.852.04e

83.97e

111.76e

113.97gpt2

ml30.5822.1715.2611.1033.99
[0165]
其中,对比实验中一些指标数据相同是因为模型最终都收敛到全部生成句号,且不会生成结束符,这里将对比试验中辟谣结论文本数据的最大生成长度都设为相同值,所以计算出的部分指标数据相同。
[0166]
对比实验中模型全部生成句号的原因在于训练数据过少,与文本分类等模型不同的是文本生成模型通常需要大量的数据来训练,这样才能够使模型学习到句子间隐含的关系。
[0167]
从实验结果中可以看出,通过微调预训练好的语言模型的方法,可以在极少量的数据的情况下,将模型调到比较好的效果,模型生成的效果在准确率、召回率等方面,都远高于直接训练常规的文本生成模型。
[0168]
生成的辟谣结论文本质量较高主要得益于预训练模型的记忆力,它本身在大量的数据中学习到句子间的关系,在不破坏模型整体结构和参数的情况下,能够生成可读性较高的文本,保留模型生成文本的能力。
[0169]
实施例2:微调方法对比
[0170]
简单地将gpt

2模型看作是由三部分组成:文本和位置编码层、transformer模块层和全连接层,为探索微调模型不同部分参数对最终生成效果的影响,这里采用不同的微调方式来进行实验,实验结果如表19所示。需要说明的是,这是是对第二步的辟谣结论生成模型的效果做评估的,即评估辟谣结论的生成效果,参考文本为真实的辟谣结论文本。
[0171]
表19不同的微调方式对实验结果的影响
[0172] bleu

1bleu

2bleu

3bleu

4rouge

lhead

embed

tran0.350.000.000.005.95head32.7724.6018.0313.5831.16embed14.158.985.994.1519.07head

embed34.5627.5522.0918.0234.17
[0173]
其中,head

embed

tran是对模型文本和位置编码层、transformer模块层和全连接层的参数进行更新;head是只对模型最后的全连接层进行参数更新;embed是对模型的文本和位置编码层进行参数更新;head

embed是对模型的文本和位置编码层和最后的全连接层进行更新。
[0174]
head

embed

tran实验结果表明对整个模型进行参数效果会很差,准确率几乎接近为0,召回率指标稍微好一些,这是因为模型会倾向于生成单个字或者词,类似于生成

会”、“不会”、“不是”这样的文本,原因可能是模型本身用大量是问答语料来进行预训练,同时,在训练的时候,给定数据的方式与问答的形式相似,这样导致模型更容易生成类似语料。模型的准确率低召回率稍高主要原因是生成的字词比较通用,出现在参考文本中的几率较大,所以召回率分数较其它指标高一些。
[0175]
对比embed、head

embed和head的实验结果,可以看出在只更新文本和位置的嵌入层参数时,模型的效果要比更新最好的全连接层的效果要差很多,可能是因为最后的全连接层能直接影响模型的输出。而微调模型的文本和数据嵌入层相比于微调整个模型效果又要好很多,这是因为调节整个模型时,在数据量很少的情况下,会破坏模型整体的参数。
[0176]
对比head

embed和head的结果可以看出,只微调模型最后的全连接层能够达到很好的效果,这是因为transformer模块层能够保留模型的核心部分参数,这里对于特定的任务,调节最后的全连接层能够让模型较好地适应新的数据和任务。同时,文本和位置嵌入层能够帮助模型更好地适应新数据,从评测指标上可以看出,同时更新文本和位置嵌入层以及最后的全连接层相比于只更新最后的全连接层,效果要略好。
[0177]
基于上述的实验结果,在后面的一步式生成实验中,用基于gpt

2的模型参数更新方式选择更新文本和位置嵌入层和最后的全连接层。
[0178]
实施例3:训练数据大小对实验结果的影响
[0179]
由于辟谣文本数据非常小,为进一步探索数据量对实验结果的影响,这里使用不同大小的训练数据来进行实验。将辟谣文本的训练集按照不同的比例随机抽取,抽取出的数据作为新的训练集,然后进行实验对模型进行微调;测试集保持与实施例1和实施例2实验中的测试集一致,不做任何改变。
[0180]
这里是针对辟谣结论生成模型来进行实验的,所以评价的是辟谣结论文本的生成效果,参考文本为真实的辟谣结论文本。这里同样使用与之前实验相同的指标进行实验评估,实验结果如图8所示。
[0181]
从图8中可以看出,随着训练数据量的增加,模型的效果也在增加,虽然中间可以看出有波动,但基本可以认为训练集的大小与模型效果呈现某种正相关,且还有继续上升的趋势,根据这个趋势,不难看出增加辟谣文本的数据量可以提升辟谣结论生成模型的总体效果。
[0182]
造成中间波动最可能的原因是因为数据量过小,在小数据上进行训练的结果本身就是不稳定的,而且小数据下测试集的微小改变都能在评测指标上体现。
[0183]
实施例4:两步式辟谣文本生成评估
[0184]
为验证两步式辟谣文本生成方法的有效性,这里对比两步式辟谣文本生成和直接生成辟谣文本的实验效果,实验结果如下表20所示。这里对比的是辟谣文本的生成效果,也就是评估知识文本和辟谣结论共同的生成效果,参考文本是真实的辟谣文本。
[0185]
表20两步式与一步式生成的实验结果
[0186] bleu

1bleu

2bleu

3bleu

4rouge

ltransformer1.761.120.000.007.63gpt2

ml(one

step)25.4616.3610.707.6222.57gpt2

ml(two

step)47.1737.6130.4224.8443.74
[0187]
transformer是基于常规的编码器

解码器模型,使用辟谣文本数据对其进行训
练,输入的是谣言文本序列和知识三元组,输出的是辟谣文本序列。这里基于编码器

解码器的框架只用transformer,因为辟谣文本数据量过少,一般文本成模型需要大量数据的训练。从实验结果中可以看出,transformer的效果很差,这里取的还是效果最好的结果,因为模型有时候无法收敛,会随机生成。
[0188]
gpt2

ml(one

step)代表的是图7所示的一步式辟谣文本生成方法,它是在预训练模型的基础上来做辟谣文本的生成,输入的是谣言文本序列和知识三元组序列,输出辟谣文本,对于gpt2

ml微调的方法使用的是微调方法对比实验中效果最好的微调方法,实验结果显示,预训练模型显著优于没有预训练的transformer模型。
[0189]
gpt2

ml(two

step)代表的是本发明中的两步式辟谣文本生成方法,从实验结果中可以看出,其生成结果在各个指标上的效果要远优于一步式的生成结果。
[0190]
对比gpt2

ml(one

step)和gpt2

ml(two

step)的实验结果,两步式的辟谣文本生成效果要明显优于直接生成的效果,导致这种结果可能有以下几个方面的原因:(1)维基百科数据本身是对词条进行说明的文本,它在内容与形式上都与知识文本相近,gpt2

ml虽然也是用大量数据预训练好的模型,但是其训练的数据多种多样,例如日常对话数据等。(2)对于长文本的生成,目前的生成方法只在随机性生成领域表现较好,两步式的辟谣文本生成方法能在一定程度上缓解长文本生成困难的问题。(3)现有的解码方法都是逐步解码的,对于长文本,其生成的误差会逐步累积,最终可能会偏离谣言的约束。
[0191]
最后,从实验结果中可以看出,使用预训练模型在小数据集上能够明显地提高辟谣文本生成的效果,相比于不使用预训练语言模型,其各项指标都要高出很多。
[0192]
实施例5:实例分析
[0193]
两步式辟谣文本生成样例如下表21、22、23所示:
[0194]
表21两步式生成辟谣样例一
[0195]
[0196]
表22两步式生成辟谣样例二
[0197][0198]
表23两步式生成辟谣样例三
[0199][0200]
从实施例中可以看出,transformer由于训练数据过少,生成的效果会很差,直接会忽略输入端的信息,同时,很多时候模型都不能收敛,会随机生成文本或者生成逗号或直接生成结束符,这里取的是收敛较好的结果。
[0201]
gpt2

ml(one

step)是使用gpt2

ml预训练模型来进行一步式的生成方法,也就是输入谣言文本序列和知识三元组序列,来生成辟谣文本,从实例中可以看出,虽然生成的文本可读性较高,但不是符合逻辑的辟谣文本,只是与谣言相关的文本。
[0202]
gpt2

ml(two

step)是本发明提出的两步式生成方法,从示例中可以看出,生成的辟谣文本,从生成的结果可以看出,两步式的辟谣文本生成更能够针对谣言进行说明,而且
不是简单地将谣言变为否定句。
[0203]
从表21中的样例可以看出,输入端乃至真实文本都没有出现“人工培养”,但是生成的辟谣结论生成该字段,并且放在这里很合理,这主要得益于预训练模型本身的知识。
[0204]
上述实验和结果表明,本发明相对于现有的技术具有如下的优点和效果:
[0205]
(1)本发明知识文本能够有效提高辟谣文本的说服力,同时还可以增强辟谣结论的生成效果,辟谣结论生成模型可以有效地捕获谣言本身的信息和知识文本的信息。
[0206]
(2)相比于一步式的生成结果,本发明中提出的两步式的辟谣文本生成更不易偏离谣言文本信息,从实例分析中可以看出,一步式的生成结果只是与谣言或知识的某些词相关,虽然可读性较高,但是不是符合逻辑的辟谣文本,这是由于解码方法是逐步进行的,解码误差累积容易导致辟谣文本偏离谣言的约束,
[0207]
(3)将辟谣文本生成任务分为两步式的生成在一定程度上缓解长文本生成困难的问题,实验结果显示,两步式的辟谣文本生成效果在各个指标上要明显高于其它模型。
[0208]
(4)本发明中的实验在预训练语言模型的基础上进行学习,使得小样本的情况下,也可以生成可读性高的辟谣文本,随着预训练语言模型的快速发展,使得语言模型拥有一定的记忆能力,这也为小样本学习提供新的方向。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献