干货总结 | AI技术如何打造智能语音质检系统
58同城拥有数千名销售和客服人员,每年会拨打数百万小时的电话,我们构建了一套智能语音质检系统,利用语音识别技术将语音转化成文本,然后利用NLP技术对通话文本进行分析挖掘,实现机器自动质检,这可以规范化销售和客服工作,提高客户服务质量。本次议题将首先介绍语音质检系统的总体架构,然后详细分享语音质检中涉及到的语音处理与NLP技术,包括单声道语音分离、角色识别、文本标签挖掘等,最后会介绍58销售客服场景下的语音质检应用案例。
嘉宾介绍:陈璐,58同城AI Lab算法高级工程师,2018年9月加入58,目前主要负责语音质检、语音机器人算法研发。2016年硕士毕业于北京邮电大学,曾就职于京东,从事商品评论挖掘方面的算法研发。
目录
1、背景介绍
2、总体架构
3、核心功能
4、业务案例
语音质检是什么?
传统的语音质检,通常是指质检员听取一定比例的电话录音进行人工的质检,检测坐席在通话的过程中是否有违规和非标准话术的行为。
58同城呼叫中心简介
58同城的呼叫中心是连接坐席和客户之间重要的桥梁,承接了坐席和客户之间绝大多数的通话。支撑着数千名销售和客服的工作,每年的通话数能达到1亿多通,通话时长数百万小时,这个量级在整个业界都算是非常庞大的数据。
在58同城是如何进行人工语音质检的?在58人工语音质检有一个专门的质检团队,质检团队会去下载呼叫中心录好的录音,人工进行听取,听取的时候会根据自己的理解记录下这个坐席是否有一些违规和非标准话术。这样的效率是非常低的,经过统计,每天人均可以听取大概三小时的录音。
传统人工质检有以下4种劣势:
第一是抽检不足1%,覆盖率特别的低,有大量的语音数据其实是没有被质检的。第二是质检的标准不一致,很多质检员在质检的时候,都是根据自己的理解去记录这个坐席存在的问题,这样可能会导致质检标准不一致,对后期的治理产生了一定的困扰。
第三是很多风险信息很难被发现。主要是因为抽检不足,很多风险信息都没有被抽中。
第四是质检效率非常低,人力成本非常的高。
基于这些传统人工质检的缺点,我们打造了智能语音质检系统,整个流程如上图所示。首先会实时采集语音录音,并把语音转写成文字,再基于我们的质检模型去进行质检,最后把质检的结果展示在web平台上。在web平台上复检人员会进行人工的复检,并把复检的结果反馈给相关的主管来进行管理。整个模式就是机器全量质检加上人工复检的模式,相对于传统的人工质检它有以下的好处:
第一是会对全量的录音进行质检。58同城每年语音数据量有数百万小时,可以对这些数据进行一个全量的质检。
第二个优势是实时反馈。实时对录音进行质检之后,会把这个数据直接展示到web页面上,质检人员就可以及时的跟进复检,复检的结果也会及时的同步到坐席的主管那里。
第三就是风险精准识别。因为是机检,所以需要制定非常明确的质检规则,再使用机器进行识别,这样质检的结果就比较的精确、统一,后期也比较好量化。
第四就是需要少量的人工复检,且效率高。我们的模式是机器质检加上人工复检,机器质检不需要人力成本,在只需要人工复检投入一些人力,这样就可以极大的提高效率。
这张图是总体的架构,可以看到最核心的是逻辑层。逻辑层包括说话人角色识别、语义标签、语音评分,这相当于我们整个项目的大脑,它联动着其他的模块。首先接入层接入语音数据,然后调用基础服务层的语音分离和语音识别模块转写成文本,然后逻辑层就开始相应的质检工作。质检完的数据,结果会展示在web质检平台上,同时质检的结果会有编辑人员进行数据标注、评估和后续的分析工作。
接下来介绍一下整个质检过程中的核心技术,首先是语音分离和语音识别模块。语音识别是一个必要的模块,但为什么要用到语音分离?这就涉及到58同城的外呼中心,它的设备是单声道的,坐席和客户的说话内容都在同一个声道上,是没有办法把它们给区分开的。如果直接做语音识别的话,会得到坐席和和客户叠加在一起的说话内容,后续做质检也会比较难。所以我们首先会做一个语音分离,把坐席和客户的语音分开,再进行语音识别。语音分离的评价指标是DER分离错误率,语音识别的评价指标是CER字错率,在这里我们主要介绍语音分离。
上面右侧这个图就很好的解释了语音分离和和语音识别。在单声道上,可以看到紫色的条纹,坐席和客户的话混杂在一起。经过语音分离(第二个框图),把它分成了说话人a和说话人b,最后经过语音识别,转写得到第二个框图下面的那一句话。但做完了语音识别工作之后,说话人a和说话人b还是不知道哪个是坐席,哪个是用户,所以还需要识别说话人a和说话人b的角色(后续会介绍)。
单声道语音分离
单声道语音分离的评测指标是分离错误率,分离错误率的计算公式是:识别错误的音频时长总和/总时长。右下侧这个图有两段语音,一个是标准集,一个测试集,在标准集里面有两个角色,说话人a和说话人b,但是语音分离后,会得到这样一个测试集,可以看到语音分离对测试集的分离是和标准集有差别的。其中 false、miss和confusion都是识别错误的语音,语音分离的目标就是尽量减少这三类错误的语音时长。
上图就是整个语音分离的流程。拿到一段语音之后,首先会使用VAD断句,把人声识别出来,然后会对这个人声进行向量化,最后对这个向量进行聚类,聚成两类说话人a和说话人b。VAD断句使用的是谷歌开源的webrtcvad,它在我们的语音分离这个场景中获得了较好的效果。
第二步是音频转向量,用的是34层的vgg残差网络。向量聚类这块我们尝试了多种的聚类方案,最终选择了kmeans聚类。下面会介绍一下我们在VAD调优和音频转向量上的一些经验。
VAD调优
在VAD调优这一块,我们主要是在两方面进行了调优,获得比较好的效果。一个是帧移,一个是片段合并。
对于帧移,我们尝试了更小的帧移,这样就可以获取更细粒度的语音表征,对人声识别的更精准。
第二是片段合并,最底部的图是编辑标注的人声情况,但是在做VAD断句的时候,会把它断成更小的片段。这些更小的片段会降低DER,所以我们就对它进行了片段的合并。
音频转向量
在音频转向量这块,我们也尝试了比较多工作。这个是我们最终的一种获取音频转向量的方式,使用的是一个34层的VGG残差网络。这是2019年一个顶会论文发布的网络,它原始的任务是一个语音识别任务,识别出N个说话人,我们是直接使用这个模型最后一层的输出,作为对应的音频向量。
在整个语音质检的流程中,我们首先会进行说话人分离,然后会使用语音识别,得到左侧这样两个文本,说话人a的文本和话人b的文本,下一步就是要判断说话人a是坐席还是客户,因此还需要进一步的操作,就是角色识别。我们的目标就是对左侧的两堆文本,识别出他们的角色。
整体流程如右图所示,当我们获得了语音分离和语音转写的结果之后,首先会进行性别识别。如果发现这两个说话人是属于异性的话,我们就会直接查询坐席的性别,然后就可以知道客户的性别。这样我们对每句语音进行识别之后,就可以知道他的角色是坐席还是客户。如果发现是同性,我们会走另一个流程。首先会初步判断说话人a和说话人b的身份,之后再进行单句角色纠正,实现一个比较完整的角色的识别。
初步角色分配,我们也是基于一个先验的知识,在通话的过程中坐席一般说的话比较多。以左侧为例,说话人b的文字比较多,我们就会认为说话人b是坐席,说话人a是客户。基于这样一个先验知识,我们进行了初步的决策分配之后,会发现其实因为前期说话人语音分离,会有一定的分离错误,导致错误的级联,某些单句角色随着整体而识别错误,因此我们还要进行一个单句角色纠正的工作。比如坐席说了一句“我是58同城的某某”,他被分到了客户的这一侧,那么在做单句角色纠正的时候,我们就会把这句话纠正为坐席。
角色识别主要模型
这就是我们性别识别模型和单句角色纠正模型。性别识别模型我们使用的VGGish+Bi-lstm+Attention,性别模型的识别准确率有92%。在做单句角色纠正的时候,我们最终使用的是用的是两层的BERT,在我们的训练集上,发现两层的BERT不仅比12层的效果要好,而且它的推理速度还大大的提高,更方便我们在线上进行推理。
质检算法
下面再介绍下最核心的质检算法这个模块,我们大多数质检的工作都是检查出坐席有一些违规或者是非标准的话术,我们可以把它抽象成NLP里面的分类任务,在质检算法里面,分类模型占有很大的比重。因为58有很多业务线,每个业务线都会抽象出不同的标签,不同的业务线数据不同,我们使用的模型也会有相应的调整。这里主要分享下销售业务线的质检算法,销售的工作就是跟一些客户进行沟通,推广产品。在这个过程中,可能会有一些非标准的一些话术和一些违规的行为。因此我们从销售质检这块,抽象出了一些标签,比如投诉,辱骂、过度承诺这样一些标签。
我们的质检测模块主要是在单句上进行的一个识别,最开始用的模型是TextCNN,为什么选用这个模型?主要考虑到有两点,一个是我们的这些标签的粒度不会太长,基本都是在一句话的局部。比如说投诉这个标签,基本都是“我要去投诉你了”、“你再这样我就要去相关部门告你”这样的一些表述,在文本局部就可以确定,所以我们用了TextCNN。第二点是,因为我们拿到的文本是语音转写的,会存在一些ASR转写错误,对于ASR错误比较多的文本,LSTM这样的模型,还有Transformer的效果是不如TextCNN,所以我们初版就上了TextCNN模型,后续我们也使用自己的业务数据,预训练了SPTM模型。
SPTM模型是我们自己研发的一个模型,它的全称是Simple Pre-trained Model,在2019年4月我们开发出来的。使用了 SPTM模型之后,准招都有了一定的提升,是目前效果最优的模型之一。线上的推理耗时也非常少,单层 SPTM推理耗时只需要12ms,评测的效果和BERT-Base持平。
SPTM模型
SPTM模型是19年4月诞生的,在18年10月底诞生的BERT基础上进行了一些改动。左侧这个图就是BERT,它包括两个任务,一个是预训练,一个是微调。我们做的改动主要是有两点,一个是把Transformer换成了Bi-LSTM,第二个是就去掉了NSP这个任务。上面这个是我们SPTM GitHub的开源地址,大家有兴趣的话可以去使用一下,只需要在自己的业务数据上做一些预训练,就可以在下游的数据上产生挺好的效果。
这是SPTM的详细介绍,BERT-base使用的是Transformer的Encoder 端,它是12层Encoder 做的一个堆叠。预训练任务包括两个,一个是的MLM,还有一个是NSP任务。我们这块去掉了NSP任务,前一个任务是和BERT保持一致的。我们每个Block除了替换了Transformer之外,其他的部分是和BERT保持一致的。
SPTM的优点是预训练模型的推理速度快,缺点是在一些复杂的任务上,它的表达能力略有下降,比如一些阅读任务上,它的表达能力不如BERT。但在一些简单的任务上,比如我们常用的一些文本匹配、分类和序列标注的任务上,效果都比较好。
单句标签
对于单句标签,我们也实验了一些其他的模型。其中ALBERT就是其中比较典型的一种,它是2019年9月提出的,ALBERT它相对于BERT做了下面三种优化:
第一是词嵌入向量,使用了一种因式分解,参数量大大的降低了。第二是跨层参数共享,跨层参数共享没有对它的信息处理能力造成太多损害。第三个是段落连续性任务。我们积累了大量的ASR转写的文本,因此我们使用自己的业务数据,预训练的一个两层的ALBERT,不仅模型参数量大大减少,推理速度速度更快,而且它的训练速度也加快了,在我们的业务数据上ALBERT和SPTM效果基本是持平的。
全局标签
除了单句标签,我们还有一些业务会使用全局标签,比如上面这个例子。左侧这个对话,客户有时候会问“营业执照一般多久才下来?”,这个时候客服按理应该去回复这个问题,但有的客服会这样回复,“我不太清楚,你找别人问一下”,这其实是一种推诿的表现,我们的目标就是把这样的语音给识别出来,但是如果只识别“我不太清楚”,很容易造成误伤。因此我们会结合上下文的信息,进行识别。
质检模块经常会需要挖掘一些规则,来发现数据分布的规律,方便我们进行一些分析和规则的制定。我们常用的规则挖掘方式有下面两种:一个是NGram规则挖掘,另一个是新词发现。
NGram规则挖掘,它的主要的作用是发现对正例样本敏感的一些规则,基本的流程如上图所示。比如有这样一句话,“有病啊你打了多少次了”,我们首先会提取它的NGram的数据,然后我们会计算NGram在正例和负例的文本中分别出现的次数。如果在正例中出现的次数比负例出现的次数要多得多,那么我们认为这是一个对正例敏感的规则,就会进行保留。它适用在标注文本分为正负例的这样一个场景下。比如辱骂这样一个场景,我们会使用它发现对辱骂敏感的规则,提升召回和准确率。
另一个挖掘规则的方法是新词发现,我们在做文本处理的时候会进行一些切词的工作,但是切词的时候有一些固定的表达,还有一些常用的表述都不在词库里,所以切词的粒度都非常细。但是我们希望获取更长的粒度,形成语义上可以理解的内容,所以使用了新词发现。首先会对语料进行正常的分词,之后会使用点互信息筛选出备用词,再根据它的左右熵筛选出新词。
上面就是我们整个核心技术的介绍,对语音转写的文本进行了质检之后,把质检的结果及时的同步到Web质检系统,由Web质检系统来做一个展示。
这个图是Web质检系统的一个截图,这个例子是客户表示了他要投诉,我们把这个风险点给检测了出来,放到Web系统上,复检人员会来进行复检,如果这真是一个投诉的话,他会点击确认。如果这是一个误判的话,他会修改这个标签,把它改成一个正常的标签。
我们还会对质检数据进行标注评测,把标注的结果加入到训练数据中,不断的优化我们的模型,提高质检效果。
评测首先会对质检后的结果进行一个抽样,抽样之后会有专门的质检团队进行标注,也会对标注的结果进行人工质检。质检的目的是为了保证标注数据的准确性,最后来形成评测集做评测。目前整体的准确率92%,在收益方面,我们呼叫中心全量的录音接入了质检,其中客服质检节省了约1000多的人力。
第一个案例是销售高危录音的质检,它是判断在销售和客户沟通的过程中,是否发生了一些高风险的行为。首先我们制定了这样一系列的标签,分为高危标签和普通标签,其中会更关注高危标签,因为高危标签给用户带来非常差的体验,也可能会导致用户投诉。
质检系统会把这些标签质检出来,复检人员进行复检,这些复检的结果会传到销售主管那里,销售主管选择一些处理动作。比如把这些电话进入沉寂库,或者电话保护180天,180天内销售不能再进行拨打,由此来形成比较好的防骚扰机制,来保护客户免受一些骚扰。
第二个案例是呼叫中心风控防骚扰。这个是基于历史的语音数据来预测高危电话,来减少客户的投诉。因为我们语音质检积累了一段时间的历史数据,历史的每通电话都会有一个标签。每个电话都会有一个时间上拨打的序列,我们就可以使用这个标签来序列预测这个电话是不是高危电话,在未来有没有投诉的可能性。
右边这个表格是我们进行的一个统计,其实我们理性上也是这样想的,用户表示“不需要”的次数越多,或者表达“你给我打电话的次数过多”,这个用户的高危率就越大,未来投诉的可能性也就越大。因此我们构建了这样一个模型来预测高危电话。我们预测的结果也会有一些相应的处理,比如进入沉寂库,电话保护一定的时间。这套机制的作用是可以有效减少高风险电话的拨打,降低客户的骚扰,减少投诉,提升客户的服务质量。
第三个业务案例是客服质检。客服场景主要分为两块:一个是要求客服在拨打电话的过程中,一定不能出现这些标签。比如和客户在进行通话过程中不能推诿,也不能没有开场白和道别语。另一个场景是在和客户通话过程中一定要包含某些标签,比如我们有个场景是对于新注册的用户,客服一定要对他进行“负责人确认”和“套餐的核实”等等。如果客服在通话过程中没有提到这些标签,就算不合格,我们会进行一个相应的管理。
文章介绍:
欢迎关注部门微信公众号:58AILab
欢迎在欣秀(https://app.ic3i.com)平台上加入"58同城AILab技术沙龙"圈子,一起交流技术,可以扫描以下二维码加入该圈子。