当前位置:   article > 正文

智能问答机器人python_帮帮智能问答机器人中TaskBot任务对话算法实

智能问答机器人python_帮帮智能问答机器人中TaskBot任务对话算法实

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 正在开展知识图谱推理、强化学习对话策略等工作,以持续提升对意图与实体的识别能力,提供更加智能的回复效果,达到为更多场景提供更好支持的目的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/343922
推荐阅读
相关标签
  

闽ICP备14008679号