Fork me on GitHub

58 技术 | 文本表征模型在风控场景下的应用实践

周思丞 58技术

图片

01 导语

本文介绍了文本表征算法在58信安场景下的探索和实践。信息安全场景下业务种类繁多,在对用户发帖内容进行审核时,通过对文本建模得到其表征,既可以用于对文本的直接分类算法,也可以通过聚类算法快速得将文本信息归类。

02 背景

58集团业务线广泛,平台每日会产生千万量级以上的非结构化文本数据,如租房、买房的发帖数据,找工作的招聘数据,58同镇的社交类数据。高效的利用这些数据可以更好多对各个业务场景进行赋能。通过文本的语义表征能力可以将文本数据向量化,在下游的业务中可以直接采用本文表征进行更加细粒度的操作,例如直接对文本的语义表征进行分类,或者通过相似度计算的方式对帖子进行召回,再或通过文本相似度构建用户关系图谱。目前信息安全部在多个安全治理工作中应用了文本表征能力,根据业务场景的需要实践了多种类型表征算法,并根据痛点问题进行了探索优化。

03 基于词向量的文本语义表征模型

利用词向量加权得到文本表征的方法是一种非常简单但是有效的句子向量表示算法。基于词向量的方法的主要计算流程如图所示:

图片

图1 基于词向量的文本表征计算流程

首先,通过分词算法将文本预料切分成词的集合,去除掉句子中存在的停用词,并计算每个词算的bm25权重分值。

图片

拿到bm25分值后,选择分值topn的token,然后利用word2vec[1]、GloVe[2]和fastText[3]等词向量对单词进行表征训练,但考虑到词向量的表征能力与训练语料的丰富程度有关,因此采用了腾讯开源的词向量表征数据,该词向包括了800w条200维的中文词条,涵盖了绝大部分业务中出现的单词。最终文本表征的计算方式下:

图片

图片

表1 招聘业务场景下文本表征示例

表1为基于词向量的文本表征的示例。在获取句子表征之后,我们在文本涉黄招聘数据集上进行分类实验评测,结果如下:
图片

表2 基于词向量文本表征在分类场景下的效果

采用词向量表征的方式相较于训练的TextCNN[4]模型效果有略微的下降,由于算法的结构简单,在其他的业务场景下直接修改训练目标即可完成分类模型构建。但在风控场景下,除了对发帖数据直接进行判别之外,另一个重要的场景是对用户发帖内容进行聚类。考虑到基于词向量的建模比较粗糙,文本表征可能会受到部分非关键信息的词语影响,例如:

图片

表3 基于词向量文本表征的badcase分析

这类的badcase由于个别词发生变化,导致原本语义比较相似的query计算得到的相似度并不高,因此在我们用户发帖内容聚类的业务场景下,当前的表征能力十分有限。如果想要能够得到包含语义信息更丰富的文本表征,我们需要考虑通过采用更加细粒度的模型进行建模。

04 基于预训练的文本语义表征模型

近些年来,各种bert系的预训练模型层出不穷,其采用海量文本数据预训练的方式,能够使得模型学习到更多语言知识。其中,roberta[5]模型通过采用的动态mask language model训练任务,更大的batch_size,同时去除了效果不明显的nsp任务。相比于bert,在下游的任务中能取得更好的效果。

bert系模型学习mlm任务是比较充分的,能够学习token之间的相关性信息。但在做句子级文本表征时,由于存在高频词和低频次的差异,经过mean-pooling后的句子表征在空间中是非平滑的[6],从而并不能通过直接的相似度计算来衡量文本间的相似度。因此我们需要基于业务类型的需求,针对句子级别的表征设置更合理的finetune任务,来使得句子表征更合理。

1. 基于SimBert的文本语义表征模型

根据通常的预训练模型的使用流程,我们第一时间会想到的采用有监督数据来微调模型,但在处理文本表征任务时,如何设计合理的下游任务则成为了关键。simbert[7]是目前通过有监督方式获取语义相似度的一种有效的解决方案,同时我们将bert模型换成了效果更好的roberta模型。训练语料是基于业务标注的相似句对,通过一句来预测另一句的相似句生成任务来构建Seq2Seq部分,然后[CLS]的向量事实上就代表着输入的句向量,所以可以同时用它来训练一个检索任务,如下图:

图片

图2 SimBert模型输入示例

为了能够训练出更加精准的文本语义表征模型,需要审核人员根据业务治理需求标注100k的相似发帖数据。首先,在同一个batch中,将相似句“副驾出差月九千可新手” 和 “副驾送货月九千不拖欠”按照[CLS]SENT_a[SEP]SENT_b[SEP]和[CLS]SENT_b[SEP]SENT_a[SEP]分别加入进去。设计两个训练任务,相似句生成任务和相似句分类任务。

相似句生成任务是通过Seq2Seq模型,从SENT_a生成SENT_a。SENT_a内部做self-attention学习到句子本身的表征,SENT_a和SENT_b之间做attention,学习额外的句子信息。句子分类任务则是把batch中[CLS]向量拿出来得到一个句子向量的矩阵,然后对d维度做归一化,然后和转置后的矩阵做内积得到的相似矩阵,并mask对角线上的位置,作为一个分类任务训练,每个样本的目标标签是它的相似句。本质上是将batch内所有的非相似样本都当作负样本,借助softmax来增加相似样本的相似度,降低其余样本的相似度。

最终我们采用招聘发帖相似内容召回作为验证方案,同时对roberta最后一层(last-avg)和最后一层加第一层(last-first-avg)得到的mean-pooling句向量进行了对比实验,得到结果如下:

图片

表4 招聘发帖内容召回准确率在SimBert的模型效果

相对于加权词向量的方式,有监督的simbert明显能够学习到一些相似文本间的特征,效果更好。但我们也发现了问题,simbert的开源的训练预料明显内容更为相似,可以进行Seq2Seq的文本生成任务。而在我们业务上难以标注这样相似的数据,例如图2中的相似句子,让模型去做生成任务确实存在着极高的难度,很可能只有检索任务对模型的效果。因此,我们把生成任务去掉后进行试验:

图片

表5 招聘发帖内容召回准确率在SimBert-without-Seq2Seq的模型效果

实验证明去掉Seq2Seq任务后,文本召回准确率仅有小幅下降,这就说明的确生成任务并不适合我们的业务,simbert模型中只有检索式任务发挥了功效。那么如何才能进一步提升呢?

2.基于对比学习的文本语义表征模型

利用有监督数据来微调参数虽然能够取得比较优异的效果,但是获取大量的标注语料是十分困难的。对于信息安全场景下,刷单、刷钻等黑产相似内容的判定需要专业的人员来进行判断,因此标注的人工成本也是十分高昂的。对比学习是近些年来十分火热的研究方向,其思想是利用无监督的数据增强的方式对样本集中每条样本分别构造正例和负例,让模型通过检索式任务,在负样本中选择出正例,增加了模型训练的难度,让模型学习到正负样本之间的差异信息,使得模型生成表达能力更充分的文本表征。

图片
常见的数据增强方式有token裁剪、feature裁剪、打乱语序、dropout增强。本文采用了simcse[8]模型中利用dropout的数据增强方式,同时增加了在文本层的数据增强。具体流程如下:

  • 针对文本数据进行分词,例如:“招聘小区大厦保安”,随机的将10%的token进行同义词替换得到SENT_b。这里要注意替换的关键词避免是业务的核心词汇从而导致语义变换,在招聘业务下职位不会作为替换的目标。

  • 设置batch size为64,每次迭代输入32个SENT_a和对应的SENT_b,格式为[[CLS]SENT_a[SEP],[CLS]SENT_b[SEP]…]。

  • 设置roberta模型的dropout为0.3。采用simbert的方式构建[CLS]矩阵,同时mask对角线位置。

  • 设置训练的目标为:

    图片
    和simbert一样,我们采用相同的实验方案来对比二者的性能,结果如下:
    图片

    表6 采用SimCse方法的效果对比

通过实验结果我们发现,无监督的对比学习方法甚至效果要优于有监督的simbert算法,这里有两个主要因素导致:

(1)simbert在去掉Seq2Seq任务后,退化成有监督的文本检索任务,对于模型来说获取的知识比较少,提升效果不明显。

(2) 我们在采用对比学习的同时,增加了文本层面的数据增强,生成了半监督的样本。同时增加了dropout后的文本检索任务增大了模型训练的难度。

05 总结展望

本文以招聘发帖相似内容召回作为切入,描述了文本表征技术从加权词向量方式到对比学一步步的探索历程,核心还是结合业务实际和模型特点进行改造升级,表5是上述所有模型的测试结果汇总。

图片

表7 实验结果汇总

未来可以从以下几个方面来进行进一步的探索:

  1. 基础模型层面,考虑尝试其他T5,Electra等更多类型的预训练模型。
  2. 考虑采用Bert-flow的方式,从其他角度解决bert系模型表征不够充分的问题。
  3. 推广到关系图谱构建、用户节点表征等更多业务场景下。

参考文献

[1] Mikolov T , Chen K , Corrado G , et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.
[2] Pennington J , Socher R , Manning C . Glove: Global Vectors for Word Representation[C]// Conference on Empirical Methods in Natural Language Processing. 2014.
[3] Joulin A , Grave E , Bojanowski P , et al. Bag of Tricks for Efficient Text Classification[J]. Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 2, Short Papers, 2017.
[4] Kim Y . Convolutional Neural Networks for Sentence Classification[J]. Eprint Arxiv, 2014.
[5] Liu Y , Ott M , Goyal N , et al. RoBERTa: A Robustly Optimized BERT Pretraining Approach[J]. 2019.
[6] Li B , Zhou H , He J , et al. On the Sentence Embeddings from Pre-trained Language Models[C]// Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP). 2020.
[7] https://github.com/ZhuiyiTechnology/simbert
[8] Gao T , Yao X , Chen D . SimCSE: Simple Contrastive Learning of Sentence Embeddings[J]. 2021.


本文地址:https://www.6aiq.com/article/1628289659182
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出