网站建设方案流程,Wordpress怎么配合HTML,电子商务及网站建设,工作态度和责任心感悟目录#xff1a;前言#xff1a;1、AIML系统工作流程2、AIML的核心推理机制3、推理举例4、匹配规则及实践中遇到的一些问题的解释总结#xff1a; 目录#xff1a;
前言#xff1a;
参考#xff1a;《Alice机理分析与应用研究》 关于AIML库这里就不介绍了#xff0c…目录前言1、AIML系统工作流程2、AIML的核心推理机制3、推理举例4、匹配规则及实践中遇到的一些问题的解释总结 目录
前言
参考《Alice机理分析与应用研究》 关于AIML库这里就不介绍了详细的介绍及简单的使用请参考我的上一篇博客https://blog.csdn.net/qq_16633405/article/details/80228697 这里主要介绍下AIML知识库内部数据匹配的机制以便我们能更好的使用AIML库。废话少说直接进入正题了。
1、AIML系统工作流程
AIML系统工作流程如图1所示。 第一步系统初始化 AIML系统在启动时首先根据配置文件进行系统的初始化操作把需要替换的词串如把 it’s替换为it is、自身的相关信息如名字、性别等、人称转换信息以及此前的对话情景变量读入系统并把AIML文件内容即知识库以树的结构形式加载到内存当中形成内存知识树这样当系统在响应用户输入的问句时可直接在内存树中进行推理提高了响应速度。加载完毕之后等待用户输入问句。 第二步接收用户输入进行问句规范化处理 当AIML解析器接收到一行用户的输入后首先把输入的文字分成单独的句子进行问句规范化处理分析当前句子中是否包含需要替换的字符串如果有则替换之。例如把问句中出现的“you’ve”替换为“you have”“I’m”替换为“I am”等等。问句规范化处理完以后以规范问句到内存知识树中查询推理答案。 第三步问句查询推理 这一过程是AIML的核心部分将规范化处理后的问句与内存知识树中的模式进行匹配寻找最佳匹配结果找到之后读出该匹配模式对应的模板信息进行下一步处理。 第四步模板处理 也就是答案的后处理模板中可能包含一些特殊标记需要处理如读出机器人名字标记所代表的实际名称还原星号部分所代表的内容如果包含跳转标记还需要在内存知识树中以跳转部分的内容做进一步的推理。 模板处理完后返回用户结果等待用户输入新问句。
2、AIML的核心推理机制
AIML的核心推理部分称为 Graphmaster它由一系列称为Nodemapper的节点集组成。每一个Nodemapper都有若干个从该节点出来的分支这些分支可能是一个单词也可能是一个通配符。 根据用户的输入查找对应模式的过程就是AIML的推理过程假设用户输入的问句以单词X开头那么首先拿X与Graphmaster中第一级节点的内容逐个比较整个推理过程可以分为三步 1、当前节点是否包含统配符“_”如果有则搜索以当前节点为根节点的子树以X后面剩余部分组成的子句在该子树中继续该过程如果没有相匹配的节点则转 2 2、当前节点是否包含X如果是则搜索以当前节点为根节点的子树以X后面剩余部分组成的子句在该子树中继续该过程如果未发现相匹配节点则转 3 3、当前节点是否包含“!”如果是则搜索以当前节 点为根节点的子树以X后面剩余部分组成的子句在该子树中继续该匹配过程。如果没有发现匹配节点回溯到节点的父节点把X重新加到子句子的首部继续该匹配过程。 当进行匹配的句子到达句尾并且匹配的最后一个节点包含模板内容时则表明已经找到了相匹配的模式此时终止搜索匹配过程返回该节点取出模板内容在必要信息处 理完毕后把结果返回用户。由该算法可以看出如果内存知识树中第一级节点含有关键字“*”并且该节点含有模板信息则对任何输入的问句都能得到一个结果。
3、推理举例
下面举一个简单的例子来说明AIML的实际推理过程。 假设知识库中有以下三个category
针对这三个category给出它的内存知识树如上图所示。为简明起见图中节点只写出了它所包含的内容滤掉了其它信息。假设用户输入的问句是“do you love your boy”
根据上图和前面所讲的匹配规则匹配串为“do you love your boy”首先将问句的第一个单词“do”与第一级节点节点1和节点5进行匹配首先应该匹配节点1它仅有一个子节点2与问句下一个单词“you;”匹配不成功问句回退后“you;”与下划线匹配成功则继续匹配“love”成功匹配“your”成功当再匹配“boy”时当前节点4既不是“_”也不是“boy”和“*”匹配不成功这样对节点1而言第一步匹配下划线失败。继而执行匹配过程的第二步匹配相同单词“do”成功匹配“you”成功匹配“love”与节点H成功再匹配下一个单词“your”时根据优先级匹配下划线不成功匹配原单词“your”成功再匹配最后一个单词“boy”时三个步骤都不成功此时回溯到节点H。再以原单词“your”与节点8中的星号匹配成功继续匹配最后一个单词“boy”与节点I中的星号匹配成功继续匹配最后一个单词“boy”与节点9匹配成功问句结束整个匹配过程完毕叶子节点9为最后搜索匹配结果其中也含有模板信息表明找到对应了模式在进行模板信息处理后即可把结果返回给用户。
4、匹配规则及实践中遇到的一些问题的解释
首先是拿知识库中的数据和提问的问句进行匹配的先根据问句来确定知识库中匹配的首节点之后从对应的匹配数据出发看匹配的首节点的剩余部分是否和问句的剩余部分匹配如果成功则直接返回匹配结果如果失败则进行另一个分支的匹配工作内部匹配的一个优先级即_单词* 例子
M:*充值*金额*
T充值金额及次数限制
匹配的时候先将T中的“充”字拿出来和M中的“*”号进行匹配之后再将T中的“值”字与M中的“充”字进行匹配
不匹配则将T中的“值”字匹配到M中的“*”中即此时的“*”代表”充值“二个字然后再将T中的“金”字与M中“充”字进行匹配
失败再将T中的“金”字放到M中的“*”中...直到最后发现T中所有的汉字都无法匹配M中的“充”字则说明当前这条路失败
即进行第二条路即M的初始“*”不代表任何字则T中的“充”和M中的“充”匹配值和值匹配之后再参考前一条路的操作步骤
先把*当做匹配的有对应的汉字然后接着匹配T中的剩余的汉字看是能与M完成匹配若不能则返回“*”处
即*是另一种情况即不代表任何汉字接着进行匹配。。。
对于汉语来说内部是将一句话中的每个汉字都拆出来进行处理的
问题一使用AIML库时遇到返回AIML库源码中一段字符串输出的原因的解释 例1
问题 提前还款违约金
匹配项
A:*提前*还款*违约*
B:*提前*还款*匹配的是这个
返回的语句是对不起无法回答您的问题。请您换种正式的方式提问这个返回的字符串可以在源码中自定义更改
出现这种情况的原因是当你使用AIML库中srai标签时出现了多匹配问题srai标签工作原理是当符合你定义的匹配规则时他会再去搜索对应的问题这时候出现了多匹配的问题即一个问题有多个匹配选择程序不知道怎么选所以就爆出上面源码中的一句话srai详细的使用及原理请参考我的上篇文章https://blog.csdn.net/qq_16633405/article/details/80228697。 PS所以在使用的时候个人不建议为了省事去使用Srai标签因为使用这个标签后具相当于再次进行了一次检索匹配的过程并且在这个过程中匹配的规则会发生一些变化下面的例子会解释那些地方发生了变化。 对于星号的匹配有如下的规则
在最后一个“*”处的规则是先假设B中的“*”有内容若匹配失败才进入B中的“*”无内容的条件再次进行匹配。
问题二AIML库下中文的匹配规则 在说明使用srai标签后的检索匹配与初始检索匹配机制的一些不同点之前有必要举个例子把AIML库下中文的匹配规则说明白。 例2 匹配项
*贷款审批*时效*
*审批*多久*
*贷款*放款*
输入的问题贷款审批后多久放款 输入后答案有冲突 这种情况下我想让“贷款审批后多久放款”这句话匹配*贷款*放款*的答案 就需要将*贷款审批*时效*转化为*审批*时效*这样在输入的时候会先匹配“贷款”两个字即先匹配*贷款*放款*这个模式若匹配不成功才会去匹配另一个*审批*多久*即单词的优先级高于星号有单词先匹配单词。 系统内部操作时也是将汉字一个个拆分匹配的时候也是一个一个字的去匹配。内部运行效果如下如所示
问题三使用srai标签后的检索匹配与初始检索匹配机制的一些不同点 例3 如下所示 当我输入“贷款有哪些品种”时就会发生匹配多项的问题输出系统自定义的输出语句即对不起无法回答您的问题。请您换种正式的方式提问我自定义的。 categorypattern*贷款*种*/patterntemplate贷款有哪些品种房供贷、红本贷、流水贷公积金、代发工资、公务员贷、保单贷。/template/categorycategorypattern*贷款*有*/patterntemplatesrai贷款有哪些品种/srai/template/category
但是当上面的匹配项改为这样时系统就不会发生匹配多项的问题也就不会返回相应的输出语句。 categorypattern*贷款*种*/patterntemplate贷款有哪些品种房供贷、红本贷、流水贷公积金、代发工资、公务员贷、保单贷。/template/categorycategorypattern*贷款*有*/patterntemplate贷款有哪些品种房供贷、红本贷、流水贷公积金、代发工资、公务员贷、保单贷。/template/category
原因使用srai标签的搜索匹配机制和初始的搜索匹配机制不一样的地方。使用sari标签的时候也许也许内部源码的运行机制也许是在初始搜素匹配机制的基础之上又添加了一些额外的限制所以才导致有这样的问题但是个人感觉这个问题完全可以解决大体的步骤就是在执行srai标签时将初始匹配的那套流程代码再执行一遍不就OK了也许中间还牵涉到一些其他的难点吧。。这里就不考虑这些了
总结
一直想找关于AIML内部数据加载机制的知识但是可参考的资料真的少之又少无奈只能把之前找到的资料和自己的实践相结合总结出来这样一篇文章希望能对大家有所帮助。