AIML元素详细说明

  • 目录
    • 前言:
    • 1、简介
    • 2、详细说明
    • 总结:

目录

前言:

智能客服客户咨询功能的实现主要依靠的就是Python的AIML库,这里就先介绍下AIML。
详细的使用教程可参考:https://github.com/andelf/PyAIML
目前大部分AIML只支持Py2.7版本并且不支持中文,即使有支持Py3且支持中文的版本,AIML的一些功能也有一些缺陷,但是黄天不负有心人,经过博主不断的搜寻,最终找到了一款算是比较稳定的支持Py3版本的AIML。
地址:https://github.com/Shuang0420/aiml
后期博主会将自己的项目发布出来,到时候大家有兴趣的也可以参考下。

1、简介

AIML是Artificial Intelligence Markup Language的缩写, 用于描述一类称为AIML的对象,同时部分描述了计算机程序处理这些对象时的表现。AIML是XML语言(可扩展标记语言)的衍生。

AIML对象是由topic和category单元组成的,格式化或未格式化的数据均可。格式化的数据是由字符组成的,其中有的组成符号数据,有的构成AIML元素。AIML元素将应答数据封装在文档中。包含这些元素的字符数据有可能被AIML解释器格式化,也有可能在之后的响应中处理。

aiml中的元素不区分大小写

2、详细说明

1、think元素

型如: <think><set name="topic">Me</set></think>

放置在template元素里面,表示一旦用户的输入匹配到该category时,再回复应答的同时,给一个变量赋值,这里也就是把Me记在脑子里,以后就可以用<get name=”topic”/>来取出先前记住的内容。

2、<star/>表示*
比如有一个匹配模式是<pattern>* 你 好 *<pattern>;这里pattern元素里的匹配模式是用*号表示任意匹配的,但在其他元素里面不能用*号,而用<star/>这个元素来表示。

3、<srai>元素
表示<srai>里面的话会被当作是用户输入,从新查找匹配模式,直到找到非<srai>定义的回复。例如:
<srai>我 是 <star/></srai>,那么机器人会把“我 是 *”当作是用户输入来从新查找匹配模式。(PS:srai不能很好的匹配中文)

4、<condition>元素(condition元素即为做选择操作时使用的元素,类似于if-else语句。)
放在template元素里面,可以有多个condition元素,但不能嵌套(目前还不支持),有3种形式:

 <condition name="name" value="value">你好 </condition>
<condition name="name" contains="value"> 你好</condition>
<condition name="name" exists="value">你好 </condition>

Name是预先定义的变量,第一种表示name变量的值如果和value相等,回复内容就包括”你好”;第二种表示name变量的值如果里面包含value这个字符串,回复内容就包括“你好”;第三种表示name变量的值如果存在value的值,回复内容就包括“你好”(这个什么意思还不明确)
举个使用例子:

<category> 
<pattern>你 好</pattern> 
<template> 
你好阿!
<condition name="用户名字" value="张三"> 
你又来了阿:) 
</condition> 
</template>
</category>

a. 情况一:如果事先用think设置了变量“用户名字”,而且等于“张三”,那么用户接受到的回复内容是:你好阿!你又来了阿;)
b.情况二:如果事先没有定义或者变量“用户名字”的值不等于“张三”,那么用户接受到的回复内容是:你好阿!
写法有一下几种:

<category> 
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern> 
<template>哇塞,你很
<condition name="用户性别" value="女"> 漂亮阿!</condition> 
<condition name="用户性别" value="男">英俊阿!</condition> 
</template> 
</category><category> 
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern> 
<template>哇塞,你很
<condition> 
<li name="用户性别" value="女">漂亮阿!</li> 
<li name="用户性别" value="男">英俊阿!</li> 
</condition> 
</template> 
</category><category> 
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern> 
<template>哇塞,你很
<condition name="用户性别"> 
<li value="女"> 漂亮阿!</li> 
<li value="男"> 英俊阿!</li> 
</condition> 
</template> 
</category><category> 
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern> 
<template>哇塞,你很
<condition> 
<li name="用户性别" value="女"> 漂亮阿!</li> 
<li>好看!</li> 
</condition> 
</template> 
</category>

这里最后一个li元素表示默认的情况;即找不到condition相匹配时,就用默认的。

6、<gender>元素
替换性别以及代名词,例如:

<gender>She told him to take a hike.</gender>

将被替换成:He told her to take a hike,跟性别有关的单词都将被替换,中文怎么处理不是很清楚。

7、<get name=””名字/>
即得到name的值。

8、<gossip>元素
用来把改元素里面的内容保存到gossip.log文件里。

9、<if>元素
判断元素,有以下形式:

<if name="topic" value="cars"></if> 
<if name="topic" contains="cars"></if> 
<if name="topic" exists="true"></if>
例子:
<template> 
<if name="用户名称" exists="true"> 
你的名字叫 <get name=”用户名称”/>. 
<else/> 
你叫什么名字? 
</if> 
</template>

10、<input>表示用户输入

例如:
<input index="2"/>将输出用户倒数第2次的输入,看如下对话:
用户:好阿
机器人:你也好,你叫什么名字?
用户:我叫黑山
机器人:呵呵,你好黑山。
如果有aiml文件里有片断:
<category>
<pattern>嘿 嘿</pattern>
<template>
<gossip>你刚才说:“<input index="2"/>”?</gossip>
</template>
</category>
如果这个时候用户输入“嘿嘿”,那么机器人将回复:你刚才说:“我叫黑山”?
Index属性的数字表示倒数第几句话,1:倒数第一句,2:倒数第2句,依此类推。

11、<learn filename=”xxx.aiml”>元素
表示让机器人学习某个aiml文件。

12、<li></li>元素
可以在random元素或condition等元素当中使用,表示一个列表;
13、<pattern>表示匹配模式
里面的内容必须大写,可以有星号* 或下划线_,星号表示匹配所有,任意情况;下划线的意义跟星号一样,除了不能匹配字典里面Z后面的字母。

14、<person>和<person2>
第一个是把第一人称转换成第3人称;第2个是把第一人称转成第2人称。<person/>等于 <person><star/></person>

15、<random>随机元素
一般和<li>一起使用,表示从列表里随机取一个。

16、<sentence>元素用来格式化句子

比如:
<sentence>this is some kind of sentence test.</sentence>
可以格式化成:This is some kind of sentence test.即把句子首字母大写,还可以添加标点符号等。如:
<category><pattern>你是谁</pattern><template><sentence>你好我是聊天机器人小君</sentence></template>
</category>

17、<star/>表示星号
已经不推荐使用,只针对0。9版本,目前一般要加index属性来使用,

例如:<star index="1"/>,看如下对话:
用户:我的名字叫黑山!
<pattern>* 名 字 叫 *</pattern> 
<template>呵呵,我知道了,你的名字叫<star index="2"/></template>

18、<system><system>元素
表示调用系统函数,

例如:
<system>date</system>表示取系统当前日期
警告:使用这个元素要千万小心,因为有可能使用户运行你的系统命令。
19、<template>定义回复的模板。

20、<that>元素

表示先前机器人说的话,例如:
<category> 
<pattern></pattern> 
<that>一 起 聊 聊 电 影 好 吗 *</that> 
<template>那你喜欢什么电影那?</template> 
</category>
即:如果机器人先前问用户“一起聊聊电影好吗?”,而且现在用户回答了“好”,那么匹配正确,回复内容为:“那你喜欢什么电影那?”
如果要取前面的前面机器人的话,可以用:<that index=”nx,ny”>,例如:<that index=”2,<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”>表示取机器人倒数第2句的话,<that index=”2,1”>也等于<justbeforethat/>

21、<thatstar index=”n”>元素
先前第n个机器人说过的星号部分的话,

<thatstar/>等于<thatstar index="1"/>.看个例子:
<category> 
<pattern>你好</pattern> 
<template>
计算机 的 型 号 是 什 么
</template> 
</category> <category>
<pattern>*</pattern>
<that>*  的 型 号 是 什 么</that>
<template><star/>
这个型号是<thatstar/>里面
<random>
<li>很好的商品</li> 
<li>很流行的商品</li> 
<li>很华丽的商品</li>
<random></template> 
</category>
对话场景:
用户:你好
机器人:计算机 的 型 号 是 什 么
用户:p4
机器人:p4这个型号是计算机里面很好的商品

22、<think>
记录用户输入且里面的内容不回复给用户。

例如:
<category> 
<pattern>I AM FEMALE</pattern> 
<template>Thanks for telling me your gender. 
<think>
<set namegender>female</set>
</think> 
</template> 
</category>
这里把female这个值保存到gender这个变量里,且回复内容不包括female。

23、<Topic name=”film”>元素

用来设置主题,例如:
<aiml> 
<topic name="功夫"><category> <pattern> phrase </pattern> <that> phrase </that> <template> phrase </template> </category> 
</topic> 
</aiml>
只有当前的topic系统变量是“功夫”时才会匹配到这里。

24、<topicstar index=”n”>元素用来得到先前倒数第n次谈论的主题。

总结:

个人感觉在业务咨询模块,包括在整个智能客服的项目中,这个AIML知识库即用以上的这些语法组成的知识库的设计是最重要、最耗时的工作,因为如果把这个知识库设计好,后面可以省去很多事情,但是如何才能设计好这个知识库呢?这就是一个经验问题了,你除了需要有相关的尽可能多的数据外,还得了解咨询业务中那些问题是常见的,对于一些常见问题你需要怎么去设计这个知识库去匹配等等,最终你还需要熟悉整个AIML的标签以及如何将业务问题最优化的使用这些标签来表示(毕竟真实的业务咨询场景出现的问题会是各种各样,一旦数据量大了之后,很有可能整个知识库就会发生冲突,如输入一个问题,有两个匹配的答案,那么这时系统就会崩溃。。。后面就会有一大堆的问题接踵而来)。所以感觉这部分跟技术关联不是特别大,更多的是和业务关联比较大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【解决】如何打开.ipynb文件

最近碰到文件名后缀为.ipynb文件&#xff0c;起初没太在意这种文件格式&#xff0c;用Notepad打开之后看到也是类似于JSON格式的信息&#xff0c;以为也是为其他的一些文件服务的&#xff08;类似于配置一些HTML文件的配置文件&#xff09;。但是后来才发现这也是一种文本表示形…

《树莓派学习指南(基于Linux)》——1.4 将Raspbian烧录到SD卡

本节书摘来异步社区《树莓派学习指南&#xff08;基于Linux&#xff09;》一书中的第1章&#xff0c;第1.4节&#xff0c;作者&#xff1a;【英】Peter Membrey ,【澳】David Hows &#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.4 将Raspbian烧录到SD卡 …

python单向链表和双向链表的图示代码说明

图示说明&#xff1a; 单向链表&#xff1a; insert、 remove、 update、pop方法 class Node:def __init__(self, data):self.data dataself.next Nonedef __str__(self):return str(self.data)# 通过单链表构建一个list的结构&#xff1a; 添加 删除 插入 查找 获取长…

不使用Ajax,如何实现表单提交不刷新页面

不使用Ajax&#xff0c;如何实现表单提交不刷新页面&#xff1f; 目前&#xff0c;我想到的是使用<iframe>&#xff0c;如果有其他的方式&#xff0c;后续再补。举个栗子&#xff1a; 在表单上传文件的时候必须设置enctype"multipart/form-data"表示表单既有文…

AIML知识库数据匹配原理解析

目录&#xff1a;前言&#xff1a;1、AIML系统工作流程2、AIML的核心推理机制3、推理举例4、匹配规则及实践中遇到的一些问题的解释总结&#xff1a; 目录&#xff1a; 前言&#xff1a; 参考&#xff1a;《Alice机理分析与应用研究》 关于AIML库这里就不介绍了&#xff0c…

【Python】模拟面试技术面试题答

一、 python语法 1. 请说一下你对迭代器和生成器的区别&#xff1f; 2. 什么是线程安全&#xff1f; 3. 你所遵循的代码规范是什么&#xff1f;请举例说明其要求&#xff1f; 4. Python中怎么简单的实现列表去重&#xff1f; 5. python 中 yield 的用法…

ROS机器人程序设计(原书第2版)2.3 理解ROS开源社区级

2.3 理解ROS开源社区级 ROS开源社区级的概念主要是ROS资源&#xff0c;其能够通过独立的网络社区分享软件和知识。这些资源包括&#xff1a; 发行版&#xff08;Distribution&#xff09; ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版像Linux发行版一样…

Win7 U盘安装Ubuntu16.04 双系统

Win7系统下安装Ubuntu系统&#xff0c;主要分为三步&#xff1a; 第1步&#xff1a;制作U盘启动盘 第2步&#xff1a;安装Ubuntu系统 第3步&#xff1a;创建启动系统引导 第1步&#xff1a;制作U盘启动盘 1.下载Ubuntu16.04安装镜像&#xff0c;官网地址&#xff1a;http://www…

Word2VecDoc2Vec总结

转自&#xff1a;http://www.cnblogs.com/maybe2030/p/5427148.html 目录&#xff1a;1、词向量2、Distributed representation词向量表示3、word2vec算法思想4、doc2vec算法思想5、Doc2Vec主要参数详解总结&#xff1a; 目录&#xff1a; 1、词向量 自然语言理解的问题要转…

ubantu安装pycharm破解+Linux基础简介

一、课程简介 linux服务器配置及常用命令 Ubuntu centos 开发软件配置及服务环境的搭建 软件的安装和配置 mysql数据库使用、monDB使用、redius的使用 git的使用 html/css 课程学习方式 表达训练 学习方法&#xff1a; linux学习基本上都是命令和配置 命令要多敲多记 …

《游戏视频主播手册》——2.2 哪些人适合做游戏主播

本节书摘来自异步社区《游戏视频主播手册》一书中的第2章&#xff0c;第2.2节&#xff0c;作者 王岩&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.2 哪些人适合做游戏主播 据不完全统计&#xff0c;目前国内有超过26000名活跃的游戏主播。所谓“活跃的…

Doc2Vec实践

目录:前言&#xff1a;第一步&#xff1a;首先我们需要拿到对应的数据&#xff0c;相关的代码如下&#xff1a;第二步&#xff1a;拿到对应的数据后&#xff0c;就开始训练数据生成对应的model&#xff0c;对应的代码如下&#xff1a;第三步&#xff1a;得到生成的model后&…

Linux常用命令全网最全

一、linux文件系统结构 sudo apt-get install treetree --help #查看帮助tree -L 1 #显示文件目录 rootubuntu16 /# tree -L 1 . #系统根目录&#xff0c;有且只有一个根目录 ├── bin #存放常见的命令 ├── boot #系统启动文件和核心文件都在这个目录…

《开源思索集》一Source Code + X

本节书摘来异步社区《开源思索集》一书中的第1章&#xff0c;作者&#xff1a; 庄表伟 责编&#xff1a; 杨海玲, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 Source Code X 开源思索集最近&#xff0c;有一位来自学术界朋友&#xff0c;找到了我们这个开源的圈子…

机器学习中目标函数、损失函数以及正则项的通俗解释

目录&#xff1a;前言&#xff1a;1、什么是目标函数&#xff1f;2、损失函数3、正则化总结&#xff1a; 目录&#xff1a; 前言&#xff1a; 今天看到一篇很精简的文章来说明目标函数、损失函数以及正则项是什么。以下是文章正文。 转自&#xff1a;https://xiaozhuanlan.…

Linux中的 硬链接ln和软连接ln -s

文件都有文件名与数据&#xff0c;这在 Linux 上被分成两个部分&#xff1a;用户数据 (user data) 与元数据 (metadata)。用户数据&#xff0c;即文件数据块 (data block)&#xff0c;数据块是记录文件真实内容的地方&#xff1b;而元数据则是文件的附加属性&#xff0c;如文件…

干货分享!DevExpressv16.2最新版演示示例等你来收!(上)

2019独角兽企业重金招聘Python工程师标准>>> 为解决大家找资源难的问题&#xff0c;EVGET联合DevExpress控件中文网盘点热门的DevExpress资讯、Demo示例、版本升级及下载&#xff0c;以及各种教程推荐等。更多下载及资讯也可以在DevExpress控件中文网中找到&#xf…

一文看懂哈夫曼树与哈夫曼编码

转自&#xff1a;http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html 在一般的数据结构的书中&#xff0c;树的那章后面&#xff0c;著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛&#xff0c;如JPEG中…

解决:未能将管道连接到虚拟机: 所有的管道范例都在使用中。

虚拟机无端出现: VMware Workstation 无法连接到虚拟机。请确保您有权限运行该程序、访问改程序使用的所有目录以及访问所有临时文件目录。未能将管道连接到虚拟机: 所有的管道范例都在使用中。 原因&#xff1a;Ubuntu开机慢到开不开&#xff0c;我就在任务管理器强制结束了…

tcpdf开发文档(中文翻译版)

2017年5月3日15:06:15 这个是英文翻译版&#xff0c;我看过作者的文档其实不太友善或者不方便阅读&#xff0c;不如wiki方便 后面补充一些&#xff0c;结构性文档翻译 这是一部官方网站文档&#xff0c;剩余大部分都是开发的时候和网络总结来的 项目官网&#xff1a;https://t…