AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,和html,xml文件类似。是聊天机器人回答问题的一个模板,机器人只是根据文档内容回答我们输入的问题。这篇文章着重了解AIML的标签和一个.aiml文件的组成。

和XML文件一样,AIML文件开始也需要定义编码方式,如下:<?xml version=”1.0” encoding=”ISO-8859-1”?> 常用的编码方式有:encoding=”ISO-8859-1”、encoding=”UTF-8”、encoding=”GB2312”等。

1. 基本标签

  • <aiml>:一个aiml文件的标志
  • <category>:定义unit ofknowledge中Alicebot的知识库。每个类别包含在一个句子的形式,用户输入可以是一个断言,问题和感叹号等用户的输入可以包含通配符的字符,如*和_。用 <category>标签必须有<pattern>和<template>标记。
  • <pattern>:定义模式匹配的输入,通俗的讲就是用户输入的内容。你问它答里头的‘问’。里面的内容必须大写,可以有星号* 或下划线_,但必须空格隔开,星号表示匹配所有,任意情况;下划线的意义跟星号一样,除了不能匹配字典里面Z后面的字母。
  • <template> :定义一个用户的输入的响应。就是你问它答里头的‘答’。<template>标签可以保存数据,可以调用另一个程序,能够给条件答案或委托给其他类别。

    2.其他

  • <*>:用于匹配通配符*character(s),在<pattern>标签。同正则表达式
    例子:

    1
    2
    3
    4
    5
    <category><pattern> A * is a *.</pattern>
    <template>When a <starindex="1"/> is not a <star index="2"/>?</template>
    </category>
    human:A mango is a fruit.
    Robot:When a mango is nota fruit?
  • <random>: 用于获取随机响应,通常内含<li>标签。

  • <li>: 用来表示多个响应。
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1"encoding="UTF-8"?>
    <category><pattern>HI</pattern>
    <template><random>
    <li> Hello! </li>
    <li> Hi! Nice to meet you! </li>
    </random>
    </template>
    </aiml>
    Human: Hi
    Robot: Hi! Nice to meet you!
    Human: Hi
    Robot: Hello!
  • <set> :使用在AIML变量设定值。

  • <get> :用于获取存储在AIML变量的值。
    get,set例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1"encoding="UTF-8"?>
    <category><pattern>I am*</pattern>
    <template>Hello <set name="username"><star/>! </set></template>
    </category>
    <category> <pattern>GoodNight</pattern>
    <template>Hi <getname="username"/> Thanks for the conversation!</template>
    </category>
    </aiml>
    Human: I am Mahesh
    Robot: Hello Mahesh
    Human: Good Night
    Robot: Good Night Mahesh! Thanks for theconversation!
  • <that> :在AIML用于应对基于上下文。表示先前机器人说的话。也就是它的记忆功能。
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1"encoding="UTF-8"?>
    <category><pattern>WHAT ABOUT MOVIES</pattern>
    <template>Do you like comedymovies</template>
    </category>
    <category><pattern>YES</pattern>
    <that>Do you like comedymovies</that>
    <template>Nice, I like comedy moviestoo.</template>
    </category>
    <category><pattern>NO</pattern>
    <that>Do you like comedymovies</that>
    <template>Ok! But I like comedymovies.</template>
    </category>
    </aiml>
    Human: What about movies?
    Robot: Do you like comedy movies?
    Human: No
    Robot: Ok! But I like comedy movies.
  • <topic> :用于AIML存储上下文,这样以后可以谈话基于这一背景下进行。
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1"encoding="UTF-8"?>
    <category><pattern>LET DISCUSSMOVIES</pattern>
    <template>Yes <setname="topic">movies</set></template>
    </category>
    <topic name="movies">
    <category><pattern> *</pattern>
    <template>Watching good movierefreshes our minds.</template>
    </category>
    <category>
    <pattern> I LIKE WATCHING COMEDY!</pattern>
    <template>I like comedy moviestoo.</template>
    </category>
    </topic>
    </aiml>
    Human: let discuss movies
    Robot: Yes movies
    Human: Comedy movies are nice to watch
    Robot: Watching good movie refreshes ourminds.
    Human: I like watching comedy
    Robot: I too like watching comedy.
  • <think>:用于AIML存储变量,在不通知用户的情况下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <category> 
    <pattern>I AM FEMALE</pattern>
    <template>Thanks for telling me your gender.
    <think>
    <set namegender>female</set>
    </think>
    </template>
    </category>
    这里把female这个值保存到gender这个变量里,且回复内容不包括female。
  • <condition>:类似其他编程语言的switch case。它有助于ALICE来匹配输入作出响应。
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1" encoding="UTF-8"?>
    <category><pattern> HOW ARE YOUFEELING TODAY </pattern>
    <template>
    <think><set name="state"> happy</set></think>
    <condition name="state" value="happy">I am happy!</condition>
    <condition name="state" value="sad">I am sad!</condition>
    </template>
    </category>
    </aiml>
    Human: How are you feeling today
    Robot: I am happy!
  • <srai>:多用途标签,用来调用其它/匹配的类别。(符号缩减、分而治之、同义词分辨率、关键词检测),还不是很懂。有搜到一个解释:刺激回复人工智能,表示<srai>里面的话会被当作是用户输入,从新查找匹配模式,直到找到非<srai>定义的回复。
    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <?xml version="1.0"encoding="UTF-8"?>
    <aiml version="1.0.1"encoding="UTF-8"?>
    <category><pattern> WHO ISALBERT EINSTEIN </pattern>
    <template>Albert Einstein was agerman physicist.</template>
    </category>
    <category><pattern> WHO ISIsaac NEWTON </pattern>
    <template>Isaac Newton was a englishphysicist and mathematician.</template>
    </category>
    <category><pattern>DO YOU KNOWWHO * IS</pattern>
    <template><srai>WHO IS<star/></srai></template>
    </category>
    <category><pattern>BYE</pattern>
    <template>Good Bye!</template>
    </category>
    <category><pattern>BYE*</pattern>
    <template><srai>BYE</srai></template>
    </category>
    <category><pattern>FACTORY</pattern>
    <template>DevelopmentCenter!</template>
    </category>
    <category><pattern>INDUSTRY</pattern>
    <template><srai>FACTORY</srai></template>
    </category>
    <category><pattern>SCHOOL</pattern>
    <template>School is an importantinstitution in a child's life.</template>
    </category>
    <category><pattern>_SCHOOL</pattern>
    <template><srai>SCHOOL</srai></template>
    </category>
    <category><pattern>_SCHOOL</pattern>
    <template><srai>SCHOOL</srai></template>
    </category>
    <category><pattern>SCHOOL*</pattern>
    <template><srai>SCHOOL</srai></template>
    </category>
    <category><pattern>_ SCHOOL*</pattern>
    <template><srai>SCHOOL</srai></template>
    </category>
    </aiml>
    Human: I love going to school daily.
    Robot: School is an important institutionin a child's life.
    Human: I like my school.
    Robot: School is an important institutionin a child's life.
  • <upcase>: 用来把小写字母转换成大写形式。

  • <lowcase>用来把大写字母转换成小写形式。
  • <system>元素表示调用系统函数,例如:<system>date</system>表示取系统当前日期。
  • <sentence>元素用来格式化句子,比如:<sentence>this is some kind ofsentence test.</sentence>可以格式化成:This is some kind of sentence test.即把句子首字母大写。
  • <learenfilename=”xxx.aiml”>元素表示让机器人学习某个aiml文件。
  • <if>元素,判断元素,有以下形式:

    1
    2
    3
    <if name="topic"value="cars"></if> 
    <if name="topic"contains="cars"></if>
    <if name="topic"exists="true"></if>
  • <formal>元素,用来格式化输出,例如:<formal>jon baer</formal>那么回复将被格式化成首字母大写输出:Jon Baer,对中文无效。

Comments

⬆︎TOP