而针对预训练在语义匹配任务中的应用,业界也提出不少的解决方案。中科院计算所郭嘉丰等人提出PROP[6]和B-PROP[7]等针对搜索任务的预训练方法,主要思想是引入文档中代表词预测ROP(RepresentativewOrdsPrediction)任务。纽约大学石溪分校曹庆庆等人提出DeFormer[8]分解预训练语言模型来做问答等语义匹配任务,在BERT的低层分别对问题和文档各自编码,再在高层部分拼接问题和文档的表征进行交互编码,让文档和问题在编码阶段尽可能地独立,从而提升模型的整体效率。百度刘璟等人提出RocketQA[9]和RocketQAv2[10]等面向端到端问答的检索模型训练方法,通过跨批次负采样、去噪的强负例采样以及数据增强技术大幅提升了双塔模型的效果。陈丹琦等人提出SimCSE[11],采用自监督来提升模型的句子表示能力,从而提升语义匹配的效果。
深度语义匹配通常分为表示型和交互型两类:表示型模型一般基于双塔结构分别得到两段输入文本的向量表示,最后计算两段文本表示的相似度;该方法的优点是Doc向量可提前离线计算缓存,且匹配阶段计算速度很快,适合线上应用;缺点是只在模型最后阶段进行交互,对文本之间匹配关系学习不足。而交互型模型在初期即对两段输入文本进行交互,匹配阶段可以采用更复杂的网络结构,以学习文本间细粒度匹配关系;这种方法往往可以达到更高的精度,主要挑战在于线上应用的性能瓶颈。
为了解决这些问题,我们基于BERT在训练数据、特征构造和模型方面进行若干探索和实践。下文将逐一展开介绍。
我们按照模型学习的困难程度,从低到高设计了三种负样本采样方式:
最终,我们的微调样本包括约50万条数据,涵盖餐饮、休娱、亲子和丽人等20个主要类目,其中正负样本比例为1:5,三种负样本比例为2:2:1。
为了更合理的引入品类信息,我们对BERT模型的输入编码部分进行改造,除了与原始BERT一致的Query、Doc两个片段外,还引入了品类文本作为第三个片段,将品类文本作为额外片段的作用是防止品类信息对Query、Doc产生交叉干扰,使模型对于POI文本和品类文本区别学习。
我们首先利用上文介绍的数据增强后的训练样本训练了MT-BERT-Base模型(12层768维),与ESIM模型相比,各项指标均显著提升,其中AUC提升6.6PP。在BERT模型优化方面,多任务学习和引入品类信息这两种方式均能进一步提升模型效果,其中引入品类信息的MT-BERT-Base模型效果更佳,相比标准的MT-BERT-Base模型AUC提升1.2PP。
在BERT模型规模方面,实验发现随着其规模增长,模型效果持续提升,但是预训练和部署成本也相应增长,最终我们选取了大约3亿参数量的MT-BERT-Large模型(24层1024维),在同样引入品类信息的条件下,相比MT-BERT-Base模型AUC增长1.21PP,相比ESIM模型AUC增长8.12PP。
在模型的实践落地过程中,我们也遇到若干挑战,并且针对性的设计了优化方案。第一个挑战是BERT模型的前向耗时无法满足线上性能要求,我们通过知识蒸馏和低精度量化方法对模型进行压缩,并且采用离线缓存与实时预测结合的方式进一步提升了服务性能。
由于BERT模型的庞大参数量和前向预测耗时,直接部署上线会面临很大的性能挑战,通常需要将训练好的模型压缩为符合一定要求的小模型,业内常用模型压缩方案包括模型裁剪、低精度量化和知识蒸馏等。知识蒸馏[12]旨在有效地从大模型(教师模型)中迁移知识到小模型(学生模型)中,在业内得到了广泛的研究和应用,如HuggingFace提出的DistillBERT[13]和华为提出的TinyBERT[14]等蒸馏方法,均在保证效果的前提下大幅提升了模型性能。
经过在搜索等业务上的探索和迭代,美团NLP团队沉淀了一套基于两阶段知识蒸馏的模型压缩方案,包括通用型知识蒸馏和任务型知识蒸馏,具体过程如下图3所示。在通用型知识蒸馏阶段,使用规模更大的预训练BERT模型作为教师模型,对学生模型在无监督预训练语料上进行通用知识蒸馏,得到通用轻量模型,该模型可用于初始化任务型知识蒸馏里的学生模型或直接对下游任务进行微调。在任务型知识蒸馏阶段,使用在有监督业务语料上微调的BERT模型作为教师模型,对学生模型在业务语料上进行领域知识蒸馏,得到最终的任务轻量模型,用于下游任务。实验证明,这两个阶段对于模型最终效果的提升都至关重要。
为了充分结合交互结构效果好和双塔结构效率高的优势,FacebookPoly-encoder[15]、斯坦福大学ColBERT[16]等工作在双塔结构的基础上引入不同复杂程度的后交互层(LateInteractionLayer)以提升模型效果,如图4?所示。后交互网络能提升双塔模型效果,但也引入了更多的计算量,在高QPS场景仍然很难满足上线要求。针对上述问题,在第二阶段任务型知识蒸馏过程中,我们提出了虚拟交互机制(VirtualInteRacTionmechanism,VIRT),如图4(d)所示,通过在双塔结构中引入虚拟交互信息,将交互模型中的知识迁移到双塔模型中,从而在保持双塔模型性能的同时提升模型效果。
任务型知识蒸馏及虚拟交互的具体过程如上图5所示。在任务型知识蒸馏阶段,我们首先基于MT-BERT-Large交互模型在业务语料上进行微调得到教师模型。由于学生模型Siamese-MT-BERT-Medium缺乏上下文交互,如图5(b)所示,注意力矩阵中的灰色部分代表了2块缺失的交互信息,我们通过虚拟交互机制对缺失部分进行模拟,计算公式如下为:
我们对蒸馏阶段各个模型进行了Benchmark上的效果评估以及线上QPS=50时的性能测试,结果如表2所示。通过虚拟交互进行任务型知识蒸馏得到的任务轻量模型Siamese-MT-BERT-Medium相较于直接对通用轻量模型进行微调得到的同结构的Siamese-MT-BERT-Medium(W/O任务型知识蒸馏)模型,各项效果指标明显提升,其中Accuracy提升1.18PP,AUC提升1.66PP,F1-Score提升1.54PP。最终我们对任务轻量模型Siamese-MT-BERT-Medium进行上线,相较于最初的MT-BERT-Large模型,线上推理速度提升56倍,完全满足线上服务的性能要求。
表2模型效果对比
线上实时计算的任务轻量模型使用TF-Serving进行部署,TF-Serving预测引擎支持使用美团机器学习平台的模型优化工具—ART框架(基于Faster-Transformer改进)进行加速,在将模型转为FP16精度后,最终加速比可达到5.5,数值平均误差仅为5e-4,在保证精度的同时极大地提高了模型预测的效率。