原创 | 工业场景下,问答机器人如何陪聊?
来源: | 作者:K君 | 发布时间: 2018-10-22 | 665 次浏览 | 分享到:

NLU(Natural Language Understanding)是采用NLP(Natural Language Processing)技术对用户问题进行意图识别和实体抽取。意图识别是要弄清楚用户到底要问什么,如是查询故障发生次数还是故障原因;实体抽取是这个意图下的具体槽位值。比如问句是“上个月发电机故障次数是多少”,意图就是“查询故障次数”,故障名称的槽位值是“发电机故障”,时间的槽位值是“上个月”。意图识别可以描述成为分类问题,使用机器学习的方法来解决,如SVM、fastText;实体抽取使用NLP里的NER(命名实体识别)相关技术解决。

DM(Dialogue Management)模块根据问题匹配到相应答案(或采取什么动作,如查数据库或调用API);在多轮对话中它还负责对话状态跟踪,根据当前的对话状态(从历史对话内容更新获得),决定如何进行下一轮对话(或直接采取动作)。比如“上个月发电机故障次数是多少”问句除了故障名称和时间两个槽位,还有城市的槽位值(如是北京还是上海),DM模块根据当前这个状态,要决定继续追问用户“要查那个城市的故障?”。常用的DM策略包括有限状态机,HMM和神经网络[1]。

NLG(Natural Language Generation)是将DM模块返回的结果(如关键词、聚合数据)转变成自然语言文本,最常用的方法是通过规则模板生成回答,类似于NLU中问题匹配的逆向过程,另一种是基于深度学习的seq2seq生成方法。

以上介绍了Chatbot的基本框架和原理,从零开始开发Chatbot工作量很大,好在有大量的Chatbot框架可以使用,下面对几个常用的开源框架做简要介绍。

3. 任务式Chatbot构建工具框架

3.1

基于REfO的问句匹配

REfO(Regular Expressions for Objects)并不是一个框架,它把正则表达式的功能扩展到对象级别,它能同时使用关键和槽位匹配用户问句,从而实现DM模块的问句匹配功能,它支持python。举例, 见下图,REfO表达实现了“上个月发电机故障次数是多少”这个问句的匹配,匹配之后可以触发相应动作从数据库中查找问题答案。参见文献[2]提供REfO 匹配问句Python脚本实现例子。REfO虽然能匹配槽位,但是其脚本编写繁琐,也没有对话状态跟踪机制,基于脚本的规则引擎克服了上述缺点。