Rasa实战:构建开源对话机器人
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3.6 自然语言生成

自然语言生成(Natural Language Generation, NLG)是将意图和相应的实体转换成人类用户可以理解的文本的过程。当前主要的方案有模板法和神经网络序列生成法。模板法生成的响应比较单一刻板,然而由于模板是人工设计的,所以可读性最佳。神经网络序列生成法的生成形式变化多样,类似千人千面的响应,但由于全部依靠网络自动生成,因此响应的质量和稳定性难以控制。目前在实际应用中,多以模板法为主,对模板法稍加改造(如随机选择一组模板中的一个)以克服其过于呆板的缺点。

NLG模块是机器与用户交互的“最后一公里”。闲聊机器人往往在大量语料上用一个seq2seq的生成模型,直接生成反馈给用户的自然语言。然而这个模型的结果在垂直领域的以任务为目标的客服对话机器人中往往不适用;用户需要的是解决问题的准确答案,而不是俏皮话。我们只能等未来有一天数据足够多、模型足够好时,才可以真正生成准确且以假乱真的自然语言。

在这之前,NLG大部分使用的方法应该仍然基于规则的模板填充,有点像实体槽提取的反向操作,将最终查询的结果嵌入模板中生成回复。在手动生成模板之余,也有用深度学习的生成模型通过数据自主学习生成带有实体槽的模板的。

当下,有很多人尝试用深度学习做端到端的以任务为目标的对话机器人,有的基于传统的对话机器人架构,即“NLU+DM+NLG”,每一个模块都换成深度学习模型,再加入用户模拟器进行强化学习,进行端到端的训练;还有的使用“Memory Networks”方式,偏向于seq2seq,将整个知识库都编码在一个复杂的深度网络中,再和编码过的问题结合起来解码生成答案。这主要应用在机器阅读理解上,著名的是斯坦福的SQuAD比赛,有一些神乎其技的结果,但在垂直领域任务导向的对话机器人上的成功应用还有待观察。