聊天机器人从20世纪80年代起相继出现:TalkBot、Elbot、eLise、Alice、Laylahbot、爱情玩偶等,其中Alice曾被认为是最聪明的机器人。
1991年,美国科学家兼慈善家休·勒布纳设立人工智能年度比赛——勒布纳奖: 金奖为在音视频中都要让人无法辨认其是真人或机器人。 银奖则是在文本测试中至少让半数裁判误认其为人类。 显然现有的聊天机器人没有一个可以达到这个标准。
目前的聊天机器人有一种可以理解为一个数据库检索工具,将问答存入数据库,(大家称这种库叫语料库)当人提问时它会拿着问题去搜索答案,使用关键词匹配显得稍有技术一点。甚至有好几个答案对应一个问题,可以随机显示或者在逻辑判断一下,选合适的回答,这样就显得不那么枯燥,这属于问题和答案一对多。
另外一种情况是,比如人类问天气如何,它会反问人类在哪个城市,根据城市回答天气。这种比较困难,因为这就不是单纯的检索,这需要一些逻辑判断和记忆。记忆很难做到,这要求它需要记住上面聊到的人和事,这种情况处于属于问题和答案多对一。
机器人有学习功能,一般是人类触发预先设定的关键字使它来保存对话者的答案到数据库。
我们今天就详细聊一聊最聪明的机器人Alice: Alice机器人的核心就是aiml,aiml外观上就像一个xml文件,通过特定标签指定问题和答案,包含一些正则和逻辑判断。而且它有点记忆哦。 AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言) Alice机器人可以不用数据库,因为它的问题和答案都在这个文件里。
一个简单的aiml文档是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<aiml>
<category>
<pattern>hi</pattern>
<template>你好</template>
</category>
</aiml>
<category>代表一次会话,<pattern>用来匹配对方的问题,如果匹配成功,回答<template>标签里的内容。
<set>标签:(记忆标签)出现在<template>内部。
如果贴身包一层<think>标签会显示 “ 我记住你的名字了!”
如果没有<think>标签会显示 “ 我记住你的名字了!Mshu ”
<template>我记住你的名字了!
<think>
<set name="name">
Mshu
</set>
</think>
</template>
<get>标签:(记忆标签)出现在<template>内部。
<category>
<pattern>我的名字是什么</pattern>
<template>你的名字是.
<get name="name"></get>
</template>
</category>
<condition>标签:相当于if语句,出现在<template>内部。
<template>我的天呢,
<condition name="sex">
<li value="girl">你好动人啊!</li>
<li value="boy">你好帅啊!</li>
</condition>
</template>
<that>标签:上句的问题,出现在<category>内部。
用户说 "好 " 的情况有很多,
只有当上一句Alice说的是 " 我们聊聊电影吧 " 时才会匹配到这个<category>
<category>
<pattern>好</pattern>
<that>我们聊聊电影吧</that>
<template>你喜欢哪部电影?</template>
</category>
<input>标签:输出对方曾经说过的话。index的值是1代表本句,2代表上句....
<category>
<pattern>我上一句说的啥</pattern>
<template>
你上一句说的:<input index="2"/>
</template>
</category>
就简单介绍这几个标签吧,github上有dome https://github.com/Mshu95/Alice