文本预训练模型在信息安全场景的探索和实践

2021-01-18 00:00:00 数据 模型 文本 训练 对话


导读

本文介绍文本预训练模型在信息安全场景的一些探索和实践,主要聚焦于对话文本分类。信息安全场景种类繁多,其中一项具体业务是对用户提交的举报内容进行审核,判断被举报对象是否有违规问题。用户提交的举报材料有多种形式,而双方沟通的文字对话记录是一项关键证据。少量的对话文本可以通过人工的方式进行审核,而更大量、更快速的识别还需要借助算法。


背景

NLP角度看,识别上述虚假问题属于文本分类任务,输入双方对话文本,对定义的虚假问题做出识别和判定。依据不同的需求,任务可分为“多类别分类”和“多标签分类”两种,如图1所示。以下以租房场景“识别双方身份”任务为例介绍算法探索实践,该任务需要基于对话文本,同时识别双方(发帖方/浏览方)的身份信息(房东/中介/未知)。

图1 业务问题与算法问题的转化
当前文本分类比较成熟的算法是以TextCNN、RNN、Transformer为代表的深度学习方法,我们首先尝试使用TextCNN,这也是许多文本分类任务的baseline模型。


TextCNN

TextCNN[1]模型的特点是网络结构简单,利用多尺寸卷积核提取文本中的关键信息,能够较好地捕捉局部特征。因为是对话分类,和普通的文本分类相比还多包含了角色信息。我们首先尝试在每句对话内容之后都附加一个“role token”,如图2所示,“[Ra]”代表浏览方,“[Rb]”代表发帖方,从而将角色信息传递给模型。

图2 模型输入层的角色信息融入
将文本内容按对话顺序依次拼接,经过随机初始化的字向量层映射后作为模型的输入,中间为常规的卷积池化层,后通过sigmoid输出各个标签的概率。训练集规模约20k,测试集规模1k。在测试集上,“发帖方是中介”和“浏览方是中介”两个标签宏平均(Macro-averageF1值为87.3

表1 TextCNN模型测试结果
类似的模型结构,根据不同的需求,我们还训练了“房态虚假识别”、“整租合租识别”等多个对话分类模型,F1值均在86~90之间。在bad case分析中,我们发现存在一类hard samples,关键短语基本相同,只因说话角色不同,导致终判定也不相同。例如同样是“已经租了”,如果是发帖方说的,那很可能是本套房源已出租他人,可以认定为“房源虚假”;但如果是浏览方说的,则可能是他已在别处完成租房,与本套房源状态无关,应属于“无法判断”。另一种情形是本例中的“识别双方身份”任务,模型学习到了中介的关键特征,却容易在识别角色时出错,导致本该判定“浏览方是中介”,却给出了“发帖方是中介”的错误标签。

图3 TextCNN模型bad case分析
基于上述case,我们推测当前模型在进行对话分类任务时,对于角色信息的融入还不够充分。我们将目光投向业界,寻找更好的融合方式。

图4 BERT输入层设计
BERT[2]Google2018年发布的预训练模型,为NLP带来里程碑式的进展。BERT模型的输入可以是文本对,为了分隔两段文本,除了在input序列中插入[SEP],还另外添加segment embeddings层,不同部分的文本叠加不同的embedding向量以强化区分。虽然BERT句子对只有两部分,与对话文本(可能有多轮)有一定差异,但这种处理的方式可以借鉴。

图5 TextCNN_role模型结构
于是我们尝试改进原始的TextCNN模型,如图5所示,在输入层叠加role embeddings,不同角色的会话内容叠加不同的embedding向量。改进后的模型命名为TextCNN_role,我们期望通过这种方式,强化模型对于对话内容所属角色的认知。基于相同训练集和测试集,TextCNN_role模型测试结果的宏平均F1值为88.4,相比原始TextCNN提高1.1个百分点,如表2所示。

表2 TextCNN_role模型测试结果
改进有一定效果,不过还能进一步提高吗?

RoBERTa

BERT之后,预训练模型一直是NLP的热门研究方向,各种类型的PTMPre-trained Model)不断刷新着NLP竞赛榜单。PTM的思想基本可以归纳为两个阶段:预训练阶段,模型在大规模无标注文本中学习通用语言知识;微调阶段,继续学习下游任务,终得到合适的业务模型,这也是迁移学习的思路。我们之前使用的TextCNN模型是“从零开始”,既然可以“站在巨人的肩膀上”,为何不尝试一下呢?
我们选择了BERT元老的“继任”——RoBERTa模型[3]RoBERTaBERT的思路基本一致,主要改动是增加预训练数据、增大预训练步数与batch size、引入动态mask机制、去除NSP任务等。从目前来看,RoBERTa是一个很强的预训练模型 baseline。哈工大讯飞联合实验室和国内开发者brightmart都开源了RoBERTa中文版本[4][5],我们选择brightmart在Github发布的12层模型,该模型在预训练阶段使用的语料包含30G原始文本(近3亿句子,100亿中文字),覆盖新闻、社区问答、百科等多个领域。
微调阶段,对话文本在输入模型前需要做一定预处理。为了尽量和预训练保持一致,我们使用“[SEP]”分隔不同角色的对话内容,相同角色连续多次发言做拼接处理。segment embeddings的处理方式与之前相同,用不同的embedding向量代表不同的对话角色。

图6 对话文本的输入设计
开源代码只包含“多类别”分类,需要做几处改动才能支持“多标签”分类,主要是model输出层的softmax替换为sigmoid,同时将loss改为sigmoid_cross_entropy_with_logits,另外模型eval阶段的指标计算方式也要做相应更改。

表3 RoBERTa模型测试结果
基于相同的数据,模型测试结果的宏平均F1值为89.3,相比“改进版”TextCNN模型提高0.9个百分点。有一定的提升,但没有预想中的明显,原因在哪里?


RoBERTa-58Dialog

前面说到预训练分两个阶段,通常拿到业务数据后,直接在预训练好的模型上做微调即可。不过,这种方式真的是佳实践么?从目前的研究结果来看并不是,我们可以在目标领域和任务数据上继续预训练,从而获得更优的效果。
开源预训练模型一般是在通用语料集上训练的,如果在下游任务微调之前,能够使用目标领域的数据集进行继续预训练(domain-adaptive pretraining , DAPT),那么目标领域与原始预训练语料越不相关,DAPT效果提升越明显。如果继续预训练选择的语料是具体下游任务的数据集(task-adaptive pretraining, TAPT),也同样能获得效果提升[6]。需要说明的是,预训练任务的特点决定了预训练阶段只使用语料的文本内容,并不需要标注信息,如果具体下游任务的数据集是已标注的,只需取其内容,将标注信息丢弃即可。
具体到当前的租房场景“识别双方身份”任务,RoBERTa模型预训练数据是新闻、社区问答、百科等通用语料,而任务面对的却是租房场景的对话信息。后者有较强的业务属性,更加口语化,与前者差异较大,这也可能是直接进行微调效果不理想的原因。沿着这个思路,我们在RoBERTa中文模型基础上,尝试融入业务数据进行继续预训练,终产出了更加适用文本对话的预训练模型RoBERTa_58Dialog。
数据选择上,我们抽取举报审核场景用户提交的全量对话文本,每组对话均有多轮,清洗后作为“目标领域数据集”供DAPT使用。另外将20k“识别双方身份”任务的已标注数据去除标签,作为“下游任务数据集”供TAPT使用。从数据量看,DAPT数据远多于TAPT,具有更多的资源优势,而TAPT的优势是与下游任务直接相关。在任务顺序上,如果是先TAPT再DAPT,那么TAPT阶段(数据量少,与任务直接相关)学习到的“知识”,在DAPT时可能又被“遗忘”。因此,为了结合两者的优点,我们采用先DAPT再TAPT的顺序。
参数选择上,原始RoBERTa中文版模型预训练学习率为1e-4,在继续预训练阶段我们选择较小的2e-5,避免对之前学习的参数调整过多。其他一些参数配置如下,max_seq_length=128batch_size=32max_predictions_per_seq=12
终,根据继续预训练step的不同产出两个模型: 15k step模型和100k step模型,预训练mlm任务acc分别为0.730.76。从mlm任务看,100k step模型对业务数据的学习更充分些。两个模型分别进行下游任务微调,测试结果如表4所示。

表4 RoBERTa_58Dialog模型测试结果 
结果证明,DAPT+TAPT确实有效。和基于通用语料训练的RoBERTa相比,加入目标领域和下游业务数据的RoBERTa_58Dialog在“识别双方身份”任务有4.5-4.7个百分点提升。我们推测主要原因是原有预训练数据与业务相差较大,加入业务数据继续预训练收益较多。
至此,模型在识别效果上已有明显提升,只是基于PTM微调的模型参数量大,推理速度较慢。于是我们思考,有没有办法能够加快推理速度?

58Dialog-mini

预训练模型在许多任务上的表现都优于传统模型,但也有着训练难、参数多、推理慢的缺点,大大限制了模型的线上应用。因此,随着预训练模型的参数规模越来越大,知识蒸馏(Knowledge Distillation)的重要性也在日益凸显。知识蒸馏首先训练参数量大的teacher模型,再设计小参数量的student网络,通过一系列的蒸馏训练,将teacher模型学习的“知识”不断向student模型迁移,终后者的预测精度能够逼近前者,实现“小网络”近似“大网络”的效果[7]
本任务中,选取继续训练100k stepRoBERTa_58Dialog模型作为teacher模型。RoBERTa_58Dialog 有12transformer结构,为了加快推理速度,我们将student模型的transformer层数设为4,其他结构和参数均保持不变,蒸馏后的模型称为58Dialog_mini。
蒸馏时,teacher模型和student模型轮流训练,使用的数据为之前DAPT的对话文本。每个回合输入相同数据,teacher模型保持参数不变,student模型不断拟合teacher模型的输出权重,如此循环,直到student模型mlm任务的acc收敛。这里需要说明的是,之所以不使用预训练数据直接训练student模型,而是让其拟合teacher模型的输出,是因为后者的输出概率分布中包含更多的信息。我们的目标不是拟合训练数据,而是学习更好的泛化能力,在这一点上,teacher模型更有优势。
在实践中,我们发现层的初始化和映射选择也有一定的技巧。student模型的参数可以选择随机初始化,也可以载入teacher模型特定层的参数作为初始参数。如果选择后者,还需要考虑载入层的映射关系。通常我们认为BERT类的预训练模型,每一层学习到的知识各有侧重点:接近底层,对词法、句法等基础语言学知识更关注;接近输出层,对整体语义或者下游任务更关注。我们蒸馏产出的58Dialog_mini模型有4层,初始化时分别载入teacher模型[0, 3, 7, 11]层参数作为初始参数,实践发现这种初始化方式比随机初始化能够更快地收敛。
蒸馏完成后,58Dialog_mini模型mlm任务acc0.73,比teacher模型下降3个百分点。经过下游“识别双方身份”任务微调后,识别结果宏平均F1值比teacher模型低1.7

表5 58Dialog_mini模型测试结果   
效果的小幅下降能否换来推理速度上的提升?我们将两个模型分别部署至五八人工智能平台WPAI,硬件环境都是NVIDIA TESLA P40 GPU,各自调用1k次取均值。teacher模型平均耗时13.75ms,student模型平均耗时5.92ms,蒸馏后耗时减少57%,速度提升明显。在线上业务中,可以根据实际需求,牺牲一部分识别精度,换取更快的推理速度。   


总结与展望

本文以信息安全场景的“租房-识别双方身份”任务为例,描述了从基础模型到预训练模型的一步步探索和实践过程,核心还是结合业务实际和模型特点进行改造升级,表6是上述所有模型的测试结果汇总。

表6 模型测试结果汇总  
未来可以从以下几个方面做进一步探索和实践:
  1. 基础模型层面,尝试ALBERT[8]、ELECTRA[9]等更多类型的预训练模型;
  2. DAPT+TAPT阶段,尝试添加更多、更高质量的数据,目前来看这部分潜力还未挖掘完全;
  3. 知识蒸馏阶段,尝试优化训练目标、调整模型结构、选择多种初始化方式等,尽可能保留模型业务精度的同时加快模型推理速度。 

作者简介:
毛丁辉:58同城-信息安全部-多媒体算法组,开发工程师

参考文献:

[1] Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
[2] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[3] Liu Y, Ott M, Goyal N, et al. Roberta: A robustly optimized bert pretraining approach[J]. arXiv preprint arXiv:1907.11692, 2019.
[4] https://github.com/ymcui/Chinese-BERT-wwm
[5] https://github.com/brightmart/roberta_zh
[6] Gururangan S, Marasović A, Swayamdipta S, et al. Don\'t Stop Pretraining: Adapt Language Models to Domains and Tasks[J]. arXiv preprint arXiv:2004.10964, 2020.
[7] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.
[8] Lan Z, Chen M, Goodman S, et al. Albert: A lite bert for self-supervised learning of language representations[J]. arXiv preprint arXiv:1909.11942, 2019.
[9] Clark K, Luong M T, Le Q V, et al. Electra: Pre-training text encoders as discriminators rather than generators[J]. arXiv preprint arXiv:2003.10555, 2020.





相关文章