cover_image

语义理解技术在货拉拉智能质检中的探索与实践

智能运营部 货拉拉技术
2023年07月28日 09:54

背景

随着货拉拉平台用户数和业务量的快速增长,呼叫中心的电话语音、工单系统的文本,以及其他各类渠道的信息,汇总成了庞大的服务数据。在这些服务数据中,如何判断服务人员的服务水平和质量?他们所提供的服务是否符合服务规范?这些数据中是否隐含着业务机遇?是否内含着舆情和风险信息?是否可以提供发现具体业务问题的方法?

解决此类质量检测问题,传统质检的方式需要耗费大量人力,然而往往效果不佳。具体而言,质检人员随机抽取服务数据进行复核检查,凭经验人工筛选出可能存在问题的工单、电话和其他数据。人工质检抽样比例低,不能做到全面覆盖,且质检的准确性不高,漏检风险大,也不易发现潜在的业务机会与舆情风险。

解决方案

为了高效、准确地解决这些问题,我们基于NLP语义理解和ASR语音识别等技术,对服务语音数据、文本数据进行智能质检分析,形成了一套智能质检系统,其质检流程如图1所示。相比传统人工质检,智能质检实现质检全渠道100%全量覆盖和风险精准识别。

在我们的质检系统流程中,首先把热线录音通过ASR语音识别技术转译成文本数据,这样在线文本和热线录音都能通过NLP技术统一处理,接下来根据公司业务需求和监管要求等设置对应的规则,然后智能质检机器人通过语义理解对进线对话进行分析,结合质检规则给出对话的打分,打完分之后汇总详细的质检结果和数据报表,最后人工对质检结果进行复核。

图片

1 质检基本流程

智能质检的核心是对话语义理解,本项目方案包括文本分类和实体识别两部分,模型采用预训练语言模型。对话语义理解的流程如图2所示,通过语义理解模型,可以对每个消息的意图和实体进行识别。在得到语义理解的结果之后,结合我们预先设置的规则,推理引擎推理得到会话级别的事件,目前业务中的事件分为舆情事件和安全事件,舆情事件举例:额外收费、货丢货损、客服辱骂用户等,安全事件举例:交通事故、抢劫、盗窃、骚扰、恐吓等。

图片

2 对话语义理解流程

如系统架构图3所示,为了提高模型的效果,加快迭代速度,我们探索了数据降噪、对比学习和可解释性技术。此外,由于预训练语言模型参数量大,模型推理速度慢,而GPU推理资源的成本较高,为了节约资源和加速推理,我们使用了一些模型加速的技术。

图片

3 系统架构图

在业务收益上,我们主要用场景覆盖率和召回率两个指标来衡量。智能质检目前已经在搬家、外呼等多个场景应用,质检场景覆盖率达到95%以上,召回率达到98%以上。

算法探索与实践

问题与挑战

近年来随着Transformer[1]模型的出现,NLP领域涌现出了大量的预训练语言模型[2-5],这些模型的提出极大的推动了NLP各项任务的发展。但是在我们的实际业务应用中,仍然面临着不少问题与挑战:

1.训练数据中经常出现噪声,数据清洗费时费力。

2.通过预训练语言模型如何得到更好的语义表示?

3.预训练语言模型参数多,推理速度慢,线上部署存在困难。

4.深度学习模型是一个黑盒子,如何解释预测的结果?

为了解决这些问题与挑战,我们探索实践了数据降噪、对比学习、模型加速和可解释性方面的技术,这些技术的引入加快迭代速度,提升了模型效果,下面分别进行介绍。

数据降噪

数据质量决定了算法效果的上限,然而数据集中不可避免的存在一定数量的噪声数据,完全依靠人力复核进行清洗数据是非常耗时耗力的一件工作,因此对数据集进行高效的降噪处理是一步关键工作。

如图4所示,我们在数据集交叉验证的思路下分别探索了基于混淆矩阵和基于置信度学习两种不同的算法降噪方案,通过对比各自的降噪结果和性能,最终采用数据交叉验证+置信度学习的方式进行数据降噪。

图片 4 数据去噪流程图

k折交叉验证的目的是确保数据集中的每一个样本都会被筛查,过程可以描述为:把数据集切分为k份,整体循环k次,每次选择其中k-1份数据进行训练,再用训练好的模型对剩下的一份数据集进行预测,最后根据噪声筛选方案得到噪声数据。下面介绍基于混淆矩阵和置信学习的噪声识别方案。

基于混淆矩阵的降噪

基于混淆矩阵的噪声筛选规则为:混淆矩阵中所有非主对角线的样本视为噪声数据。图5给出了货拉拉车型预测结果的混淆矩阵, 其中label表示人工标注标签,predict表示模型预测标签。由结果可知当前数据中共设计四种车型标签:小面、中面、平板、厢货,模型共计对40个样本进行了分类,其中模型预测标签和人工标签一致的样本数为29(图中绿色背景单元),非主对角线的样本数则为当前的噪声数据共计11个样本(图中黄色背景单元)。

图片

5 车型预测结果的混淆矩阵(label:人工标签,predict:预测标签)

基于置信学习的降噪

基于置信学习进行噪声识别[6]的方法充分考虑了原数据本身可能存在的标签不准确、各类别下样本数不均衡等特性,相比简单的混淆矩阵降噪方案具备了更强的鲁棒性和数据适应性。该方案分为两步:1. 通过模型对待处理数据进行预测;2. 根据预测结果获取各类别阈值和各样本的真实标签,并在这个过程中识别噪声数据。 

图片

6 基于置信学习的降噪过程

6展示了采用基于置信学习的方法对货拉拉车型样本数据进行噪声识别的过程(y'表示模型预测标签,t表示某一个类别的概率阈值),其流程如下:

首先通过模型对8个样本数据进行预测,得到每个样本属于不同类别的概率,其中4个样本为小面(样本1~样本4)和4个样本为中面(样本5~样本8)。

然后计算所有小面样本的概率均值,作为该类别的概率阈值:t = 0.675,同理得到中面的概率阈值:t = 0.6

最后干净数据满足这个原则:样本概率最大类别的概率值大于且等于该类别的概率阈值,不满足该原则的则是噪声数据。

对比学习

在自然语言处理领域,通过Bert为代表的预训练语言模型实现文本的语义理解在各项相关任务中都得到了广泛的应用。但是文章[7]中的研究指出,通过Bert学习到的模型在词表示中受到词频影响较大。如图7所示,高频词在表征空间中离原点更近且更密集,相反低频词离原点更远且更稀疏,最终高频词的词向量将会主导句向量,进一步导致了语言模型不能很好的区分语义相近和不相近的句子。

图片

7 高频词和低频词在BERT编码空间中的分布

为了解决这个问题,我们使用对比学习让模型学习到更好的向量表示。对比学习的核心思想如图8所示,通过设计模型结构和对比损失,使得正样本之间的距离拉进,负样本和正样本之间的距离拉远。

正负样本对构建和如何定义对比损失是对比学习中非常重要的两个部分,并且有监督训练和无监督训练方式下二者的选择也存在很大差别,下面分别介绍。

图片

8 对比学习的核心思想

样本对构建

在无监督场景中,正样本对的构造相对负样本对更加复杂,本质上是通过对原文本句增加扰动的方式以获取语义相似的文本句,添加扰动产生的新文本句在句意上仍和原句保持了极高的一致性,因此可以和原句构成正样本对。

ConSERT[8]给出了不同扰动添加的方式,根据其扰动添加时间点的不同大致可以分为文本级别的扰动和embedding级别的扰动。文本级别的扰动一般是在文本句进入编码器之前,对其进行字粒度或词粒度的增删、同义词替换或句子乱序的操作(如图9-a所示)。常用的embedding级别扰动添加方式有特征维度屏蔽、添旧高斯噪声或行列元素随机屏蔽(如图9-b所示)。SimCSE[9]首次提出了利用Dropout本身的随机特性,将同一个文本先后两次通过编码后得到的向量作为正样本对的思想(如图9-c所示)。

通过以上数据增强方式获取到的文本句和原句子构成正样本对(图10中的实线箭头相连的向量对),原句同其他句的增强句构成负样本对(图10中的虚线箭头相连的向量对)。

图片

9 无监督训练中数据增强的不同方式

图片

10 无监督中正负样本对的组合

相比之下,有监督训练的正负样本对构建则较为容易,其中每个句子与相同标签的句子构成正样本对(图11中的实线箭头相连的向量对),相反与不同标签的句子构成负样本对(图11中的虚线箭头相连的向量对)。

图片

11 有监督中正负样本对的组合

对比损失

对比损失需要确保模型在学习过程中能够不断拉近正样本对之间的距离,同时增加负样本对间的距离,通常采用余弦相似度用来计算样本对之间的距离。对比损失计算如公式1所示,其中正样本对距离作为对比损失的分子,负样本对距离或整体样本间距离作为对比损失的分母,因此要使得整体损失逐渐降低,则必须在模型学习过程中使得分子逐渐减少而分母逐渐增大。

图片1

在货拉拉智能质检中的算法业务落地中,任务本身并不属于严格的正负样本有监督学习。因此我们通过分析实际数据分布和各业务标签在定义中的联系和区别后,将每一个输入到模型的Batch中具有相似定义的样本句定义为正样本对,其余样本相互构成负样本对。通过实验发现,这样不但提高了模型在具体业务场景中的句子表征能力,同时也在一定程度上弥补了部分场景样本量不足的问题。

模型加速

基于transformer的模型在推理阶段都面临着一个同样的问题,即推理速度慢。提高推理速度最常用的方法是使用ONNXTensorRT等推理工具,除此之外还有模型剪枝、知识蒸馏和模型量化,下面分别进行介绍。

模型剪枝

深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,仅仅只有少部分(5-10%)权值参与着主要的计算。将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为模型剪枝。

根据剪枝的粒度不同,模型剪枝又可以分为细粒度剪枝和粗粒度剪枝。细粒度剪枝是指对神经网络中的神经元和连接进行裁剪,这种方法是最简单,也是最早期的剪枝技术,图12展示了剪枝前后的对比。粗粒度剪枝指对模块、层、通道、词表等较大级别的剪枝。

图片

12 细粒度剪枝

如何确定哪些连接、神经元、层等需要裁剪是模型剪枝的核心内容,最常见的方法是评估它的重要性,之后按重要性排序,然后将不重要的部分裁剪。

一个最简单的启发就是按参数(或特征输出)绝对值大小来评估重要性,然后用贪心法将那部分裁剪,这类称为基于大小的权重剪枝,典型代表是2016年的论文[10],它把权重的绝对值作为衡量其重要性的手段。为了让模型参数权重稀疏以便于剪枝,常用的办法是在训练的损失函数中加正则化项,尤其是L1正则。

上面的方法假设参数绝对值越小,其对最终结果影响越小,但是这个假设不一定成立。另外一种方法是根据参数对损失loss的影响来评估。在论文[11]中,他们使用基于loss的梯度来计算注意力头的重要性。TextPruner[12]把基于梯度的方法扩展到其他参数,其计算公式如下:

图片 (2)

其中Θ表示要剪枝的参数,L(x)表示样本x的损失,以上公式中的绝对项是损失附近的一阶泰勒展开式。

在我们的算法探索中,我们使用TextPruner进行模型的剪枝,这是一个对基于Transformer的模型剪枝工具,剪枝包括词表裁剪、Transformer裁剪和流水线裁剪,如图13所示。预训练模型的word embeddings通常很大,但是在实际业务中的token列表会小很多,因此裁剪那些在业务中没有出现的tokenTransformer裁剪是对对注意力头进行裁剪,方法是按照公式(2)计算注意力头的重要性,丢弃不重要的注意力头。词表裁剪和Transformer裁剪可以单独进行,也可以都执行,全部执行属于流水线裁剪。

图片

13 TextPruner剪枝方法

知识蒸馏

知识蒸馏是一种模型压缩方法,目的是降低推理计算量的同时保证预测效果。Hinton2015年的论文中阐述了核心思想[13],大模型一般称作教师模型,蒸馏后的小模型一般称作学生模型。HuggingFace提出的DistilBERT[14]和华为提出的TinyBERT[15] BERT的蒸馏模型都取得了不错的效果,在保证效果的情况下极大地提升了模型的性能。

为了区分不同的方法,我们可以把模型的知识划分为输入层、特征层和输出层,知识蒸馏也是把这些知识从教师模型蒸馏到学生模型,具体见图14。基于这些知识,知识蒸馏可以划分为三个方向:基于特征蒸馏、基于输出蒸馏和基于关系蒸馏。基于特征蒸馏是指对教师模型的特征层进行学习,一般而言教师模型的特征层数会明显大于学生模型的特征层数,因此从教师模型特征层到学生模型特征层之间存在一个映射关系。除了对特征和输出进行蒸馏之外,输入层、特征层和输出层之间的关系也可以进行蒸馏,比如输出层和特征层、特征层和输入层、不同特征层之间存在一定的关系,这种关系属于一种约束,也属于知识。

图片

14 知识蒸馏的方法分类

这里介绍下TinyBERT,是一种基于特征和输出的蒸馏方法,后续的很多Transformer系列蒸馏方法都是在此基础上进行改进。如图15所示,TinyBERT是对transformer层和输出层进行蒸馏,其中transformer层的特征是指注意力矩阵和隐藏状态,输出层是指最后输出的logits,输出层的蒸馏可以看做两个分布之间的学习和拉近。一般而言,Bert base会从12层蒸馏到3-6层左右,随着层数的减少,推理速度会逐步增加,但是过低的层数也会带来精度损失。

图片

15 TinyBERT蒸馏方法

模型量化

模型量化是一种将浮点计算转成低比特定点计算的技术,可以有效的降低模型计算强度、参数大小和内存消耗。

最常见的量化方法是对单精度FP32量化到混合精度,混合精度是指对网络不同的部分采用不同的数值精度,对追求速度的算子(比如 convmatmul)可以用半精度FP16,从而获得明显的性能提升,而对其它更看重精度的算子(比如 logsoftmax)则保留单精度FP32。相较于使用单精度FP32进行训练和推理,混合精度既能能减少内存/显存占用,推理更大的网络,又能降低显存访问和计算耗时开销,在保证模型精度持平的情形下,提升训练和推理效率。

可解释性

深度学习模型属于一个黑盒,它的内部预测机制是不透明的。当模型效果不佳或出现鲁棒性问题时,由于其内部机制的复杂性,我们会比较难以进行模型优化。即使模型预测正确,模型是否学习到了关键特征也是一个问题,这种不确定性会使得模型的预测结果不被信任。因此为了便于理解和优化,需要以人类可理解的形式解释模型的预测。

从时间角度上来看,可解释性可以分为事前解释和事后解释。事前解释同时给出预测结果和预测理由。事后解释是先给出预测结果,再选择解释性方法,根据这些方法来给出预测理由。对于可解释性强的模型,可以进行事前解释,如随机森林学习到的特征重要性。对于深度学习需要借助事后解释的方法,在NLP任务中这种解释可以从实例级和特征级两个角度切入。

实例级解释

实例级的解释是从训练数据中找出相关的训练样本,哪些样本是支持当前的结果,哪些样本是反对当前的结果。这里代表性的方法是表示点方法[16],它将训练数据对当前预测数据的重要度影响(即表征值),分解为训练数据对模型的影响和训练数据与预测数据的语义相关度。对于一条给定的测试数据和测试结果,表征值为正的训练数据表示支持该预测结果,相反,表征值为负的训练数据表示不支持该预测结果。同时,表征值的大小表示了训练数据对测试数据的影响程度。

图片

16 实例级解释

特征级解释

对于NLP而言,一个token就是一个特征,并且是人可以理解的。根据模型预测结果,从输入文本中提取模型预测所依赖的特征,即输入文本中支持模型预测的若干重要词。

图片

17 特征级解释

如何判断一个特征是否支持了模型的预测,直觉上来讲是把这个特征去除,观察去除前后输出的变化,如果变化很小,那么它就不是重要特征,反之变化越大越重要。但是这种方法的效率不高,对于一个512长度的文本而言,为了得到每个token的重要性需要计算512次。为了解决这个问题,后来提出了一些基于梯度的方法[17-18],即特征的重要性和梯度成正比。但是如果只看一个点的梯度,容易发生梯度消失的问题。因此积分梯度[19]被提出,对特征从一个参考点到当前点的路径进行梯度积分,本质上是一个路径上梯度的均值,从而避免单个点梯度消失带来的问题。

总结展望

本文阐述了语义理解技术在货拉拉舆情业务中的探索和应用,针对业务中的问题和挑战,我们在算法方面提出了数据降噪、对比学习、模型加速和可解释性等解决方案,这些是语义理解在业务中应用的关键技术。未来会把这些技术应用在更多的业务当中,助力公司实现降本增效。

参考文献

1.Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.

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.Sun Y, Wang S, Li Y, et al. Ernie: Enhanced representation through knowledge integration[J]. arXiv preprint arXiv:1904.09223, 2019.

5.Sun Y, Wang S, Feng S, et al. Ernie 3.0: Large-scale knowledge enhanced pre-training for language understanding and generation[J]. arXiv preprint arXiv:2107.02137, 2021.

6.Northcutt C G ,  Jiang L ,  Chuang I L . Confident Learning: Estimating Uncertainty in Dataset Labels[J].  2021.

7.Li B , Zhou H , He J , et al. On the Sentence Embeddings from Pre-trained Language Models[J]. 2020.

8.Yan Y ,  Li R ,  Wang S , et al. ConSERT: A Contrastive Framework for Self-Supervised Sentence Representation Transfer[J].  2021.

9.Gao T ,  Yao X ,  Chen D . SimCSE: Simple Contrastive Learning of Sentence Embeddings[J].  2021.

10.Li H, Kadav A, Durdanovic I, et al. Pruning filters for efficient convnets[J]. arXiv preprint arXiv:1608.08710, 2016.

11.Michel P, Levy O, Neubig G. Are sixteen heads really better than one?[J]. Advances in neural information processing systems, 2019, 32.

12.Yang Z, Cui Y, Chen Z. TextPruner: A Model Pruning Toolkit for Pre-Trained Language Models[J]. arXiv preprint arXiv:2203.15996, 2022.

13.Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015, 2(7).

14.Sanh V, Debut L, Chaumond J, et al. DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter[J]. arXiv preprint arXiv:1910.01108, 2019.

15.Jiao X, Yin Y, Shang L, et al. Tinybert: Distilling bert for natural language understanding[J]. arXiv preprint arXiv:1909.10351, 2019.

16.Yeh C K, Kim J, Yen I E H, et al. Representer point selection for explaining deep neural networks[J]. Advances in neural information processing systems, 2018, 31.

17.Simonyan K, Vedaldi A, Zisserman A. Deep inside convolutional networks: Visualising image classification models and saliency maps[J]. arXiv preprint arXiv:1312.6034, 2013.

18.Baehrens D, Schroeter T, Harmeling S, et al. How to explain individual classification decisions[J]. arXiv preprint arXiv:0912.1128, 2009.

19.Sundararajan M, Taly A, Yan Q. Axiomatic attribution for deep networks[C]//International conference on machine learning. PMLR, 2017: 3319-3328.

作者简介

曾启飞,货拉拉智能运营部资深算法工程师

苟伟,货拉拉智能运营部高级算法工程师


继续滑动看下一个
货拉拉技术
向上滑动看下一个