58同城帮帮智能问答机器人提供了自动问答机器人、人工在线沟通和智能辅助聊天整套解决方案,该套方案可应用于客服、商户、销售等IM沟通场景,分别对应 帮帮智能客服 、帮帮商家版、销售在线化等产品。 在自动问答机器人上,帮帮具备QABot单轮问答(参考 QABot问答机器人算法实践 )、TaskBot任务多轮对话、ChatBot闲聊三种能力,本文主要介绍TaskBot任务对话机器人的算法实践。

TaskBot 任务对话简介

TaskBot任务对话的目标是完成一项特定任务,如订机票。在实际场景中,用户一般不会在单次提问中提供完成任务所需要的全部信息,因此往往需要通过多次反问的方式,从用户处获取缺失的信息,从而产生多轮对话过程。我们常见的任务对话实例是订机票, 一次订机票对话过程如下左图所示,其中TaskBot通过反问,逐步引导用户完成任务:

在五八同城业务场景下,租房、买房、买车、招聘等业务也可应用任务对话,以租房为例,一次租房对话过程如上右图所示。由示例可知,为完成任务,TaskBot首先需要根据用户输入,理解用户意图如“我要租房”,同时还能够提取出有效的信息如区域、户型与价格;其次TaskBot应该能记录与更新对话状态,也就是在用户提供某个信息的前提下,知道该怎么回复用户,以获取缺失的信息,或者完成任务。在实践中,前者与意图实体联合识别功能对应,后者与对话管理功能对应。下面先描述TaskBot整体架构,再分别介绍这两个功能的实现。

整体架构

TaskBot通常有模块化与端到端两种实现方式。模块化是指将系统拆分为对话理解、对话管理与回复生成等多个模块分别实现;端到端是指使用大量数据得到算法模型,该模型可直接由用户原始Query得到系统回复。帮帮TaskBot采用模块化设计,以在数据少的情况下保持稳定性。通用的模块化TaskBot架构如下图:

通用 TaskBot 包含 NLU 自然语言理解、 DM 对话管理与 NLG 自然语言生成这几个模块。其中 NLU 识别用户输入的意图和实体, DM 匹配一组回复策略, NLG 构造文本回复给用户。 结合实际情况,为帮帮 TaskBot 设计如下的总体架构:

帮帮TaskBot主要由数据层与逻辑层组成。数据层包括对话历史库与话术配置库,对话历史库存储用户历史输入序列,话术配置库存储产品配置的对话回复规则。逻辑层由NLU联合识别服务与对话管理服务构成。其中NLU联合识别服务依赖人工智能平台达到理解用户意图与实体的目的,对话管理服务实现DST对话状态跟踪、DPL对话策略选取与NLG回复生成三个子功能。此外通过接入日晷ABTest实验平台,系统实现了不同话术的问答效果对比。

意图实体联合识别

意图实体联合识别模块负责理解用户Query对应的意图与实体(槽位),其中意图表示用户意向,实体表示与用户交互时用户提供的某些具体信息。 如用户Query为“我要在酒仙桥租3000元的房子”,则识别出意图为“我要租房”,实体为“地点:酒仙桥”与“价格:3000”。

联合识别模型部署在AI Lab提供的WPAI人工智能平台上,其核心结构为双向LSTM网络级联CRF标注器。模型示意图如下:

用户Query首先经过意图规则层,与模板数据集中的意图模板进行匹配。如果匹配成功,则使用匹配结果覆盖联合识别模型的意图输出。应用规则可以快速解决线上badcase。 在对意图进行划分时,采用抽象意图与特定领域意图结合的形式,以提升可扩展性,便于应用在不同场景。如将用户提供信息的行为抽象为 inform意图,该意图能够同时适用于房产、二手车与招聘等多个场景;而在房产领域下,则定义特有的找房意图,以产生领域独有的回复。

完成意图匹配后,再将用户Query送给联合识别模型处理。联合识别模型先将句子的embedding结果通过Bi-LSTM层,继而将结果分别通过意图分类器与实体标注器,最后对意图分类器产生的交叉熵loss与实体标注器产生的负对数最大似然loss求和,作为整体loss,以降低该整体loss作为优化目标进行模型训练。

实体标注器的核心为线性链CRF条件随机场算法,CRF对条件概率进行建模,这个条件概率表示从无向图中的一组输入节点转移到另一组输出节点的概率。在实体标注场景下,CRF的输入节点对应于观测序列,输出节点对应于状态序列,其中观测序列为句子的字序列,状态序列为IOBES格式的标注结果。IOBES标注结果是在实体标签的基础上,添加实体位置标签后得到的。以下是IOBES标注的观测与状态序列示例:

S标签表示单字实体,在以上句子中没有出现。线性链CRF计算出的条件概率一般由两类特征函数S与T加权相加后取指数得到。第一类特征函数S称为状态特征,它反映了某时刻的状态值在特定观测序列下出现的概率;第二类特征函数T称为转移特征,它反映了特定观测序列下,某时刻的状态值在后一时刻转移到新状态值的概率。在训练时,线性链CRF的优化目标是所有样本的条件概率乘积最大,即其负对数似然最小,优化结果是得到一组S与T的权重系数。

在预测时,CRF使用维特比解码方法得到实体序列。维特比解码是一种动态规划方法,它从前到后对句子进行遍历,对每个字的所有可能状态,都保存一个最大概率值,这个概率值表示从句首开始,到该字结束这个子序列在此状态下的最大联合概率。解码过程开始后,在遍历到某个字时,使用特征函数与前一个字的最大概率分别计算这个字在各个状态下的最大概率。遍历到最后一个字后,找到其最大概率对应的状态值,再向前回溯得到整个句子的实体序列。

联合识别模型输出的实体最后通过实体规则层进行匹配,以提升识别效果。增加实体规则层的原因是,在将所有细粒度实体作为模型识别目标时,由于不同实体在用户问题中的出现位置与文本特征都类似(如“我想租北京的房子 ”与“我想租望京的房子”,前者为城市实体,后者为区域实体),导致在小样本场景下,模型识别极易出错。因此,将细粒度的“市”、“区”和“商圈”实体统一为“位置”实体,模型识别后再进行规则匹配,最终使实体识别的精确率与召回率均提升超过 5个百分点,识别结果稳定性大幅提升。

目前联合识别模型支持十余类意图,其中inform、更换、不限、拒识、感谢、再见与问候7类为抽象意图;支持九十多类房产与车辆领域的实体,并正在持续扩展中。在评测数据集上,联合识别模型达到了90%的意图识别精确率,85%的实体识别精确率。

对话管理

对话管理的作用是将联合识别结果映射为一个系统回复。该模块参考了基于有限状态自动机与基于框架语义(即根据意图+实体的组合进行策略选择)的两种方式进行实现,目的是在保留基于状态机实现方式的稳定性的同时,兼顾基于框架实现方式的灵活性。以租房寻求任务为例,首先构建类似下图的状态转移图:

上图中节点与TaskBot预先配置的系统回复类型一一对应,而边则对应用户的某种输入组合,固定的状态转移路径保证了TaskBot的回复可控且一致,同时用户的输入条件可以是意图、实体或者两者的组合,带来了一定泛化能力。如在房产领域下,用户输入位置、价格、户型等实体,都会被识别为inform意图,从而只需要配置单条转移路径(如图中Sx->S4路径),就可以对多种类型的输入做出相同的响应。

在单轮对话中,对话状态跟踪组件读取当前用户状态,得到上图中的某个节点作为起始状态,并根据联合识别结果得到一到多条边。对话策略选取组件按照预先配置的规则选择一条边作为状态转移路径,得到转移后的节点作为结束状态。回复生成组件读取结束状态对应的系统回复配置,按规则生成文本回复返回给用户。

状态转移图配 置以列表的形式存储,列表中每个单元对应结构如上图 。 其中触发器对应于状态转移图中的一条或多条边。 参数是从外界获取的额外信息, 引入参数 的原因是,一些信息无法从用户Query中得到,需要在对话过程中即时获取,例如在租房任务中,可能需要根据是否有用户画像,提供不同的回复,此时即可配置画像参数。 输出则对应于状态转移图中的一个或多个节点,在相同的触发条件下,由于转移条件不同,如用户可能有或没有画像,导致输出之间产生区别。 考虑到同一源节点转移到多个目的节点或者多个源节点转移到同一目的节点的情况,每个单元都可配置多个触发器或者输出。

配置文件被以文本形式存放在WConfig内,一方面原因是WConfig提供了配置信息灰度与历史配置回滚的能力,借助其可以有效维护不同的配置信息;另一方面原因是WConfig具备实时回调接口,可方便编辑人员实时更新话术配置。通过结合日晷ABTest实验平台提供的ABTest功能,能够达到快速对比与迭代不同版本的话术配置的目的。

总结与展望

本文介绍了 TaskBot 中的意图实体识别模型结构与实现细节,并示例说明了对话管理模块的实现方式。 TaskBot 目前已接入房源推荐与天气查询等场景,同时 TaskBot 正在开展知识图谱推理、强化学习对话策略等工作,以持续提升对意图与实体的识别能力,提供更加智能的回复效果,达到为更多场景提供更好支持的目的。

智能问答机器人python_帮帮智能问答机器人中TaskBot任务对话算法实践相关推荐

  1. 彼聆智能语音机器人_南昌智能语音机器人作用

    南昌智能语音机器人作用dfv39g 人工智能+电话销售把人类从重复的脑力劳动中解放出来这个任务沉重却赋予了咱们奋斗的动力,咱们把解放话务员的重复脑力劳动作为完结任务的个里程碑心态是一个大门槛. 南昌智 ...

  2. linux智能聊天机器人,基于bluemix智能聊天机器人开发过程(一)

    基于bluemix智能聊天机器人开发过程(一)--入门及地址部署 前期准备工作: 创建bluemix账号 GIT(可选) node.js cf(cloud foundry) bluemix Cli t ...

  3. 人工智能的智能医疗机器人:实现智能辅助、提高医疗效率

    作者:禅与计算机程序设计艺术 近年来,随着医疗健康领域的迅速发展,科技创新带动了医疗产品.服务和管理领域的快速发展,在医疗行业中,电子病历系统.物联网技术等手段也日渐普及.虽然这些技术已经为患者提供了 ...

  4. 智能问答机器人python_智能问答机器人

    上周为了娱乐,写了一篇<一行Python代码实现夸夸聊天机器人>,虽然只有几十条人工整理的通用夸夸语料,但是貌似也能应付一些简单需求.不过这篇文章在微博.AINLP微信公众号.知乎专栏推送 ...

  5. 微信智能小机器人 小马 智能客服 调用

    调用例子如下: /* * 其中KEY 为验证码  可以填写为123 content为内容  编码为UTF-8 */ public static String chatting(String key,S ...

  6. isweep扫地机器人怎么样_【知道问答】iSWEEPX3扫地机器人怎么样?图案解说其质量? | 智能扫地机器人评测...

    [知道问答]iSWEEPX3扫地机器人怎么样?图案解说其质量?弓字形智能规划清扫 APP控制 扫吸拖一体 来说说我选购经历:很早就想买扫地机器人,就是不知扫地机器人如何选择,网上查了一下关于iSWEE ...

  7. 如何使用智能问答机器人服务

    以某企业的IT呼叫中心为例,此呼叫中心每天都要为企业内部员工解答大量的IT问题,其中包括大量重复回答的问题.为了降低运维成本,该呼叫中心开始使用华为云CBS智能问答机器人来问答IT问题. 本文介绍了购 ...

  8. 惠而浦扫地机器人充不进电_【今日关注】惠而浦扫地机器人怎么样?体验2个月之肺腑之言? | 智能扫地机器人评测...

    [今日关注]惠而浦扫地机器人怎么样?体验2个月之肺腑之言?Whirlpool/美国惠而浦扫地机器人N78S吸尘器智能家用超薄全自动 说良心话惠而浦扫地机器人真心值得入手,因为我上个月刚好买了这款,当初 ...

  9. 什么叫小米粒吸尘机器人_【诉说心声】德国克林斯曼全自动吸小米粒小石头怎么样?老铁诉说使用全过程 | 智能扫地机器人评测...

    [诉说心声]德国克林斯曼全自动吸小米粒小石头怎么样?老铁诉说使用全过程操作简单 千帕吸力 电池耐用 上个月在市场上面了解了下怎么样,当时超出了我的预算,没有入手,这个月活动,果断入手了,对于很多人最关 ...

  10. 惠而浦扫地机器人充不进电_【诉说心声】whirlpool /美国惠而浦n78s吸尘器怎么样?老司机深度剖析真心话 | 智能扫地机器人评测...

    [诉说心声]whirlpool /美国惠而浦n78s吸尘器怎么样?老司机深度剖析真心话Whirlpool/美国惠而浦扫地机器人N78S吸尘器智能家用超薄全自动 其实说起起来这个惠而浦扫地机器人蛮不错的 ...

最新文章

  1. Hyperledger Fabric(术语表)
  2. CKfinder 和 CKEditor 在 ASP.NET 下的配置
  3. Centos6.5下docker 环境搭建
  4. 一次 sql 优化经历,太有趣了!
  5. iOS app 右滑返回
  6. MapReduce原理与设计思想(转载:http://blog.jobbole.com/80619/)
  7. VC++制作DLL具体解释
  8. 数据库实践丨MySQL多表join分析
  9. portlet_Portlet Servlet JSP
  10. 大数据分析应注意哪些问题
  11. C#使用带参数的存储过程
  12. 一天到晚都在转笔,不需要写代码、调试,用眼看就行了?
  13. 使用.NET和Jquery打造简单的便签纸
  14. 软件设计师历年c语言算法,2021年历年软考软件设计师真题押题分析.doc
  15. Vue + OpenLayers 配置多个地图数据源
  16. 宾州州立大学帕克分校计算机科学,宾州州立大学帕克分校排名一览
  17. 网站优化排名的5个方法
  18. python--给图片加水印
  19. {JSONDecodeError}Expecting value: line 1 column 1 (char 0)
  20. Cisco 3650交换机断电后配置无法保存

热门文章

  1. [Luogu4173/BZOJ4259] 残缺的字符串
  2. 计算机考试怎样删除美式键盘,Win10怎么把美式键盘删除_Win10彻底删除eng美式键盘?-192路由网...
  3. 996,活着抑或死亡
  4. df -h无响应问题解决
  5. 用html把图片整体往左挪动,网页制作如何让图片从左到右循环移动
  6. <一起JS(基础篇)>4.标识符、字符串、Number、波尔值、Null和Undefined
  7. 论文写作中Word设置公式居中编号右对齐保姆级教程
  8. C内存分配方式与C++内存分配方式
  9. 如何购买阿里云域名教程(域名购买+配置)~
  10. 如何合并excel文件