基于文本挖掘的在线客服服务流程一致性检测研究

2022-02-18 13:53莫志强
小型微型计算机系统 2022年2期
关键词:客服卷积向量

莫志强,曹 斌,范 菁,王 俊

1(浙江工业大学 计算机科学与技术学院,杭州 310023) 2(中国电信股份有限公司浙江分公司,杭州 310040)

1 引 言

如今很多企业为了给用户提供更好的服务,都会提供电话语音或在线文字咨询等服务.在实际场景中,企业要求客服人员使用事先规范的标准服务流程为用户提供相关反馈服务.例如在电信行业套餐办理的服务流程中,客服需要对用户进行套餐(A,B)的推送.而公司事先规定的标准服务流程要求一旦涉及A和B两类套餐的推送,必须先推送A套餐再推送B套餐,即存在一个推荐服务流程(按照套餐的优先级).而由于不同的客服人员业务水平的不同,会导致标准服务流程未能被准确执行,进而影响企业效益和服务质量.因此,如何实时对客服人员的实际服务流程与标准服务流程进行一致性检测,并对客服人员进行“纠错”成为当前在线客服质检中亟待解决的问题.

目前主流研究有两类:传统面向流程模型的一致性检测和基于文本挖掘技术的服务质检,二者都存在一些缺陷.例如陈鹏等人[1]提出的针对需求确认的业务流程一致性检查方法、王磊[2]研究的面向流程模型与数据模型的一致性验证方法以及张学伟,宋巍等人[3]研究的基于业务流程执行语言的一致性度量等.这些方法并不基于文本,且需要对客服的表述进行实时的服务流程挖掘,在时效性上均无法应用于本文面向在线客服的服务流程一致性检测场景.此外,传统流程模型一致性检测方法面向的是在流程模型已知的情况下进行流程的比较,进而确定流程的执行语义是否一致.而在本文针对的在线客服服务过程中,客服实际的服务流程未知,需要实时的对客服的对话文本进行潜在的服务过程语义提取.而基于文本挖掘技术的服务流程一致性检测方法大多先构建关键词(句)库,再利用关键词(句)匹配技术,通过检测客服表述中的关键词(句)来判断客服是否遵守规定的服务流程[4].这些基于规则的方式明显不具备足够的灵活性来处理日常中的口语对话,且实际应用场景多是口语对话,口语表达的不规范与多种多样的词的表述形式也使得关键词库的构建更加繁琐.

本文将客服服务流程一致性检测问题看作基于文本的服务流程序列分类问题,利用有监督的机器学习分类方法予以解决.这样做有以下好处,首先可以通过分类模型学习词的深层语义表示,从而处理词表述多样性以及不规范的口语表达等问题,也免去了构建关键词(句)的繁琐过程.其次分类模型可以根据从客服对话文本中挖掘的潜在服务过程语义实时的对客服的服务流程进行判断.传统的文本分类方法是将文本通过词袋模型[5]表示成one-hot向量进行分类模型(例如支持向量机[6])训练.one-hot向量表示文本时忽略了词序特征.然而在一些特别的服务流程检测场景下必须要对词序特征进行考虑(例如上述推送套餐场景).若此时使用文本分类方法来判断客服服务流程与公司规定标准服务流程是否一致,词序特征是必不可少的.

综上所述,本文采用CNN[7]与RNN[8]来解决在线客服场景下融合词序语义特征的文本分类问题,并对CNN与RNN各自结构的优劣以及二者在本文研究问题下的表现进行了深入的分析与比较.当前尚未发现类似的解决面向在线客服服务流程一致性检测的文本分类方法,我们首次尝试使用CNN和RNN来解决该问题,同时也是第一个用基于真实客服对话数据进行深入分析和比较CNN与RNN在这个问题下的表现,且分析结果能够为业务初期具体任务下对两类模型取舍提供指导性意见.

2 相关工作

早期有一些针对人工语音服务质量检测的研究.例如关浩华[4]在其工作中提出了使用TextRank自动提取关键词与人工根据业务场景构建的自定义关键词相结合的方法来辅助呼叫中心的智能质检任务.周世超等人[9]在对语音服务质量进行评估时,使用深度信念网络模型转换特征从而进行分类.

CNN是一种可以利用数据内部结构的神经网络.早期CNN在图像分类领域的应用很成功,例如在ImageNet大规模视觉识别挑战上取得成功[10].而后CNN又在文本领域大放异彩,上世纪八九十年代被广泛的应用于语音识别,随后被用于一些NLP任务,例如词性标注任务[11]、实体搜索[12]、词嵌入[13]、特征挖掘、情感分类[14]等任务.2014年,Kim[15]首先将CNN应用于句子分类任务.

RNN是一种专用的序列模型,隐藏层向量传递上下文是RNN比较直观的优势,使得它能够在语言模型以及机器翻译等序列建模任务中脱颖而出.众所周知,基础的RNN架构非常难于训练,所以衍生出更为精细的变体,例如长短时记忆(long short-term memory,LSTM)[16]和门循环单元(gated recurrent unit,GRU)[17].目前,为了评估二者的有效性已经进行了很多研究.Chung[18]等人研究了在复调音乐建模上二者各自的有效性.Jozefowicz[19]等人探索了一万多种不同的RNN结构,并在不同的任务上评估它们的性能.

大多数人了解的RNN是更加适合序列问题的建模,例如语言模型和机器翻译.CNN是更加适合注重局部特征的任务.实际上,目前自然语言的相关文献并不能支持我们得到以上的结论.例如,一方面Tang[20]、胡均毅等人[21]的研究指出RNN也能够在文档级别的情感分类任务中表现的很好,彭祝亮等人[22]也将RNN应用到句子级别的情感分类任务中,另一方面也有研究表明卷积的架构也能够在如词级别的语言模型和机器翻译等序列任务中达到最佳效果[23-26].所以面对一个具体的任务,对CNN与RNN二者取舍,是必要并且值得的,这一点也被许多学者所认同.例如,Wenpeng Yin等人[27]研究了CNN与RNN在句子级别和文档级别分类任务下的不同,根据结果做了针对性分析.Shaojie Bai[28]等人针对序列模型任务对RNN和CNN做了比较.考虑到目前对线上客服服务流程一致性检测任务尚未有对RNN与CNN的系统性进行比较以帮助我们在该任务下选择合适的模型.本文也在实验中深入分析,由于业务初期数据积累缓慢及标注困难,本文主要分析基本的CNN与RNN结构.

3 架构描述与特征表示

客服服务流程可以体现在客服与用户的多轮对话中,也可以在客服单一表述中体现,本文先针对后一种情况进行研究与分析.例如图1(左)中的一段电信客服的包含宽带续包服务流程客服服务的对话,它是按以下步骤进行:1)由用户表明意图;2)客服根据用户意图实施对应的服务流程(楷体部分);3)用户提出疑问;4)客服解答.可以看到宽带续包服务流程主要涉及两种续包类型的推荐,所以在宽带续包服务流程下存在两类实例,一类是该段对话中的服务流程:推送包月宽带后推送了包年宽带,另一类是推送包年宽带后再推送包月宽带.而在电信专家整理的一系列服务流程中,标准的宽带续包服务流程应该是:先向用户推荐包年宽带,然后再推荐包月宽带.所以这里可以根据标准的服务流程来判断客服服务流程是否与之一致.

本文将该问题转化为文本分类问题,按照标准服务流程对客服的服务流程进行打标(标签为一致或者不一致),接着分析电信客服服务流程语料的特点构建合适的分类模型对客服的服务流程进行识别.算法过程如图1所示共分为两个模块.特征表示模块,将客服表述转换为相应的特征表示;模型构建模块,该模块通过构建合适的文本分类模型对客服表述对应的特征进行处理.如图1(右)所示,首先将客服的每句话进行分词或者按字切分,然后使用one-hot表示或者embedding的方式将词或者字转换为相应的特征向量,最后将这些特征向量堆叠成对应句子的特征矩阵表示.

在处理中文文本时,分词是常见做法,但是出于以下3种考虑,本文决定加入按字级处理方式:

1)中文的常用字个数是3000左右,而词的个数却十分庞大.若采用one-hot表示,可能导致维度灾难与稀疏问题更加严重,另一方面也会导致模型的训练参数增加.

2)目前中文分词常使用一些公开的工具包,例如Jieba分词,HanLP分词等.工具包中提供的分词算法本身存在一定的误差,而误差会传播到下游的任务中去.

3)分词做法相对于按字符做法的优势在于:分词能够初步的帮助我们提取句子中块状语义.考虑到本文使用的模型为CNN与RNN.对于CNN,卷积核提取特征的过程即对句子进行分块然后提取特征,这同样是在提取句子中的块状语义.对于RNN,它常被用来做一些序列标注问题,并且取得较好的效果,而序列标注任务中很重要的一步同样是分块,所以我们相信RNN也可以学习到块状语义.

从图1(左)可以看出,本任务需要对句子的词序语义进行考虑.在客服实施其服务流程的表述(楷体部分)中包年出现在包月之前与包月出现在包年之前是判断该服务流程是否与标准流程一致的决定性特征之一,它们表示了不同的语义,应该被算法所考虑.最后考虑到实际场景下的数据量受制于语料标注的种种困难而增长缓慢,本文在实验部分还采用了引入外部知识的方法:采用外部语料预训练的词向量以及预训练模型.

图1 实际样本(左)和算法过程示意图(右)Fig.1 Actual sample(left) and algorithm process diagram(right)

4 基于CNN的服务流程一致性检测

本章主要介绍使用CNN或者RNN来解决在线客服服务流程一致性检测问题的基础过程,同时做了相应的分析,并且希望根据本问题的特点选择合适的CNN或者RNN变体.

4.1 CNN基础方法描述

对客服的每句话,将句子中出现过的字的one-hot向量依次堆叠得到对应句子的特征矩阵.将该特征矩阵作为CNN模型的输入.特征矩阵中的每个特征向量将经过池化层,通过池化层预先确定的池化方法对特征矩阵的每一个特征向量进行筛选.特征矩阵经过池化操作转换为一个特征向量,最后被输入到softmax层得到分类结果.

池化的本质是采样,可以对特征进行筛选.在处理图像时,由于图像中相邻的像素之间的值相似,这就可能会导致这些相似值经过卷积操作之后输出的特征值依然相似.相似的值重复出现是冗余的,完全可以用一个最大值或者平均值来代替,这也是池化操作的思想所在.然而本文针对的是实际场景下的文本数据,池化操作的影响还有待考证,我们会在下文进行深入的分析.

4.2 CNN一致性检测特点分析

对客服每句话的卷积过程相当于在提取句子中大小为k的小区域块特征,一次卷积后得到句子的特征向量,向量的每一维对应一个块特征.这与n-gram[29]特征表示很类似,但为何我们不直接使用n-gram特征表示的句子向量?是出于以下考虑:

1)n-gram特征表示方法完全忽视了不同的n元词组之间共享的词成分,不同的n元组表示不同的特征,即使两个n元组之间很类似.而卷积通过学习得到每个n元词组特征表示,相比之下更能够体现各个n元词组之间的语义关联.这一点在在线客服服务流程一致性检测问题下十分重要,因为客服对套餐的表述不可能完全一致,同一个套餐很有可能出现不同的表述.例如S1:“这个的话是不加手机加宽带电视的按月缴费的199,如果是包年的话,一百兆是1320.”同样是包月套餐,可以表述为“包月”而S1表述为“按月缴费”.

2)使用n-gram特征表示方法得到的文本特征向量只考虑了n元词组内部的词序顺序而忽视了文本整体的词序.

很明显,CNN对客服每句话的特征表示矩阵进行的卷积操作都是按照词序进行,即不同的词序会得到不同的向量表示,这使得分类模型具有了考虑词序特征的能力.按照这种卷积方式进行的CNN模型称为Seq-CNN[30](Seq表示按照词序).例如,现有文本“按月缴费”,分字得到[按,月,缴,费],这4个字作为字库(字库大小|V|=4)构建one-hot向量,并得到文本矩阵S:

若想提取文本中尺寸为3的小区域l1,l2特征(即k=2),则需要一个大小为3×4的卷积核,即提取尺寸为k的区域特征需要一个k×|V|的卷积核.卷积核中包含k×|V|个训练参数.尽管本文对句子进行按字切分,一定程度上减少了|V|,但是输入矩阵仍然比较稀疏,这会引起不必要的参数增长.Bow-CNN[30]通过对卷积方式做一个小的变换来缓解上述参数增长的问题.它使用词袋模型表示一个个的大小为p(此处p=2)的小区域p1,p2,p3即:

此时提取“按月缴费”中大小为3的小区域特征只需要一个2×|V|的卷积核,训练参数也会因此减少.并且,训练参数减少的同时Bow-CNN能够提取的区域长度还大于Seq-CNN.即不增加训练参数的情况下使用相同尺寸的卷积核,Bow-CNN提取的特征区域长度大于Seq-CNN.我们认为这一特征在在线客服服务流程一致性检测任务下是很重要的.因为客服考虑到用户不清楚业务套餐,会对业务套餐进行解释,这就导致了包含重要特征信息的序列可能会较长.Bow-CNN在不增加训练参数的情况下,能够提取比Seq-CNN稍长的区域特征,这对模型的效果提升有一定的帮助.然而提取的特征区域过长也是没有意义的,区域大小需要合理的控制(本文在实验中取p=4).卷积核一次提取的特征区域长度的增长也是存在风险的,这是由于池化操作的存在.试想特征区域长度越长意味着包含的信息可能越多,而由卷积提取出的重要特征经过最大池化或者平均池化操作后必然会导致信息的丢失.

4.3 RNN基础方法描述

将客服每句表述X(x1,x2,…,xt-1,xt,xt+1,…,xn)对应的词向量依次输入到RNN中,并取最后一个时间步的输出,将其输入到softmax层得到分类结果.

由于基础的RNN难以训练,所以常用LSTM和GRU这两种变体.LSTM引入了3种门机制,分别是:遗忘门、输入门、输出门,都是用来控制信息的保留和遗忘.GRU与LSTM有类似之处,同样采用门机制.但它只有两个门:重置门与更新门,相比LSTM,GRU训练时运算较少所以速度较快[27].

4.4 RNN一致性检测特点分析

对于客服的表述,RNN能够严格按照词序进行特征抽取,并且在每个时间步的特征抽取过程中它始终都在联系上下文.这样的特征抽取无疑是更准确的,因为相同的字或词在不同的上下文语境下可能会表示截然不同的含义.这是RNN相比CNN的一个优势所在,CNN更加注重局部特征的提取,而忽略了局部特征之间的依赖关系.

考虑下面这条样本S2:“现在续包的话,我们就是有两种资费啊,一个是手机加宽带在此,融合套餐,另外一个就是单独一条,宽带续包年了,两个实际价格差不多,想看,您想了解一下哪一个,我再给您介绍一下.”若想对这句话进行分类,我们实际上只需要如下信息“一个是手机加宽带,融合套餐,另一个宽带续包年”.很明显实际场景下,客服的表述存在着许多冗余信息(还有语音转文本出现的错误),这些信息对该句子的判断并没有提升,甚至可能误导.

对于上述问题,LSTM和GRU中引入的门机制可以有效缓解.以LSTM举例:遗忘门能够在每个时间步决定之前哪些些上下文信息是无用的、应该丢弃的.例如:“现在续包的话,我们就是有两种资费啊”对于S2的识别完全没有帮助,所以这部分文本对应的记忆细胞状态C会被遗忘门以较大概率遗忘(此时遗忘门取值接近于0).输入门能够决定当前时间步输入的信息是否值得保留,对于“现在续包的话,我们就是有两种资费啊”这部分无用信息同样会被输入门以较大概率丢弃(此时输入门取值接近于0).所以通过这些门机制的设计,RNN能够对客服表述的信息取舍得当,进而提升分类效果.

5 实验结果与分析

本章主要介绍了实验所用的数据集以及实验的相关设置,最后还有实验结果以及分析部分.

5.1 数据集

本文使用的数据集来自电信行业客服在线服务过程,由客服在线服务过程中的对话语音经过语音转成文本后,再由电信领域的专家阅读整通对话并定位到客服的推送语段,最后判断客服的推送流程是否合规并打标.现已累计1926条服务流程实例,共涉及以下服务流程类型:宽带续包服务流程、费用咨询服务流程、套餐办理服务流程、故障检修服务流程、宽带升级服务流程、新装宽带服务流程、网络电视咨询服务流程等.

5.2 实验设置

为了体现不同模型在客服对话分类任务中的特点,首先需要一些规定:1)使用不同的特征表示方法,分别包括:one-hot和embedding的方式;2)每个模型不采用复杂结构,CNN只包含一层卷积层,RNN中LSTM和GRU接收输入序列都是从左至右的单向;3)每个模型将做3次五折交叉验证再取平均值作为该模型结果;4)每组模型会针对字集、不去除停用词的词集和去除停用词的词集分别做一组实验,并且使用的停用词集是由电信专家针对电信客服对话语料专门处理过;5)为了弥补实际场景下由于标注困难而导致的数据量不足的问题,实验中采用以下引入外部知识的方法:外部知乎数据预训练得到的词向量[31]以及预训练模型BERT[32];6)实验中用到了StarSpace[33]模型作为不考虑词序特征的对比模型,该模型通过将标签和样本同时嵌入到相同空间中,然后通过计算标签嵌入向量和样本嵌入向量之间的相似度来进行分类.它是一个非常有效的分类模型,但实验中该模型并没有考虑到词序特征.

5.3 结果与分析

在本文提出的在线客服服务流程一致性检测问题中,一个十分显著的特点是必须对词序语义特征进行考虑.表1中显示了3类模型CNN,RNN,StarSpace在本问题下的最高准确度.可以很明显的看出,考虑词序语义特征对本问题的影响之大.StarSpace模型由于没有考虑词序特征仅有48.90%的准确度48.3%的F1值,二者与CNN相差了46个百分点,与RNN相差了44个百分点.

表1 模型的最佳结果Table 1 Best result of the model

表2显示了CNN和RNN的所有实验结果.两种卷积方式和3种池化方式两两组合一共得到6组CNN模型,RNN模型一共两组分别对应LSTM与GRU.训练模型的数据集分别会经过两个不同的处理:按字集做、按词集做,词集下又分为去除停用词和不去停用词两种情况.

1)词嵌入 vs one-hot

考虑到one-hot特征表示得到的向量可能会过于稀疏,我们使用词(字)嵌入的方式与之对比.此处的词(字)嵌入指的是使用本任务下的1926条样本,并使用embedding层根据下游任务训练得到的特征表示,不同于使用大量数据训练得到较为通用的词(字)向量.各项实验结果如表2所示.一共15组比较嵌入方式与one-hot方式的实验中,仅有2组实验one-hot方式优于嵌入方式.这是由于在一定的样本量下,受字词数量的影响one-hot方式得到的向量会变得更稀疏,而嵌入方式在一定的数量下能够学习到更加合适的稠密向量表示.

表2 实验结果Table 2 Experimental result

2)Bow-CNN vs Seq-CNN

Bow-CNN和Seq-CNN是CNN的两种简单变体,主要是针对卷积层做出了调整.实验结果如表2所示,在3组实验中的one-hot特征表示方法下(字集、词集(去停用词)以及词集(不去停用词)),Bow-CNN的最佳结果都优于Seq-CNN的最佳结果,Seq-CNN在嵌入表示的方式下优于Bow-CNN.Bow-CNN不做嵌入是由于Bow-CNN的方法是以词(字)组为单位做输入,而词(字)组数量十分庞大并且每个词(字)组出现的频率不高,所以不适合进行嵌入表示.但是Bow-CNN在小样本情况下配合one-hot表示同样能够获得有竞争力的效果.

3)Max-pooling vs Average-pooling vs Not pooling

为了探究在使用CNN模型做线上客服服务流程一致性检测任务时池化操作的影响,我们实现了包含3组CNN模型的对比实验,分别是:使用Max-pooling、使用Average-pooling和不使用池化,实验结果如表2所示.不管是使用不同的词表(字集、词集)还是不同的卷积方式(Bow-CNN、Seq-CNN),Max-pooling方法下取得的效果最佳,Average-pooling的作用明显弱于Max-pooling,甚至不如不做池化操作.Average-pooling在特征处理时一方面没有像Max-pooling那样保留值最大的重要特征.另一方面,求均值在特征处理上并不是一个好的选择.例如将词向量按维度相加求平均得到句向量的做法,虽然方法简单,但是却会丢失词序等重要信息.我们还发现去除停用词的操作总体上对于所有的池化,求均值在特征处理上并不是一个好的选择.例如将词向量按维度相加求平均得到句向量的做法,虽然方法简单,但是却会丢失词序等重要信息.我们还发现去除停用词的操作总体上对于所有的池化操作是有很大帮助的.电信客服服务过程的口语对话语音转译成文本后存在大量的语气词、错词以及乱词,针对电信对话文本整理得到的停用词集明显对池化这类特征筛选方式有很大的帮助.

图2 RNN vs CNNFig.2 RNN vs CNN

4)RNN vs CNN

在线客服服务流程一致性检测任务在CNN下的最佳准确率为94.55%,在RNN下的最佳准确率(使用外部数据训练的词向量)为92.83%,总体看来CNN比RNN更加适合本任务.为了进一步探究二者在本任务下的表现,我们选择RNN与CNN各自表现最佳的变体(分别是词集(去停用词)下,使用词嵌入的LSTM以及Seq-CNN + max pooling),在不同的参数初始化条件下,进行了10组的实验比较.实验结果如图2所示,在本人任务下CNN的表现始终优于RNN.我们从数据集特点上对该结果进行了分析.如图3中的S3,S4两个服务流程实例中的“100兆”“宽带一年”“1120元”“300兆”“按月”“169块一个月”“一百兆”“包两年2220块钱”,这些都是分类所依赖的最主要的特征,成块状分布于文本中,并且不存在强烈序列关系.而RNN在序列建模上的强项在本任务中没有得到发挥,相反CNN卷积过程的特点就是不断的提取块状特征,所以CNN比RNN更加适合本任务.

图3 例子Fig.3 Example

5)使用外部知识

由于实际场景下,语料的标注十分困难,其数量常受制于口语表述不规范、语音识别等错误而增长缓慢.为了弥补数据量上的缺陷,我们决定在实验中采用一些使用外部知识的方法,分别是:使用外部数据训练得到的词向量以及预训练模型BERT.实验结果如表3所示,词向量的使用并没有使得模型

表3 使用外部知识的实验结果Table 3 Experimental results using external knowledge

获得显著的提升,仅仅使得RNN的准确度提升了0.31%,F1值提升了0.57%.尽管结果使我们感到诧异,但仍然是有依据的.词向量是针对知乎语料训练得到的,缺失了许多电信领域的专有名词.然而这些名词很多恰恰是关键的分类特征,例如一些套餐名,所以不得不随机初始化这些词,它们不得不像上文提到的嵌入方式一样从标注语料中自我学习.对于BERT我们是直接使用官方提供的中文预训练模型,并且在其之上进行微调,实验结果显示BERT取得了次于CNN的效果,准确度为94.04%,F1值为94.03%,它并没有使得本任务获得明显的性能提升,我们考虑其原因是BERT本身参数数量过于巨大,而我们数据集的样本量不足以支撑BERT很好的微调其参数,所以获得的提升效果不佳.

6 总 结

本文使用文本分类的技术来解决在线客服服务流程一致性检测任务,首先针对本任务的特征表示做出了相应的分析,采用了不同的特征表示方法,并考虑使用CNN与RNN作为分类模型.同时,为了得到CNN与RNN在本任务下的最佳结果,本文还针对CNN与RNN的结构做出了分析,对CNN的卷积与池化、RNN的两种变体LSTM与GRU各自分析与比较,与采用外部知识的各种方法进行对比实验.最终得出在本任务下具有最优效果的CNN模型与RNN模型它们的最佳准确率分别是94.55%和92.83%,并且得到的结论对两个模型在实际数据的实践中能够提供一些指导性意见.

猜你喜欢
客服卷积向量
基于全卷积神经网络的猪背膘厚快速准确测定
向量的分解
基于图像处理与卷积神经网络的零件识别
语音推销
建议
向量垂直在解析几何中的应用
出大事了等
向量五种“变身” 玩转圆锥曲线
销售能手