
本篇文章是对CIKM2020的一篇论文的解读—基于遮盖特征域预训练的用户意图预测。
论文题目:
Masked-field Pre-training for User Intent Prediction
论文地址:
https://dl.acm.org/doi/10.1145/3340531.3412726
1.1 问题描述
滴滴APP上每天都会产生大量的出行订单,包括司机和乘客的网约车订单、出租车订单、单车订单等等。伴随着这些订单,用户会产生很多订单或其它方面的问题,比如费用疑问,联系不上司机等等。滴滴的智能客服系统就是通过人工智能技术来高质高效的解决用户的问题和诉求。

用户带着问题进入智能客服后,主要通过两种方式来表达自身述求:点击预测的问题(上图中的下半部分流程),或者输入用户问题(上图中的上半部分流程)。目前大约42%的用户通过点击预测的问题来表达自身述求。本文旨在研究如何更好地预测用户的进线问题,从而更好地解决用户问题,提高用户在智能客服中的使用体验。
1.2 挑战
当前用户问题预测面临的挑战主要是两方面:一方面,在现实世界中有标签的数据是有限的,尤其对于稀疏用户问题数据来说。在滴滴用户场景中,用户的问题分类是多样的复杂的,以快车举例,乘客和司机分别包含了上百个用户问题,特征域也非常的庞大,乘客包含了250多个特征域,司机包含了210个特征域,这些特征域主要包括订单特征、用户画像和用户行为特征等,也有一些相关的统计特征。这些特征域和问题在给定的数据下十分稀疏,这导致预测比较困难。
另一方面,现有的预测模型主要是将所有的信息压缩到一个向量,然后用这个向量来预测用户所有的意图。其实每个意图只跟一部分特征相关,比如费用问题,主要涉及费用的详情,费用支付方式以及费用支付的时间,另外像绕路问题,主要跟预估行程距离和实际行程距离有关系,所以现有的模型对部分用户问题,尤其是对于长尾问题,不能做出很好的预测。
2.1 基于遮盖特征域的预训练机制
Masked-field的预训练框架,这个框架主要包含预训练过程和finetune过程,详见下图:

在详细介绍之前,我们先明确特征和特征域的差别。特征域是指一组预先定义好的特征的集合。例如,星期是特征域,而周一、周二、周三等是这个特征域的不同的特征;又如,订单费用是特征域,而具体的订单费用数值是特征的取值。
2.1.1 预训练过程
Mask-field 预训练主要是在无标签的数据上学习特征的交互和表示。对于每一条数据我们随机掩盖部分特征域,并为每个遮盖的特征域随机生成一个embedding,然后通过其他特征域来预测这些被遮盖特征域的真实特征。在我们的场景下,每条数据中每个特征域被掩盖的概率为0.1。
用户问题预测中的特征主要有三种类型:数值型(如费用,路程)、单值离散型特征(one-hot特征,如是否调度单、是否预约单)和多值离散型特征(multi-hot特征,如历史投诉问题)。为了更方便的对特征域进行预测,我们将所有的数字型特征都通过分位数量化的方式转化为单值离散型特征。
预训练模型,主要包含embedding层,dnn层,输出层以及损失函数层,同时我们的预训练模型通过多任务的方式来预测这些被掩盖的特征。具体而言,Embedding 层主要是将高维的单值(或多值)的离散特征映射到低维。Dnn层可以是任何适用的神经网络模型结构,比如FM、DeepFM、Transformer或者后面将要介绍的本文提出的Field-independent Transformer。输出层针对两种不同类型的特征,采用不同的方式来预测。对于单值离散特征,作为一个多分类问题来预测,采用多分类交叉熵损失函数;对于多值离散特征,作为多个二分类问题来预测,采用二分类交叉熵损失函数。
预训练能够有助于我们能够更好的服务于后续预测任务,主要有以下好处:首先,使用大量的无标签数据,可以更好的学习到每个特征的表示,尤其对于一些稀疏但很重要的特征可以进行更有效的学习;其次,特征之间的交互对于用户问题预测任务都是非常重要,遮盖特征域的预训练模型可以通过大量的数据可以更好的学习特征交互模式。
2.1.2 Finetune过程
Finetune过程通过目标任务来微调预训练模型中的参数,从而达到更好的效果。Finetune使用和预训练模型中完全相同的embedding层和dnn层,再结合有标签的预测任务来构建不同输出层和损失函数层。
通过复用预训练模型的参数,目标任务可以应用预训练中学习到的特征交互模式,同时缓解训练数据不足和特征稀疏的问题,进而提高目标任务的效果。
2.2 Field-independent Transform 网络结构
Field-independent Transformer (FI-Trans)主要是为了解决不同的用户意图跟多个特征有关的问题。具体而言,FI-Trans采用多特征表示来进行预测,相比较于单一的特征表示,在预测多意图任务上能够提升意图预测的准确率。
FI-Trans也是由embedding层,特征交互层,输出层以及损失函数层构成,其核心差异在于特征交互层和输出层:
特征交叉层的输入是原始特征,输出是与特征交互信息的特征表达。与Transformer类似,该方法采用自注意力机制融合不同的特征,并产生特征交互后的特征。但是有别于Transformer的是,我们的每个特征域之间的参数是不共享的(也就是Field-independent),而Transformer模型不同的位置之间参数是共享的。FI-Trans包含K个类似于Transformer中block的模块(其中K是特征域的个数),每个模块处理一个特征域与其他特征域的交互。
输出层的输入是特征交叉层输出的K个特征,而输出则是每个用户问题对应的特征向量。输出层每个特征都会产生一个综合各个特征域的的特征表达,在finetune的过程中,我们提供了两种方法来生成最终的输出:
第一种方式是在最后一层采用注意力池化,来预测不同的用户问题。如下图所示:
3.1 在离线数据集上的效果
我们在滴滴数据集和两个公开的数据集上分别做了实验,并对比了本文提出的训练机制和模型结构相比于现有模型的效果差异。
3.1.1 滴滴数据集上的效果
滴滴数据集是从滴滴APP的智能客服机器人架构和预测服务的日志中收集得到。其中用到的特征包括订单特征、用户画像、投诉历史等信息。用到的标签即为用户在机器人中的点击的推荐问题和客服机器人识别的意图。滴滴数据集包括乘客数据集和司机数据集。
在滴滴乘客数据集上不同模型的AUC效果如下:

在滴滴司机数据集上不同模型的AUC效果如下:

从上面的效果图可以看出:一方面,除了FM模型和AttentionFM模型外,对于其余的6个模型,使用预训练机制的模型效果都优于从头开始学习;另一方面,在两个数据集上,FI-Trans模型都达到了start-of-the-art效果。
3.1.2 公开数据集上的效果
为了观察我们提出的模型的通用性,我们在另外两个公开数据集上也做了对比实验,分别是Criteo数据集和Avazu数据集。这两个数据集的原始数据全都是有标签数据。为了测试我们的预训练机制在这两个数据集上的效果,我们在原始数据中随机挑选了70%的数据作为无标签数据,另外30%数据作为有标签数据,其中训练集,验证集和测试集分别占总数据的10%。
在Criteo数据上不同模型的AUC效果如下:

在Avazu数据上不同模型的AUC效果如下:

从上面的效果图可以看出:一方面,除了FM、DeepFM和AttentionFM模型外,对于其余的5个模型,使用预训练机制的模型效果都优于从头开始学习;另一方面,在两个数据集上,FI-Trans模型也都达到了start-of-the-art效果。
3.2 在滴滴智能客服推荐系统的在线效果
我们最后也在滴滴的在线智能客服推荐系统中做了A/B实验来对比不同模型的在线点击率效果。鉴于服务器性能的压力和流量的限制,我们只对比了四个不同的模型的效果,每个模型都测试了预训练和从头训练两种方式,也就是在司机和乘客分别有八组实验。
司机端不同模型的在线CTR效果如下:

乘客端不同模型的在线CTR效果如下:

从上面两张效果图可以看出:一方面,在司机端和乘客端的所有4个不同的模型上,预训练机制都对在线点击率有显著的提升;另一方面,在司机端和乘客端,FI-Trans模型的效果都显著优于DNN、Inner-PNN和Transformer模型。
本文提出了一种基于遮盖特征域预训练机制,同时提出了一种特征间不共享参数的Field-Independent Transformer模型。使用本文提出的方案,在滴滴智能客服数据集和两个公开数据集上,都取得了 state-of-the-art 效果。在滴滴智能客服推荐系统的在线A/B实验中,本文提出的模型ctr也明显高于其它现有模型。



