深度文本表征与深度文本聚类在小样本场景中的探索与实践

导语

本文针对小样本场景下文本表征能力弱,聚类纯度不高的问题介绍了基于Bi-LSTM的预训练语言模型和深度聚类算法在58二手车场景的探索。

背景

58同城智能客服系统(帮帮)提供自动问答机器人、人工在线沟通和智能辅助聊天整套解决方案,该系统诞生于2017年,已被广泛应用于58各业务线的客服人员和用户沟通场景,可为公司节省数百名客服人力,大大提高了人效。2019年,我们将智能客服应用于58同城C端用户和B端商家沟通场景,打造了智能客服商家版(帮帮商家版),提高了商家获客效率。智能客服商家版支持机器人全自动接待、人机协同等多种工作模式,总体架构如图1所示。 image

图1 智能客服商家版自动问答机器人总体架构 自动问答机器人是智能客服商家版解决方案中的重要一环(图 1 中橙色框部分),提供单轮问答,多轮会话,智能辅助,商机挖掘,商机引导,猜你想问等多种能力;在产品形态上赋予了商家微聊智能回复的能力。线上对话示例如图2所示,本文后续所有实验均基于该场景开展。 image

图2 自动问答机器人单轮问答示例

自动问答机器人单轮问答的开发流程如图3所示。大致分为两个阶段:问题挖掘阶段和模型迭代阶段。

第一阶段:在问题挖掘阶段,主要有三个步骤:第一步问题获取,从微聊之前积累的离线聊天数据提取出用户侧常问问题;第二步问题聚类,使用K-means进行聚类;第三步标准问题,扩展问题总结,这步结合聚类结果以及编辑人员的集体智慧拟定标准问题和扩展问题。
第二阶段:在模型迭代阶段,主要有两个步骤:第四步匹配模型的训练以及第五步线上效果测评,匹配模型使用第三步总结出的标准问题和扩展问题训练问题多分类模型,当模型离线训练性能达标后,会上线模型,模型上线之后进行线上效果测评,主要观测准确率和召回率,第六步新问题挖掘会对线上漏报以及误报的case进行挖掘,返回到图中第三步标准问题以及扩展问题总结进行迭代。
新问题的发现挖掘,对线上效果迭代至关重要,本文工作主要围绕图中第六步新问题挖掘展开。

image

图3 自动问答机器人单轮问答开发流程图

文本表征和聚类

在实际应用场景中,标准问题多分类模型的关键在于分类模型对于query匹配的准确性和对于用户线上问题的覆盖度。第一点依赖于训练数据中同一语义问题的问法的丰富性,训练数据中问法越丰富,模型对线上的长尾问题识别的越准确;第二点则依赖初始知识挖掘的准确性和覆盖度。在58二手车场景下积累了丰富的无标签数据,但是只有少量有标签数据,是典型的小样本场景。
基于对以上两个问题和场景特点的思考,在算法上要解决两个问题,一个是如何在小样本场景表征问题,能够捕获不同问法的同一语义,提高泛化能力;一个是如何发现和挖掘新的问题,提高机器人对线上问题的覆盖度。具体到应用场景,就是标准问题的挖掘和扩展问法的发现,标准问题挖掘解决覆盖度的问题,扩展问题问法发现解决匹配准确性的问题。针对这些问题,我们尝试了基于Bi-LSTM的预训练语言模型和深度聚类算法DEC(Deep Embedded Clustering)[1],并结合二者对原始DEC算法做了改进。
本章节主要介绍为了提升小样本场景下分类模型的线上效果所做的新问题挖掘工作(包括标准问题挖掘和扩展问题问法发现两个落地场景),首先阐述应用的两个算法:一是基于Bi-LSTM的预训练语言模型,二是深度聚类算法DEC,最后介绍上述算法在58二手车场景的探索。

**1、**基于Bi-LSTM的预训练语言模型

在模型构建初期,我们使用K-means来挖掘知识,结合编辑人员的集体智慧拟定标准问题,在初版模型上线后,我们发现定义的标准问题覆盖度不够高,主要是因为K-means方法表征能力弱,对腰部问题挖掘能力不够强。针对小样本数据表征能力弱的问题,我们使用预训练语言模型来解决。
考虑到二手车场景有大量无标签数据,我们借鉴BERT[5] Masked LM 预训练任务的思想,训练了基于Bi-LSTM的预训练语言模型,结合场景特点,我们对原始BERT预训练任务做了如下修改:
A、简化预训练任务。BERT paper 使用的预训练任务有两个:Masked LM 和Next Sentence Prediction,考虑到后续使用场景主要针对句子表征,而不涉及句子间关系,所以我们只保留了Masked LM 任务。
B、使用Bi-LSTM替代transformer[6]做特征提取。BERT的成功等于良好的算法加上超强算力,BERT原始预训练任务使用64个TPU训练了4天完成,这样的算力要求较高,于是我们思考,在预训练模型性能和训练成本上做trade-off。我们尝试使用Bi-LSTM 替代transformer 做特征提取,使用了4千万基于二手车场景的无监督数据,最终该模型在一块NVIDIA TESLA P40 GPU上,完成30万次迭代用时28小时。为了测试预训练模型的效果,我们在二手车场景分类问题上对比实验了Bi-LSTM预训练模型以及BERT中文预训练模型的效果,分类模型样本量2.6万条,实验结果如表1所示, 结果显示,加载Bi-LSTM预训练模型后,分类模型acc从0.81提升至0.86;而在同样加载预训练模型的情况下,基于垂直场景数据的预训练模型比BERT通用预训练模型acc绝对高出0.013。

|
| Bi-LSTM | BERT |
| +Pretrain model Acc | 0.8662 |

0.8487 (5 epoch )

0.8530 (10 epoch ) |
| No Pretrain Model Acc | 0.8107 |

0.7884 (5 epoch )

0.8342 (10 epoch )

|

表1 二手车分类问题预训练模型accuracy对比

C、加入add & norm block。我们参考transformer的结构,将Bi-LSTM layer之间加入残差连接,残差连接结构可以减弱梯度消失问题,比直接堆叠的多层神经网络更容易优化,并在每层Bi-LSTM之后加入layer normalization,结构如图 4所示。
训练好的Bi-LSTM 预训练模型将用作后文DEC算法中的特征表征。 image

图4 基于Bi-LSTM 的预训练语言模型示意图 **2、**DEC算法描述

传统聚类的方法例如K-means、GMM、谱聚类已经在工业界有广泛的使用,但是这些算法里少有考虑到学习适合聚类的特征表征,DEC算法正是将特征的表征与聚类中心分配一同学习。
DEC是两阶段训练模型。第一个阶段训练autoencoder作为初始特征表征,第二阶段利用训练好的encoder 部分与聚类中心的分配(cluster assignment)一起做fine-tune,这样同时优化encoder以及聚类中心的分配,使得两个任务可以互相促进互相学习。算法流程如图5所示。

image

图5 DEC算法流程图

2.1、Soft Assignment

与传统聚类方法为每个样本点指定唯一聚类中心不同(hard assignment),DEC使用软分配(soft assignment)的概念。相比hard assignment,soft assignment在调整聚类中心的迭代过程中会带入更多信息;而且从generative的角度来看待聚类,聚类数据由一个generative model生成,所以聚类中心的分配也是一个概率分布。在DEC中使用概率分布q代表样本点属于聚类中心的概率;qij表示点zi属于聚类中心uj的概率,并且假设样本点的分布服从t-Student分布,所以qij表示为: image

2.2、KLD Divergence Minimization 在得到特征表征之后,使用K-means方法初始化聚类中心,DEC设计了一种理想分布p,p分布的表达如下图:选择p分布主要为了强化高置信的部分以及规范化每个聚类中心的loss损失贡献,所以训练过程就是通过优化KL散度(Kullback-Leibler Divergence, KLD)不断优化p, q两个分布之间的差异的过程。

image

image

**3、**深度表征与聚类在58二手车场景应用

在二手车业务线,我们在两个场景考虑Bi-LSTM预训练模型作为特征表征的DEC算法并且在扩展问题问法发现场景改进了DEC原始算法。

3.1、标准问题挖掘

为了验证DEC算法在二手车场景的有效性,我们使用人工标注的小样本数据进行了与K-means的离线对比实验。我们设计了三个实验,如图6所示:第一个实验是K-means + Word2vec静态表征,使用Word2vec得到的静态表征直接输入到K-means;第二个实验是K-means + Bi-LSTM,使用Bi-LSTM预训练模型得到的静态表征输入到K-means;第三个实验是DEC + Bi-LSTM pretrain model,使用Bi-LSTM预训练模型作为DEC 的输入,模型训练的过程中自动进行表征的优化。详细实验结果如表2所示,我们观测了三组指标,分别是人工标注标签的accuracy,聚类的轮廓系数,以及算法运行时间。从accuracy和轮廓系数上看,对比实验1, 2可知,在同样使用K-means的条件下,使用Bi-LSTM的静态表征稍好于Word2vec的静态表征,但是差距不大;对比实验2、3可知,使用Bi-LSTM预训练模型作表征的DEC算法明显优于K-means加Bi-LSTM静态表征,说明随着聚类过程而不断fine-tune的动态表征模型是算法有效的关键因素;从耗时角度看,由于训练过程需要神经网络做前向计算以及反向梯度传播,DEC算法耗时相对较长。使用DEC算法对线上模型未识别出的case和识别错的case进行聚类挖掘,新挖掘出了“其他费用都包含什么?”, “补漆多不多?” “信息是否真实?”等几类标准问题,在初始K-means挖掘中,询问其他费用的问题被分配到了“过户费用多少钱?”标准问题簇里距聚类中心距离中段的位置,只关注了“费用”这个关键字而没能考虑整句的语义信息。模型迭代后相比上一版模型周平均可回答率从79.71%提升至83.62%,如表3所示。 image

图6 对比实验说明

|
|

accuracy

|

silhouette

|

runtime

|
|

K-means + Word2vecRepresentation

|

0.354

|

0.047

|

<5min

|
|

K-means + Bi-LSTMRepresentation

|

0.377

|

0.025

|

<5min

|
|

DEC + Bi-LSTMpretrain model

|

0.8437

|

0.142

|

30min

|

表2 K-means DEC 对比测评效果

|
| 可回答率 |
| 迭代前 | 79.71% |
| 迭代后 | 83.62% |

表3 可回答率周平均变化

3.2、扩展问题发现

在模型上线后,我们对线上badcase进行了分析,发现对于一些已定义标准问题,由于线上query表达方式(utterance)变体较多,而没能准确匹配到相应标准问题的case占比很大,比如表示询问价格,离线训练数据里多为标准表达方式“价格是多少?”,“**多少钱?”,但是因为用户语言习惯甚至方言的问题,有很多口语化表达,比如“几个钱?”,“多钱?”等,我们就在思考,如何能针对目前已定义好的标准问题来从线上数据中挖掘相似的问题作为离线训练数据的补充?在二手车场景下相比有监督数据,无监督数据的体量更大,如何利用已有的少量有监督数据来泛化更多的无监督数据?带着这两个问题的思考,我们尝试对DEC 算法进行了改进,在原始的DEC算法中,唯一的有监督信号是由K-means做聚类中心初始化时给到的,后续的训练过程实际上是对这个分布的高置信部分做强化,可以说,聚类中心初始化的效果决定着整个DEC算法的效果,但是K-means的聚类结果有很强的随机性,所以我们使用自定义聚类中心替代了原始DEC算法中K-means聚类出的聚类中心,使用已有的标准问的所有扩展问法向量的平均作为该标准问的向量,也就是自定义的聚类中心,这样DEC后续学习到的数据分布是按照目前已拟定的标准问题作为聚类中心得到的。在使用改进DEC 扩充了已有标注数据的扩展问法后,线上问答模型分类效果如表4所示,周测评准确率从98.11%提升至98.24%;召回率从89.66%提升至92.27%。在准确率基本持平的情况下,召回有了明显提升,说明迭代后有效召回了一批原来无法识别的语义上相似的问法。

|
| 迭代前 | 迭代后 |
| precision | 98.11% | 98.24% |
| recall | 89.66% | 92.27% |

表4 改进DEC 迭代效果对比

总结展望

在智能客服商家版自动问答机器人新问题挖掘模块,为了解决小样本场景下数据表征能力弱,聚类纯度不高的问题,我们尝试了如下改进:1 改进了BERT 预训练任务,充分利用垂直场景数据训练了基于Bi-LSTM的预训练语言模型,以提升场景的文本表征能力;2 将原始DEC算法做了自定义聚类中心的改进,使得后续的训练朝着人工标注数据分布的趋势来进行训练,强化分布。在二手车场景几个观测指标上均有明显提升。
未来可以从以下几个方面进一步提升Bi-LSTM预训练语言模型和无监督深度聚类算法DEC的性能:可以针对线上线下数据分布差异引入迁移学习;设计更好的表征网络,比如可以针对场景设计更加合适的无监督目标函数;引入self-supervision task;我们坚信,未来对于无监督方向的算法会有更多突破与落地。

服务推荐

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值