写点什么

基于 NLP 的智能问答推荐系统

  • 2020 年 10 月 20 日
  • 本文字数:3594 字

    阅读完需:约 12 分钟

基于NLP的智能问答推荐系统

干货概览


通常,客服系统主要有两种应答模式: 机器人自动应答和人工应答 。当用户提出问题后,客服系统首先启动机器人自动应答模式,如果用户认为机器人推荐的结果不准确,会进一步请求进入人工问答模式,由专门的客服人员跟进答疑。


据相关机构统计,国内客服的市场规模超过千亿,然而,目前机器人应答模式使用率并不高,人工客服仍然是企业使用率最高的应答模式,其原因主要包括两点:一方面,机器人客服系统 实现准确推荐比较困难 :由于自然语言本身是模糊的、问题表述方式多样、问题与答案的词汇可能存在差异等原因,导致实现准确推荐比较困难。例如:域名转出、域名怎么转出、域名转出流程 等问题其实都在咨询域名转出操作;又例如,百度云虚拟主机 的英文缩写为 BCH,两种表述都可能被用户在提问时使用。另一方面,为机器人客服系统 准备知识库比较困难 。首先,为问题准备答案有比较高的技术门槛,只有具备一定经验的客服人员才能胜任。其次,客服人员一般是根据最近用户的提问来扩充整理知识库的。在这个过程中,很难知道某一问题是否在知识库中已经存在,容易导致问题的重复整理。重复整理问题不但浪费人力,还可能导致相同目标的问题在知识库中的答案不一致,降低客服质量。


基于上述背景,本文研究了一种基于自然语言理解的客服 QA 推荐系统,该系统目前已应用在百度云客服团队,在提升百度云用户体验、减轻客服压力等方面取得了不错的成效。


现有技术及其缺点

现有客服系统通常将一个 Q(问题)A(答案)对看作一个文档,将整个知识库看作一个文档库,然后利用搜索引擎的关键词匹配技术为用户推荐相似问题以及答案。


该技术主要有以下缺点:


  • 关键词匹配技术 不擅长处理用户在问题表述上的差异 ,无法将用户问题与知识库中的 QA 对进行有效匹配,导致推荐结果不理想。

  • 在整理知识库时, 无法将目标相同的问题聚集起来统一整理 ,从而导致

  • 整理工作量大,耗时长;

  • 答案只针对单个问题,使得内容局限,质量较低;

  • 相似问题分别整理,答案很容易不一致,容易导致用户困惑。


问题分析

我们发现,问题中的词汇与答案的词汇之间常常存在比较大的差异,例如:


问题: 网站无法打开


答案: 使用临时域名访问一下是否是用户解析或者是域名绑定的问题,访问报什么错误,常见访问报 404,检查一下访问的路径或者是路径下是否有此文件。访问报 502,需要客户提供下 BCH 控制面板-网站监控和网站访问的截图,确认下是否是内存不够用或者请求量过大导致的,如果是配置不够用,建议客户升级配置;如果是请求量过大导致,建议客户确认下是否正常,可以通过 FTP 的 weblogs 目录下的 access.log 日志看下是否被攻击,可以通过配置 IP 黑名单进行处理。


以上是百度云客服部门整理的一个真实 QA 对。可以看出,问题和答案 在词汇上差异巨大 。问题中 网站无法打开 ,在答案中表现为 用户解析有问题、域名绑定有问题、访问报 404、访问报 502 等多种不同原因所导致的具体现象。所以,直接根据问题来查找答案很难得到理想的结果。


此外,关于网站无法打开还有如下提问方式: 主机无法打开网页、官网打开不了、无法打开网页 等等其他真实的 Q,可以看出,知识库中的问题之间可能还 存在一定的相似性 。基于此特征,如果可以在查询问题时首先利用问题本身之间的相似度找到知识库中相似的问题,那么就可以通过知识库中的相似问题找到答案,此时,知识库需要建立问题与答案的映射关系。进一步地,如果可以找到具有同一目标的所有问题,就可以针对这些问题批量整理一个答案,在知识库中建立 问题集与答案的映射关系 。那么,当用户的问题与某个类别的问题相似时,就能根据这类相似问题集找到目标答案。客服知识库中问题集与答案的关系可以参见图 1。



图 1 客服知识库中问题集与答案映射关系


因此,客服系统主要包括两部分:知识库管理和推荐系统,其处理流程为:



图 2 知了系统数据处理流程


在图 2 中,蓝色的部分对应知识库管理系统,黄色的部分对应推荐系统。首先,我们利用历史工单中的问题建立一个初始知识库。推荐系统利用这个初始知识库就可以为用户提供服务。在提供服务的过程当中,推荐系统将用户反馈收集起来,并根据这些反馈更新知识库的内容,从而实现了知识库的 不断进化


智能客服系统介绍

1 知识库生成

百度云客服团队拥有大量历史工单问题,为了找到具有同一目标的所有问题,可以先对历史问题进行 聚类 ,将相似问题聚到同一类簇,再针对问题簇中的所有问题统一准备答案,建立问题簇和答案之间的联系。此时,所准备的答案能够解决类簇所代表的一整类问题。


可以采用密度聚类、层次聚类等聚类方法对大量问题进行聚类,并设置距离值为两两问题之间的 相似度值 。相似度值可以基于 SimNet 等自然语言处理方法来获取。聚类完成后,每个问题都会被归入一个 类簇 ,然后再由客服专家对类簇进行人工检查,尝试将算法生成的类簇进一步合并。这样做是因为:对于表述不同的相似问题,例如, 什么是 BCC什么是云计算服务器 ,由于基础语料的局限性,自然语言处理方法未必能够为它们计算出足够高的相似度,从而导致聚类算法不能将他们聚入同一类簇。所以,就需要通过专家经验将这些问题联系起来。最终,经过聚类以及人工校验,知识库中所有相似的问题都被整理到同一个类簇中,然后由客服专家针对整个类簇问题整理答案。


通过聚类操作可以辅助专家实现问题的批量整理,大大降低知识生成成本。并且,相比针对单一问题整理的答案,通过问题集编写的答案内容更充分,质量也就更好。


2 推荐系统

知识库建立后,就可以用来回答用户的提问了。在用户将问题提交到系统之后,知了系统首先计算用户问题与知识库中所有问题的 相似度 ,并选择相似度值大于某 阈值 (我们用 query_threshold 代表这个阈值)的 N 个问题作为候选集。然后,系统获取候选集中每个问题所属的类簇,N 个候选问题一共可以得到 n(n<=N)个类簇。最终,系统将这 n 个类簇对应的答案返回给用户。


为了持续优化推荐效果,知了系统保留了用户的查询结果并统计线上使用情况,同时还增加了 标注反馈 功能,用户在每次查询完毕后可以对推荐结果进行反馈。


总体来说,我们将用户的反馈结果分为三类:


  1. 已解决 :用户认为推荐结果准确,所查询问题得到了有效解答;

  2. A 待更新 :用户认为所推荐的答案不够准确,但在一定程度上有助于解决问题,后续对答案进行优化就能够进一步提高推荐效果;

  3. Q 待添加 :查询结果为空,或者用户认为所推荐内容与自己的问题没有关系。这说明知识库很有可能尚未覆盖到这个用户问题,因此系统会自动把这个问题记录在案,后续通过知识库更新的流程将问题添加到知识库中。


3 知识库更新

知识库更新操作需要解决两部分问题:


  1. 对标注为 A 待更新状态的类簇答案进行优化;

  2. 将标注为 Q 待添加的新问题入库。


其中,问题 1 比较简单,通过人工方式由专家完善答案即可,而问题 2 所阐述的问题则可以通过如下描述的离线流程来处理。


首先,计算新问题与知识库中所有问题之间的相似度,获取相似度值大于一定阈值(我们用 update_threshold 代表这个阈值)的 Top M 个相似问题,这些问题分别属于 m(m<=M)个类簇。需要指出的是,如果知识库中已经存在新问题所属的类簇,但因为该类簇中的所有问题与新问题的相似度都小于 query_threshold,那么该类簇就不会被推荐。因此,update_threshold 的值要比 query_threshold 小一些,以召回知识库中已存在的相似类簇。倘若人工检查确认新问题确实应当归于 m 个类簇的某一个,那么将新问题添加到该类簇的问题集即可。如果人工审查发现新问题不属于任何召回的类簇,则该问题疑似属于新类簇。我们将所有疑似属于新类簇的问题集中起来,采用 知识库生成 中描述的方法进行处理,就可以生成新的问题集 &答案组合。


通过上述的知识库更新流程,我们不仅解决了新问题进入知识库的问题,还避免了对这些问题以及答案的重复整理,减少了人工开销。


总结

知了系统采用了 问题集与答案 的形式来管理 QA 知识库,这种管理形式具有以下几个优势。


首先,在用户提交了问题之后,推荐系统先匹配知识库中语义相同的问题,然后展示问题所属类簇的答案。由于一个问题类簇可以包含表述上差异很大的多个问题,匹配的准确率显著上升,并使得推荐结果对目标答案的 召回率 提升到 90%以上。


第二,通过对问题进行自然语言分析和聚类,知了系统大大降低了问题整理的工作量。 知识库整理的效率 提升到原来的 3 倍以上。


第三,人工撰写答案时不再针对单个问题,而是综合考虑一组目标相同的问题,答案的 内容更加全面 ,质量也更高。


最后,知了系统提供了完善的 知识库进化机制 ,保证了知识库能够紧密跟随用户需求与知识的变化,从而避免了推荐效果的退化。


作者介绍


苗贝贝 百度高级研发工程师


负责百度智能运维客服平台 ChatOps,在时序数据异常检测、文本模式识别、相似度网络等方向也有广泛的实践经验。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接


基于NLP的智能问答推荐系统


2020 年 10 月 20 日 14:101862

评论

发布
暂无评论
发现更多内容

复习

IT蜗壳-Tango

10月日更

ES入门指南

天空的叶子

elasticsearch elastic ES

精益求精,零代码训练营第五期顺利结业

明道云

云短信服务孰优孰劣?博睿数据9月云短信评测报告

博睿数据

你未必知道的 WebRTC – 前世、今生、未来

FinClip

WebRTC

少吃肉也能减碳排?

脑极体

科技赋能乡村振兴,农林牧渔如何“拥抱”区块链技术?

CECBC

优雅代码技巧

十二万伏特皮卡丘

应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者

华为云开发者社区

开发者 软件开发 低代码 AppCube 应用开发

一周信创舆情观察(10.18~10.24)

统小信uos

演讲VIDEO大放送|如何打造实景三维高效业务支撑架构

焱融科技

云计算 分布式 GIS 高性能 文件存储

阿里大牛首次公布Java10W字八股文面经,Github访问量破百万

Java 编程 程序员 架构 面试

通过题目来讲一讲计算机系统概述相关知识 3 | 计算机组成与系统结构专题

Regan Yue

计算机组成原理 10月日更

微信朋友圈的复杂度分析

胡颖

架构实战营

[ CloudWeGo 微服务实践 - 02 ] 上手

baiyutang

golang 微服务 10月日更

030云原生之交付部署

穿过生命散发芬芳

云原生 10月日更

文本逆序翻转工具

入门小站

工具

Vue进阶(幺伍肆):vue-resource 应用

No Silver Bullet

Vue 10月日更 vue-resource

带你了解3类预训练语音模型预测方法

华为云开发者社区

语音 预训练 语音模型 前文 后文

鸿蒙轻内核M核的故障管家:Fault异常处理

华为云开发者社区

鸿蒙 异常 故障 Fault异常处理 Fault

linux之zgrep查找压缩包文件文本

入门小站

Linux

OpenSearch 文档如何进行编译

HoneyMoose

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

华为云开发者社区

Linux 二进制 漏洞 SCA工具

Android 音视频 - MediaCodec 编解码音视频

声网Agora

android 音视频 编解码

Python代码阅读(第48篇):返回最大元素的索引

Felix

Python 编程 Code Programing 阅读代码

银行网点业绩增长缓慢,中科柏诚本地生活高效解决

联营汇聚

中国央行数字货币DCEP——有增值空间吗?

CECBC

ffmpeg 推拉流示例

糖米唐爹

虚拟人“觉醒”年,见证一场万物的进化

脑极体

20张图!常见分布式理论与解决方案

Java 架构 面试 分布式 后端

基于NLP的智能问答推荐系统_云计算_AIOps 智能运维_InfoQ精选文章