6.23日我去北理工参加了由paperweekly联合北理工、清华大学举办的NLP方向的博士生论坛。本次论坛主要偏向于NLP领域前沿技术的学术讨论,我挑选了吴金龙关于对其机器人工程化方向的分享,总结给大家。
1.对话机器人简介
对话机器人历史悠久,从1966年MIT的精神治疗师机器人ELIZA到现在已有半个世纪。但现代意义的机器人其实还很年轻。检索型单轮对话机器人得益于搜索引擎的商业成功和信息检索的快速发展,目前技术上已经比较成熟。最近学术界和工业界也积极探索深度学习技术如Word2vec、CNN和RNN等在检索型机器人中的使用,进一步提升了系统精度。虽然技术上较为成熟,但在实际应用中检索型机器人还存在不少其他问题。例如,很多企业历史上积累了大量非结构化数据,但这些数据并不能直接输进检索型机器人,而是需要事先通过人工整理。即便有些企业存在一些回答对的数据可以直接输入检索型机器人,但数量往往只有几十到几百条,非常少。可用数据的质量和数量限制了检索型机器人的精度和在工业界的广泛使用。
2.对话机器人未来趋势
吴博士认为,在未来3-5年以对话的方式提供服务,完成用户指令,会成为主流的人机交互方式。未来的对话机器人主要分为三类:个人信息助理、客服/导购机器人和泛娱乐/教育聊天机器人。
CUI是个性化推荐、定向广告、数据挖掘、领域知识与模型等技术与用户之间的粘合剂。
3.DeepBot对话框架
真实应用中通常会包含多个不同类型的机器人,它们协同合作,解答用户不同类型的问题。我们把协调不同机器人工作的机器人称之为路由机器人(Route-Bot)。路由机器人根据历史背景和当前query,决定把问题发送给哪些机器人,以及最终使用哪些机器人的答复作为提供给用户的最终答复。
下图是以路由机器人搭配闲聊机器人、知识图谱机器人、任务多轮机器人、检索单轮及闲聊机器人等构成的对话框架。
4.不同模块机器人架构介绍:FAQ-BOT
检索型单轮机器人(FQA-Bot)涉及到的技术和信息检索类似,如下图所示。
在上述架构之外,检索单轮机器人会面临很多query和候选答案包含词很少的问题,这里会利用同义词和复述等技术对query和候选答案进行扩展和改写。词表示工具Word2vec、GloVe、Fasttext等可以获得每个词的向量表示,然后使用这些词向量计算每对词之间的相似性,获得同义词候选集。当然同义词也可以通过已经存在的结构化知识源如WordNet、HowNet等获得。复述可以使用一些半监督方法如DIRT在单语语料上进行构建,也可以使用双语语料进行构建。PPDB网站包含了很多从双语语料构建出来的复述数据集。权重计算方法经常会和余弦相似度(cosine similarity)一同使用于向量空间模型中,用以判断两份文件之间的相似性。
匹配算法方面,吴博士介绍了两种最常用的深度匹配模型,左图为QA匹配,即用户的query和QA pairs中的answer进行匹配;右图为QQ匹配,即query和QA pairs中的question进行匹配。其中QQ匹配比较常用,采用了RNN的编码模型,先对query和question向量化后,进行编码,然后计算相似性,进入全连接层,最后归一化,计算出相似概率。
以上的两种匹配模型,存在两大问题:词的重要性依赖于另一个句子的内容;长距离依赖的关系难以学习,需要降低位置对词重要性的影响。针对以上两个问题,吴博士介绍了引入注意力机制的AttnMatch模型。
此外,吴博士还介绍了两种优化方法:
第一,更好地选择负样本。
如下图左侧例子所示,如果正负样本中关于这类问题的所有描述都有“屏幕”二字,那么模型就会认为“屏幕”二字无关紧要,因此可能会认为“屏幕碎了”和“手机壳碎了”很相似。
所以,在构建负样本集的时候要避免此类情况发生。通过分析错误集和线上实际效果一步步优化负样本的选择。
第二:可以通过匹配的answer的相似性,来判断两个问题的相似性,如下图:
上图中,Q1和Q2的回答都是一样的,因此虽然Q1和Q2问的是两个问题,但是可以处理为高度相似。利用这种思想,可以更好的处理小数据集和OOV(out of vocabulary未登录词)的问题。
5.多轮任务型对话机器人:TASK-BOT
任务型多轮机器人(Task-Bot)通过多次与用户对话交互来辅助用户完成某项明确具体的任务,如下图:
关于上图中每个模块的说明:
语言理解(SLU):把用户输入的自然语言转变为结构化信息 — act-slot-value三元组。例如餐厅订座应用中用户说“订云海肴中关村店”,我们通过NLU把它转化为结构化信息:“inform(order_op=预订, restaurant_name=云海肴, subbranch=中关村店)”,其中的“inform”是动作名称,而括号中的是识别出的槽位及其取值。NLU可以使用语义解析或语义标注的方式获得,也可以把它分解为多个分类任务来解决,典型代表是Semantic Tuple Classifier(STC)模型。
对话管理(DM):综合用户当前query和历史对话中已获得的信息后,给出机器答复的结构化表示。对话管理包含两个模块:对话状态追踪(DST)和策略优化(DPO)。
DST维护对话状态,它依据最新的系统和用户行为,把旧对话状态更新为新对话状态。其中对话状态应该包含持续对话所需要的各种信息。
DPO根据DST维护的对话状态,确定当前状态下机器人应如何进行答复,也即采取何种策略答复是最优的。这是典型的增强学习问题,所以可以使用DQN等深度增强学习模型进行建模。系统动作和槽位较少时也可以把此问题视为分类问题。
自然语言产生(NLG):把DM输出的结构化对话策略还原成对人友好的自然语言。简单的NLG方法可以是事先设定好的回复模板,复杂的可以使用深度学习生成模型,如“Semantically Conditioned LSTM”通过在LSTM中加入对话动作cell辅助答复生成。
除了把整个问题分解成上面几个流程分别优化,目前很多学者也在探索使用端到端技术整体解决这个问题。
6.对于TASK-BOT,一种较为务实,可以落地的优化思路
关于用端到端的思想试图解决任务多轮机器人的方法,相信大家都看过许多,但是这种方法目前还处于研究阶段,没法落地。吴博士根据工程经验提出了一种比较务实的优化思路。
如上图所示,优化基于平行结构的槽位组合,尝试采用森林结构。
在传统的结构下,由于槽位是平行的,所以槽与槽之间没有依赖关系,在用户进行填槽操作的时候,常有信息冗余的情况。比如在某项任务中,需要了解用户多大,有几个孩子,如果用户只有11岁,那就没必要再问有几个孩子了。
若采用森林结构,可以尝试用机器学习的方法预先设定槽位之间复杂的依赖关系。
7.对话机器人,远不止模型数据
在最后,吴博士介绍了一些更偏产品设计的内容,如下图:
1)对于目前的对话系统而言,一定要管理好客户的期望值,很多客户认为很简单的功能,其实很难解决;
2)目前单个机器人/任务的对话还算流畅,但是在多个对话和多个机器人之间的对话还比较糟糕,需要从对话设计的角度突破;
3)机器给出建议,人工最终决定在很多业务下更合适;
4)重视异常检测和处理。
备注:
1.吴金龙:爱因互动技术合伙人
2.本文部分内容参考:https://blog.csdn.net/qq_40027052/article/details/78723576