突然想写一篇电话场景下的对话机器人的介绍,算是对自己之前工作项目的一个小总结吧,只说自己知道的,算是抛转引玉吧。

先简单说明这里说的对话机器人不是指常见的闲聊机器人chatbot,而是落地到客服、营销等场景,需要结合对应行业知识的对话机器人,举个栗子,电信小智、10086等。大概做个划分,客服和外呼(Inbound、Outbound),客服典型的特点是用户打过去、机器人接听的,而外呼呢,就是机器人主动发起对话了,对话表现上前者多为用户主导,后者多为机器人主导。常见客服机器人主要核心的功能是检索啦,就简单的说是FAQ或者KBQA,FAQ的核心是文本向量表示和相似匹配,后者没有时间经验就不说了,本文介绍的重点是外呼对话机器人,而且是基于电话场景的。

功能模块

1. 对话管理DM

2. 语音转写ASR

3. 口语理解SLU

4. 业务问答FAQ

5. 语音合成TTS

对话管理

因为是主动呼用户,自然是有目的性的(这是跟chatbot最大的不同),有明确的流程规划,比如金融催收、卖保险产品等场景对话机器人(流程举例如下图),一般通过if-else规则实现,定义好有先说什么后说什么,怎么结束对话等,还有一个关键的是问题之间的衔接跳转。Q1、Q2表示机器人需要问的业务问题,根据用户的回答进行流程的跳转,其实就是个有限状态机FSM啦。

语音转写

这部分我并没有深入接触,当时只是调用其他同事开发的api,只是使用方,但是实际证明这是非常重要的(划重点),电话场景下用户散布于五湖四海,各种方言片子起飞,而且环境噪音的影响不可忽略,往往得到的转写文本不理想。特定场景下语音转写模型需要在对应场景的数据进行再训练,提升识别准确率,不然对话机器人无法正常工作。

口语理解

口语理解其实就是对用户回答的解析,与机器人发问是相关的,如果是封闭式问题(答案可枚举)则是做一个用户意图的分类,如果是开放式问题则是进行回答的解析,前者是一个文本分类,后者可看做一个序列识别,例如上文给的催收的例子中就是对问题「是否本人」的回答进行yes、no的分类,Q2可视作一个开放式问题,目标是从用户回答中识别时间/日期(图例中并没有把这部分信息作为跳转条件)实际中还有一个不可忽略的问题是,用户的回答可能并不是对机器人提问的回答,可能是提出反问,对机器人身份、通话目的进行提问,这部分就是业务问答了。

业务问答

这部分其实可以看做是客服机器人,用户发问机器人回答,实现上需要预先定义好回答对(FAQ set),然后选择一个相似匹配模型,操作上既可以Q-Q匹配,也可以Q-A匹配,方法上可以无监督也可以有监督,无监督可根据计算文本相似度(tf-idf、bm25),有监督方法操作上,匹配文本记为正类,为了样本均衡,负类从不匹配的文本中进行随机采样,演算法上可以提取文本特征后套用传统分类模型,或者用端到端的语义网路模型。如果问答数据量非常大,可参照搜索引擎的方法,先过一个文本检索引擎(比如ES),召回的topK的文本,然后可使用有监督的方法进行重排序rerank,最终返回匹配的answer或者匹配的quesiton对应的answer。一个重要的问题是,在返回answer之后机器人需要返回到正常的对话流程,把对话进行下去。

语音合成

电话场景下返回给用户不是文本,而是语音,设计中需要引入语音合成技术。现有的市场环境下用户对机器人是比较排斥的(很多情况下发现是机器人会马上挂断,对话无法进行),这对语音合成提出了很高的要求,但是基于已有的了解,现有的技术很难做到,因此实际操作上,为了用户体验往往聘用专业人员根据本文进行录音,录音之间可插入少量的语音合成的内容,实现简单的个性化对话。另外,录音之所以可行也是因为整个对话所有可能的文本都是预定义好的。

简单总结

本文主要介绍电话外呼场景下的对话机器人的设计和一些技术点,说的比较简单,很多细节没有涉及到,如语音转写文本的预处理、对话机器人的预设应答、对话效果评测等等,后续有机会再补充吧~


推荐阅读:
相关文章