引子

在智能客服的业务场景中,对于用户频繁会问到的业务知识类问题的自动解答(以下简称为FAQ)是一个非常关键的需求,可以说是智能客服最为核心的用户场景,可以最为显著地降低人工客服的数量与成本。

比如10086的在线智能客服,用户提问“如何查询话费”,那系统可以自动给出一个对应的知识“请您向10086号码发送‘HF’短信,即可查询当前话费”,而不再需要耗费高成本的人力来做解答。

本文要讨论的就是对于这么一个特殊场景的算法方案在落地时候的一些考虑。也许有人会觉得,这个不都是很成熟的句子相似性建模的问题吗?有啥好讨论的。那我也有一个疑惑,为什么不是QA 相关度建模,而是Q 与Q 的相似性建模呢?

关于Sentence similarity(STS)和QA 相关度的课题其实在学术界已经是一个很老的课题了,前人都有大量的研究,但都只关心课题本身。而这些研究最终是否会被某一个具体的工业需求场景所需要和采用,却也是另外一个值得思考的事情。

作为准备战斗在业务一线的算法工程师,我觉得对于算法本身的理解深度和调优的技能固然重要,而对于一些实际的场景,如何考虑商业需求的实质与潜在变化,并为其寻找和落地一个准确率和速度兼顾,且能稳步支持需求变更的技术方案也是尤其重要的能力。

FAQ 需求剖析

不多说,我们进一步来看一下什么是FAQ。基本上来说,就是用户使用智能客服系统,提问了一个业务知识的问题,系统需要在知识库里找到最合适的那一个答案,且一般来说,知识库都是人工事先编辑好的。

那看上去这个需求非常明确,就是一个QA任务,问题是如何对这个QA任务建模和实现?QA技术发展到今天,涉及范围已经很广了,有阅读理解QA,知识图谱问答QA,数据分析QA,个人助手QA等等,每一种的领域和方法都不太一样,那FAQ的QA和他们有什么不一样的地方呢?

个人拙见:

  1. 在这个场景中,知识的域是垂直封闭的,并不是开放的,只取决于开发这个智能客服的公司或者个人的需要支持的业务范围是多大。
  2. 由于是垂直领域,知识的变化并不会过于频繁,且知识库其实一般都是一个已经编辑好的库,一般由问题与答案这样的pair对组成,而不是那种很复杂的图结构或者关联表结构。如“如何查询话费”与“请您向10086号码发送 ‘HF’短信,即可查询当前话费”这样的一个文本pair对构成。一般来说pair对的数量都是几十到几百几千不等,不会特别大。
  3. 回答相对简单,不需要太多的推理和解析,只需要知道是知识库里的哪一个回答即可,某种程度上可以看做是一个匹配问题甚至是分类问题

方案选择

在了解了具体的一些需求之后,我们就可以发现,在这个场景中并不需要上很复杂的semantic parsing技术,也不需要上如各种SQuAD里的复杂算法,感觉就是一个经典的检索和搜索问题。去候选里搜索出哪个是最合适作为回复的即可。那问题又来了,拿什么作为搜索的对象呢?

一种方案是拿输入Query 与候选的所有Answer 去做匹配,去找哪一个最合适。 而另一种方案是就是拿输入Query与历史语料库里的Query去找哪一个最相似,然后把找到的query对应的Answer取出即可。

两种方案看上去都有一定的可行性,但是经过我实际的调研发现,工业界普遍采用的都是第二种基于问题相似性的方案。

调研例子如下:

  1. 百度开源的AnyQ
  2. 蚂蚁金服办的文本相似度比赛
  3. CCKS 2018的评测任务之一
  4. 其他如平安银行的,拍拍贷的等等。

以上技术和数据的例子都发生在2018年,说明这个已经成为了现实的FAQ场景里的技术方向了,且久经实际使用的考验,只是具体实现的差别罢了。

那为什么最终这种方案会成为FAQ的主流解决方案呢?我也这个问题进行一定的探索与思考,也请教了一些做这方面的前辈,再加上我自己的一些理解,写下了这篇文章。

选择问题相似度方案的原因

以下进入正题,我们来仔细讨论为什么问题与问题的相似性建模会成为FAQ领域的主流方案。

原因1:语义空间

问题和问题的语义空间是一致的,而问题与回答的语义空间可能是不一致的。这个很好理解,问题都是用户方说的自然语言,其说话的出发点和形式是一样的,所以其学习的空间也是同一个空间。而回答基本都是公司的产品经理、业务运营、客服经理等等制订和编辑的,所以在语义空间上就与用户的问题有着明显的不同。而这个语义空间的不一致性会极大影响算法的选择与学习。

举例来说,如果是深度学习,句子相似度典型算法中以两侧向量相似度为目标和损失函数的孪生网络算法(Siamese network系列)就需要两边的语义空间一样,两边抽取特征的网络结构和参数也是共享的。而其他任务的匹配算法,如推理SLI任务往往就不是参数共享的,且往往需要额外的一个交互映射层来完成两边句子表示的语义映射关系。我的理解是这个额外的语义映射关系也会加大学习的难度。

另一方面如果是传统手工特征,那么句法树的解析出的中心节点是否相同,两句子的编辑距离大小,两句子的关键词overlap情况,这些特征在相似问题判断时会有更好的体现,且具有很高的可解释性(比如编辑距离越小,越可能是同一个意思)。而QA Match 在特征抽取上就会受限很多。

还需要考虑的一点是,极端情况下,问题的回答甚至不是文本形式的,而是其他多媒体形式的,比如一个产品的安装操作视频,中国和欧美的标准尺码表格或者是一张带标注的全国地图。那这种情况,就更难以去对问题和回答就行直接建模匹配。

原因2:语料的稳定性

用户的问题虽然形式和说法各有不一,千奇百怪,但是其整体分布上是一个稳定的状态。而回答却会随着业务的发展和国家政策的更改不断发生变化。即QA数据本身,A就会发生变化,而Q却不会发生太大变化。

可能会有人不理解我对于“变化”和“稳定”的定义。我们的目标是对于用户的问题都能给出一个合适的回复。那么什么叫做合适呢?一种理解是相关性,即问题和回复是有高度的关联性的。而另一种理解只要是在当前这个时间点上根据实际业务需要的最好的回复即可。基于这个背景,我们重新理解一下“变化”和“稳定”。

用户的问题,如“现在买电动车可以直接上牌吗?”,即使变成了“我明天来买特斯拉,是不是牌照问题直接解决”,从某种角度上看依然还是一个很稳定的同义关系。而回答就很可能不是这样了,会随着客服和运营的脑子一热或者业务政策本身的变化而发生非常剧烈的变化。

举个例子,比如买车的用户几年前问“现在买电动车可以直接上牌吗?”,当时的标准回答是“纯电动车在北京市目前可以上牌,只要买车时办理即可。” 过了几年回答就变成“现在部分符合国家相关标准的可以直接上牌,如***车型,不符合的需要摇号”。而时过境迁,现在回答就成”现在都不能直接上牌,建议您先排队摇号,可以先来看一看中意车型,等中了再来购买“。甚至极端情况下,该答案变成了“该问题较为复杂,请咨询人工客服,电话为400XXXXXXX”

所以我们可以看到回答的变化而引来的难题。算法本质是在做一个拟合操作,而数据的变化越多,对模型算法的学习就越不利,所以你完全无法预估回答变化之后,整体的效果变化走向。

原因3:业务回答与算法模型的解耦

这一点可以说是上述第二点的扩展,把问题与回答分离,只对问题建模,可以将算法模型的学习与业务方编辑的答案充分解耦,让不同问题与回答之间的映射比较随意可控

如上面买电动车的例子所说,如果只是对用户的输入进行相似性建模,那么不管客服运营方如何配置要回复的答案,都不会影响系统的匹配效果,可以做到实时的答案更新和替换。如下的例子更可以直观反映情况:

原先的业务逻辑配置情况如下

某次政策大幅度变动之后的业务逻辑配置情况

这里我们可以直观地看到,如果采用QA匹配的策略,那么在新业务配置下,其语义匹配的关系已完全乱了。而如果使用QQ相似性建模的策略,依然不影响,只需要把问题对应的答案指针修改到新的位置即可。

原因4:新问题发现与去重

FAQ的系统在构建好后,并不会是一成不变的,因为公司的业务需要也还是在不断发生变化和增长,用户会有新的频繁需要询问的问题,或者其实有些问题跟已有的问题其实是一致的,或者历史上配置的问题其实是不必要的。

那这个时候就需要对系统进行迭代,比如做新问题的发现与重复问题去重。而想做这个的话,最需要的就是要学习对问题本身如何去表示。而问题与问题相似度建模的方法,明显要比问题与回答相关度建模的方法更直观一些。

这里引用了一张蚂蚁金服举办比赛时,其专家对于赛题的解读,提到了一个完整的智能客服标准问题生产体系里,会有一个对问题进行聚类挖掘闭环的过程。而如何聚类,那显然就需要对问题的充分表示,无论这个表示是基于手工特征的,还是分布式的表示。

原因5: 上线运行速度

一个工业系统在在上线时必须要考虑的一个问题是这个系统的并发和延时情况是怎么样的。

如果使用QA Match的话,如果FAQ语料库的候选很大,即A有很多的话,那么在线上预测的时候,就会存在一个问题,进来的问题需要和那么多的A分别去做Match,(假设有1000条A,那么就需要执行QA Match模型1000次)虽然可以使用Batch机制来批量match,但始终整体的计算资源消耗和计算速度是比较大的。

而如果使用问题与问题相似的思路,那么就可以提前把历史文本语料索引在Elastic search这样的搜索引擎中,或者可以把相似模型对于问题的建模稠密向量用Faiss或者annoy工具索引起来。当来了一个新问题的时候,就通过索引去搜索召回出历史语料中比较粗粒度的最相似TopK(这个时候TopK就可以降低到10或者20)问题即可,然后再用精细化的耗时的复杂语义模型去进一步匹配,就可以节约很多的计算资源和提高速度。

这里引用了一张百度的AnyQ框架的方案说明,里面就设计了这个粗粒度的相似召回模块。所以说用相似的思路做,可以借鉴很多搜索上的一些优化思路和方法,先做召回,后排序。而用QA Match的思路做,在召回阶段,难度就比较高。

原因6:预训练

这个原因就属于我拍脑袋想的了。问题相似的方案,其实可以利用很多外部语料进行预训练,如百度知道里有个百度提供的类似问题推荐(还是可以相信一下百度的NLP实力的)。一般来说,合理的预训练会提高一些自己的具体任务的效果。

而QA Match里的A,往往是定制化的,跟业务高度相关,所以并没有办法很好的获得太多外部语料。

总结

我从性能,扩展性,效果等方面分析了我个人关于智能客服领域的FAQ QA任务的具体技术方案的一些思考和整理。

虽然思考的是FAQ任务在方案选择上的一些事情,但我认为在调研和落地其他NLP任务的时候同样也需要类似的一种能力和实践。感谢阅读,有问题欢迎留言。

引用

  • 百度开源的AnyQ

https://github.com/baidu/AnyQ

  • 蚂蚁金服办的文本相似度比赛

https://dc.cloud.alipay.com/index#/topic/intro?id=8

  • CCKS 2018的评测任务之一

https://www.biendata.com/competition/CCKS2018_3/

原文地址:https://zhuanlan.zhihu.com/p/50799128

智能客服FAQ问答任务的技术选型探讨相关推荐

  1. 京东智能客服言犀启发式问答技术揭秘

    文章作者:邹波.宋双永.孙博秋 1. 背景介绍 近年来,随着智能客服机器人在电商平台上的使用越来越多,用户满意度和问题解决率已成为评价智能客服服务质量.衡量用户体验的最重要指标,而用户体验主要受到用户 ...

  2. 探索语音识别技术:从自动翻译到智能客服

    漫游语音识别技术--带你走进语音识别技术的世界 语音识别是指将人类语言转化为计算机可处理的数字代码.在信息技术的发展史上,语音识别技术一直是人工智能领域的热门话题.近年来,随着人工智能技术的不断发展, ...

  3. 得ChatGPT者,得智能客服天下?

    ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 在现代社会,高效.专业的客服服务已成为企业.组织机构竞争力的关键要素.智能客服系统应运而生,智能客服系统对客服的赋能作用和价值主要表现在提高效率 ...

  4. 智能客服“听不懂人话”?消费者很“闹心”

    智能客服与人工客服并非互相取代的关系.人工客服不能缺位,应通过人机协同更好地回应消费者诉求.在金融消费领域,建议与资金安全等密切相关的业务能够设置人工服务"一键转接"或者" ...

  5. ChatGPT在智能客服产品落地探讨

    AI语言模型中的ChatGPT近期在互联网平台上引起了广泛的讨论.那么,如果想将这个大型语言模型应用在智能客服产品中,或者将其在ToB SaaS应用软件领域落地,应该采用哪种构建策略? 现在ChatG ...

  6. 智能客服赛道:网易七鱼、微洱科技打法迥异

    配图来自Canva可画 随着时代的发展进步,不少行业相较于之前也发生了翻天覆地的变化,客服行业就是其中之一.在人工智能等技术的落地应用影响下,智能客服产品的渗透率是一路走高,整个智能客服行业也展现出了 ...

  7. 2020最新智能客服|聊天机器人算法、架构及应用分享

    智能客服(聊天机器人)是在大规模知识处理基础上发展起来的一项面向行业应用的,适用大规模知识处理.自然语言理解.知识管理.自动问答系统.推理等等技术行业,智能客服不仅为企业提供了细粒度知识管理技术,还为 ...

  8. Live800:全渠道智能客服系统,助力企业打造全渠道客户中心

    在新消费环境下,用户移动化.在线化是一个不可逆转的趋势,如何与客户建立连接.增强接触点,成为企业的核心竞争力.企业的价值有多大?发展潜力有多大?取决于企业所能连接客户的数量及强度,这是对以往产品销量的 ...

  9. 行业内关于智能客服、聊天机器人的应用和架构、算法分享和介绍

    更多精品内容及源码,尽在"源码大数据" 阿里巴巴 小蜜 阿里小蜜新一代智能对话开发平台技术解析 阿里小蜜:知识结构化推动智能客服升级 阿里云小蜜对话机器人背后的核心算法 大中台.小 ...

  10. 被吐槽“智障客服”的智能客服,现在怎么样了?

    伴随AI.5G等新技术带来的变革,客户服务场景发生了多元的变化,千亿级别的企业客服市场正迎来新挑战与新变革.传统客服向智能客服升级转型是必然趋势,如何为企业降本提效,如何开拓新的增量市场,将是未来客服 ...

最新文章

  1. QIIME 2用户文档. 1简介和安装(2018.11)
  2. mysql单引号和双引号
  3. HDU2612 Find a Way BFS
  4. 初二计算机辅导记录,(初中信息技术兴趣小组活动记录.doc
  5. 云服务器Linux jdk安装详解(centos8)
  6. [BUUCTF-pwn]——test_your_nc
  7. 遮掩java_Java×××:重载、重写、隐藏、遮蔽、遮掩(2)
  8. java service实例,javaweb后端实例 service
  9. 创建单IP的***网络
  10. 采用递归求第n位数【C#】
  11. 20180918-1 词频统计
  12. Promise 最完整介绍与实现解密
  13. 一张图讲清如何正确应用可视化图表,学会后再也不会用错图表
  14. bzoj 4498: 魔法的碰撞(DP+组合数)
  15. C语言中的static 具体分析
  16. wait()被notify()后,接着执行wait()后面的语句
  17. QProgressDialog setValue过快导致死机问题记录
  18. 基于word2vec使用wiki中文语料库实现词向量训练模型--2019最新
  19. 自动备份Hexo博客源文件
  20. Verilog 语言编写 OV7725摄像头初始化寄存器库与模块的初始化

热门文章

  1. Linux 网卡重新获取IP
  2. WIN10彻底禁用UAC(用户账户控制)
  3. 3dMax 以物体为中心旋转视图、移动视图中心
  4. 关于美图秀秀的flash在线版
  5. 多源信息融合中的一些名词及知识点
  6. 微信小程序怎么做店铺_微信小程序如何开通店铺
  7. 神经网络模型如何使用的,神经网络模型是干嘛的
  8. python统计分析pdf托马斯_Python统计分析
  9. 一个本科生的毕业设计和论文
  10. oracle10g exp下载,oracle 10g 导出数据 exp 10g