REfO问句匹配示例
3.2
基于脚本的规则引擎
该引擎根据人工编制的对话脚本,自动匹配问题模式,给出回答(动作),因此开发者只需把精力放在脚本编写上。引擎约定了脚本语法,满足大部分对话编制需求,如随机对话模式、通配符、变量捕获、Topic机制(多轮对话机制)、动作触发(函数调用)等。常见的规则引擎包括AIML[3]、Chat[4]、Rive[3]、Super[6],引擎诞生时间从早到晚,但其中最有名的还是AIML(支持Python调用)。其中使用AIML和Chat开发的Bot,都曾多次赢得年度Loebner Prize[7]人工智能大奖。Rive和Super脚本更加简洁,下图是同一个随机问答功能的脚本比较,可见Rive要比AIML更简洁友好。此外Rive支持多开发语言Go/Java/Java/Perl/Python,Super虽然仅支持Java,但其内嵌了图数据库功能,NLU和DM功能较Rive更加强大 。
AIML随机回答模式脚本
<category>
<pattern>今天天气真好</pattern>
<template>
<random>
<li>是呀,天气不错。</li>
<li>要不出去走走?</li>
<li>希望每天天气都这么好!</li>
</random>
</template>
</category>
Rive 随机回答模式脚本
+ 今天天气真好
- 是呀,天气不错。
- 要不出去走走?
- 希望每天天气都这么好!
3.3
RASA
实际对话中,相同问题的问法千变万化,这使得采用人工编制规则来匹配用户问题非常困难;基于机器学习Chatbot框架,通过大量的历史训练问答语料,部分克服了该问题。RASA[8]是其中杰出的开源代表,它包括RASA NLU和RASA Core两个子框架。
RASA NLU负责意图识别和实体抽取。这里首先需要使用已训练好的MITIE模型,该模型需要大量领域相关的中文语料。如构建风力发电领域对话,就要搜集机组的故障工单、故障报告、说明手册等;其次,要构建做意图识别和实体抽取的训练样本,以json格式存储,内容见下图,包括训练文本、意图名、实体名;