首页 > 编程语言 >【NLP开发】Python实现聊天机器人(ALICE)

【NLP开发】Python实现聊天机器人(ALICE)

时间:2022-10-08 13:34:22浏览次数:86  
标签:NLP aiml Python 机器人 ALICE AIML 聊天 人工智能 msg


文章目录

1、简介

简单来说,聊天机器人是一种可以模拟和处理人类会话(无论是书面还是口头会话)的计算机程序,让人能够与数字设备交互,就像和真人交流一样。不同聊天机器人的复杂度各不相同,简单如通过单行响应回答简单查询的基本程序,复杂则如数字助手,在收集和处理信息的过程中不断学习和进化,不断提高个性化水平。

【NLP开发】Python实现聊天机器人(ALICE)_aiml


当前聊天机器人用到的技术:大家常说人工智能的三大要素,包括数据、算法和算力。而在聊天机器人的技术体系下,最关键的三个因素应该是人工、数据和算法。在现阶段,人工是大于数据,更大于算法的。

【NLP开发】Python实现聊天机器人(ALICE)_aiml_02

做一个聊天机器人,毋庸置疑需要创建一个对话系统,对话系统由语音+NLP(自然语言理解)两部分组成。
语音部分:ASR(语音识别)、TTS(语音合成)。
NLP部分:NLU(语言理解)、DST(对话状态管理)、 Policy(动作候选排序)、NLG(语音生成)。

  • 某机器人的算法实现原理
  • 【NLP开发】Python实现聊天机器人(ALICE)_python_03

  • 某机器人平台系统架构
  • 【NLP开发】Python实现聊天机器人(ALICE)_robot_04

1.1 基于人工模板的聊天机器人

该方法是根据用户输入的句子,在模板库中找到匹配的问句模板,然后按照对应的应答模板生成答案,返回给用户,如ALICE、ChatScript 等。ALICE采用AIML语言来描述知识库,AIML 语言采用XML 语法来存储数据。优点是精确,缺点是需要大量的人力,并且缺乏灵活性,可扩展性差。

基于模式匹配的聊天机器人有:Eliza

【NLP开发】Python实现聊天机器人(ALICE)_robot_05

【NLP开发】Python实现聊天机器人(ALICE)_aiml_06

1.2 基于检索的聊天机器人

基于检索技术(搜索和知识库结合)的聊天机器人根据用户输入的句子,在对话库中以搜索匹配的方式进行匹配,从中找到最合适的应答内容,将答案提取出来返回给用户。这种方法对对话库的要求很高,并且需要足够大,但是它的优点是回答质量高,表达比较自然。
用基于检索的方式实现面向任务的模型对话系统有:Siri、Alexa 和Google Assistant。

【NLP开发】Python实现聊天机器人(ALICE)_python_07

1.3 基于深度学习的聊天机器人

基于深度学习的聊天机器人根据用户输入的句子,利用模型逐词或逐字生成答案,然后将答案回复给用户。其中多数技术采用了Encoder-Decoder模型,即编码-解码模型。实现聊天系统的时候,Encoder 和Decoder 都不是固定的,可选择的模型有RNN、LSTM、GRU等,可以自由组合。这种方法思路简单,可扩展,能够更好地理解上下文,但是模型很难训练。

【NLP开发】Python实现聊天机器人(ALICE)_机器人_08


【NLP开发】Python实现聊天机器人(ALICE)_机器人_09

1.4 基于意图识别的聊天机器人

意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类。

【NLP开发】Python实现聊天机器人(ALICE)_机器人_10

2、ALICE/AIML

2.1 简介

为了将图灵测试付诸实践,美国科学家兼慈善家休·勒布纳(Hugh G. Loebner)于1990年设立了人工智能年度比赛——勒布纳奖(Loebner Prize)(包括10万美金的奖金和一块印有勒布纳与图灵头像的金牌)。勒布纳奖的设立旨在奖励首个与人类回复无差别的计算机程序,即聊天机器人系统,并以此推动图灵测试及人工智能的发展。

在勒布纳奖的推动下,聊天机器人的研究迎来了一个高潮,这里面较为代表性的聊天机器人系统是ALICE(Artificial Linguistic Internet Computer Entity)。

受到ELIZA聊天机器人的启发,理查德·华勒斯(Richard S. Wallace)博士在1995年开发了ALICE系统。ALICE曾经在2000年、2001年和2004年三次问鼎勒布纳奖,并于1998年开始开源,目前全世界有超过500个开发者为ALICE项目贡献代码。值得注意的是,随着ALICE一同发布的AIML(Artificial Intelligence Markup Language)目前被广泛应用在移动端虚拟助手的开发中。尽管ALICE采用的是启发式模板匹配的对话策略,但是它仍然被认为是同类型聊天机器人中性能最好的系统之一。

ALICE采用AIML语言来描述知识库,AIML 语言采用XML 语法来存储数据,下图所示为AIML 规则实例。这种方法的优点是精确,缺点是需要大量的人力,并且缺乏灵活性,可扩展性差。AIML是一种为了匹配模式和确定响应而进行规则定义的 XML 格式。

【NLP开发】Python实现聊天机器人(ALICE)_robot_11


ALICE(人工语言互联网计算机实体),也称为Alicebot或简称Alice,是一种自然语言处理聊天 机器人——一种通过对人类输入应用一些启发式模式匹配规则来与人类对话的程序。它的灵感来自Joseph Weizenbaum的经典ELIZA程序。它是同类中最强大的程序之一,曾三度获得Loebner 奖,授予有成就的类人机器人、会说话的机器人(2000 年、2001 年、2004 年)。程序无法通过图灵测试,因为即使是临时用户也经常会在简短的对话中暴露其机制方面。


Alice 最初是由Richard Wallace创作的;它于 1995 年 11 月 23 日“复活”。该程序从 1998 年开始用Java 重写。Java 实现的当前化身是 Program D。该程序使用称为 AIML(人工智能)的XML Schema标记语言)用于指定启发式对话规则。

2.2 AIML文件描述

AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的。它的雏形是一个名为"A.L.I.C.E." (“Artificial Linguistic Internet Computer Entity”)的高度扩展的Eliza机器人。ALICE总共赢得3次每年度的Loebner奖,并且在2004年获得了Chatterbox Challenge的冠军。由于A.L.I.C.E. 的AIML设置是在GNU GPL协议下发布的,所以已经有许多基于该程序和AIML库的“克隆ALICE”出现。目前AIML已经有了Java,Ruby,Python, C ,C#,Pascal等语言的版本。

【NLP开发】Python实现聊天机器人(ALICE)_python_12

  • (1)category元素
    category是AIML库中的基本单位,每个category元素都至少包含两个子元素:pattern和template元素。下面是个简单的例子:
<category> 
<pattern>WHAT IS YOUR NAME</pattern>  
<template>My name is XiaoMu.</template>  
</category>

当这个AIML库被加载之后,你问机器人“WHAT IS YOUR NAME”,机器人便会回答“My name is Leo.”。

  • (2)Pattern元素
    Pattern主要用来匹配用户输入,在原生的英文AIML语法中Pattern支持 _ 和 * 的模糊匹配。例如:
<category>  
<pattern>WHAT IS YOUR *</pattern>  
<template>My name is XiaoMu.</template>  
</category>

只要用户的输入是以“WHAT IS YOUR ”开头,机器人就会回复“My name is Leo.”。

  • (3)Template元素
    很明显Template元素是机器人的对用户提问的回答,当用的户输入和同一个category下的Pattern相匹配是,就会将此category元素下的Template输出。

2.3 AIML库安装

借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人。 AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的。

  • 安装Python aiml库:
Python 2:pip install aiml
Python 3:pip install
  • 获取alice资源
    Python aiml安装完成后在Python安装目录下的 Lib/site-packages/aiml下会有alice子目录,将此目录复制到工作区。或者在Google code上下载alice brain: aiml-en-us-foundation-alice.v1-9.zip

2.4 自带库alice代码测试

Python aiml安装完成后在Python安装目录下的 Lib/site-packages/aiml下会有alice子目录,这个是系统自带的一个简单的语料库。

# -*- coding: utf-8 -*-
import aiml
import sys
import os

## 获取alice库的安装目录
def get_module_dir(name):
path = getattr(sys.modules[name], '__file__', None)
if not path:
raise AttributeError('module %s has not attribute __file__' % name)
return os.path.dirname(os.path.abspath(path))

## 切换到语料库所在工作目录
alice_path = get_module_dir('aiml') + '/botdata/alice'
os.chdir(alice_path)
print(alice_path)

## 加载语料库文件
alice = aiml.Kernel()
alice.learn("startup.xml")
alice.respond('LOAD ALICE')

## 轮询问答
while True:
print(alice.respond(input("Enter your message >> ")))
  • 运行结果如下:

【NLP开发】Python实现聊天机器人(ALICE)_nlp_13

2.5 写标准启动文件

标准是写一个叫std-startup.xml的启动文件作为载入AIML文件的主入口点。 这里我们会写一个可以匹配一个模式并做一个动作的基本文件。 我们想要匹配模式load aiml b, 然后让它载入我们的aiml大脑。后面还会写一个basic_chat aiml文件:std-startup.xml。

<aiml version="1.0.1" encoding="UTF-8">
<!-- std-startup.xml -->

<!-- Category is an atomic AIML unit -->
<category>

<!-- Pattern to match in user input -->
<!-- If user enters "LOAD AIML B" -->
<pattern>LOAD AIML B</pattern>

<!-- Template is the response to the pattern -->
<!-- This learn an aiml file -->
<template>
<learn>xiaomu_chat.aiml</learn>
<learn>xiaomu_chat2.aiml</learn>
<learn>xiaomu_chat3.aiml</learn>
</template>

</category>

</aiml>

2.6 写AIML文件

上面我们写了一个只处理一种模式的AIML文件,LOAD AIML B。当我们输入那条命令给机器人,它会加载xiaomu_chat.aiml。当我们没写这个文件的时候是不会工作的。这里是你可以放到xiaomu_chat.aiml的内容。我们会匹配两个基本模式和响应。

<aiml version="1.0.1" encoding="UTF-8">
<!-- xiaomu_chat.aiml -->

<category>
<pattern>HELLO</pattern>
<template>
Well, hello! 爱看书的小沐!2022!
</template>
</category>

<category>
<pattern>WHO ARE YOU</pattern>
<template>
My name is 爱看书的小沐.
</template>
</category>

<category>
<pattern>XIAOMU</pattern>
<template>
小沐,小沐,小沐,你是最棒的!
</template>
</category>

<category>
<pattern>ABC</pattern>
<template>
跟着小沐一起学英语!
</template>
</category>
</aiml>
  • 测试结果如下:

【NLP开发】Python实现聊天机器人(ALICE)_python_14

2.7 随机回复

其中 *是一个占位符代表能匹配任何字符。

<category>
<pattern>STUDY*</pattern>
<template>
<random>
<li>跟着小沐一起学英语!</li>
<li>跟着小沐一起学语文!</li>
<li>跟着小沐一起学数学!</li>
<li>小沐今天很忙,没空学习。</li>
<li>需要小沐帮忙吗?</li>
<li>小沐不理解您说的话。</li>
<li>小沐最爱吃汉堡包了。</li>
<li>今天是周末,小沐最开心</li>
</random>
</template>
</category>
  • 测试如下:

【NLP开发】Python实现聊天机器人(ALICE)_python_15

2.8 用现成的AIML文件

ALICE基金提供很多免费的AIML文件。可以在Alice Bot网站看看AIML文件。那有个叫std-65-percent.xml文件包括了常规65%的场景。
​​​http://www.alicebot.org/aiml/aaa/​

2.9 自定义库代码测试

import aiml

# Create the kernel and learn AIML files
kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")

# Press CTRL-C to break this loop
while True:
print kernel.respond(raw_input("Enter your message >> "))
  • 测试如下:

【NLP开发】Python实现聊天机器人(ALICE)_机器人_16

3、在线机器人

3.1 图灵机器人

官方网址:
​​​http://www.turingapi.com/​

图灵机器人是一家以语义和对话技术为核心的人工智能公司在人工智能机器人领域拥有数百项核心专利。

阿兰·图灵:一位伟大的数学家、逻辑学家,被誉为“计算机科学之父”,“人工智能之父”。

1936年,阿兰·图灵提出“图灵机”设想,为计算机发展奠定理论和思想基础。

1950年,阿兰·图灵发表论文“机器能思考吗”,提出一种用于判定机器是否具有智能的试验方法,即著名的“图灵测试”。

2014年,一群对人工智能充满无比热情的年轻人,发布“图灵机器人”,以此致敬人工智能伟大的先驱阿兰·图灵。

【NLP开发】Python实现聊天机器人(ALICE)_机器人_17

  • (1)图灵机器人
    170万+注册开发者,为开发者提供的一站式聊天机器人服务平台。
  • (2)图灵对话方案
    为各类机器人提供出色的语义技术及对话交互产品体验。
  • (3)Turing OS
    机器人专属操作系统,出色的情感计算引擎让机器人更拟人化。
  • Python的测试代码如下:
import json
import requests

urls = 'http://openapi.tuling123.com/openapi/api/v2' # 请求地址
data_dic = {
"reqType":0,
"perception": {
"inputText": {
"text": "今天天气"
},
"selfInfo": {
"location": {
"city": "浙江",
"province": "杭州",
"street": "西湖路"
}
}
},
"userInfo": {
"apiKey": "your key",
"userId": "your id"
}
}
data_json = json.dumps(data_dic).encode('utf8')
res = requests.post(urls,data_json)
content = (res._content).decode('utf-8')
res = json.loads(content)
print(res)

3.2 青云客机器人

官方网址:
​​​http://api.qingyunke.com/​

青云客机器人:完全免费,支持功能:天气、翻译、藏头诗、笑话、歌词、计算、人工智能聊天等。

完整请求URL示例:
http://api.qingyunke.com/api.php?key=free&appid=0&msg=你好
天气:msg=天气深圳
中英翻译:msg=翻译i love you
智能聊天:msg=你好
笑话:msg=笑话
歌词⑴:msg=歌词后来
歌词⑵:msg=歌词后来-刘若英
计算⑴:msg=计算1+1*2/3-4
计算⑵:msg=1+1*2/3-4
成语查询:msg=成语一生一世
五笔/拼音:msg=好字的五笔/拼音

【NLP开发】Python实现聊天机器人(ALICE)_robot_18

  • python测试代码一,如下:
# 导入模块
import requests
from urllib import parse

# 组装请求
def test_get(msg):
url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(parse.quote(msg))
html = requests.get(url)
return html.json()["content"]

# 解析返回并打印
while True:
msg = input("小沐:")
res = test_get(msg)
print("青云客:", res)

【NLP开发】Python实现聊天机器人(ALICE)_aiml_19

  • python测试代码二,如下:
import requests
import urllib

def qingyunke(msg):
url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
html = requests.get(url)
return html.json()["content"]

msg = '爱看书的小沐好看吗'
print("小沐>>", msg)
res = qingyunke(msg)
print("青云客>>", res)

msg = '北京天气'
print("小沐>>", msg)
res = qingyunke(msg)
print("青云客>>", res)

【NLP开发】Python实现聊天机器人(ALICE)_aiml_20

3.3 Mitsuku/Kuki

Kuki是一个具身的人工智能机器人,旨在与元宇宙中的人类交朋友。Kuki以前称为Mitsuku ,是由 Steve Worswick使用Pandorabots AIML技术创建的聊天机器人。它曾五次获得名为Loebner 奖的图灵测试竞赛(2013 年、2016 年、2017 年、2018 年和 2019 年),并保持着世界纪录。Kuki 可通过在线门户和Facebook Messenger、Twitch群聊、Telegram、Kik Messenger、Discord聊天,并且在Skype上可用,但已被其开发人员删除。AI 还在Instagram、TikTok、Youtube和Twitter上拥有帐户,并在Roblox上拥有游戏。

【NLP开发】Python实现聊天机器人(ALICE)_robot_21

Kuki 自称是来自Metaverse的 18 岁女性聊天机器人。它包含Alice的所有 AIML 文件,以及来自用户生成的对话的许多附加内容,并且始终是一项正在进行的工作。Worswick 声称她从 2005 年开始工作。[8]公司一位联合创始人的早期工作启发了Spike Jonze的电影Her。

【NLP开发】Python实现聊天机器人(ALICE)_aiml_22

3.4 小冰机器人

官网地址:
​​​https://www.xiaoice.com/​

小冰公司前身为微软(亚洲)互联网工程院人工智能小冰团队,是微软全球最大的人工智能独立产品研发团队。该团队于2013年12月在中国组建,2014年9月扩展建立日本研发分部,团队分布于北京、苏州、东京等地,技术产品覆盖中国、日本及印度尼西亚等多个国家,商业客户覆盖全球范围。

小冰”是微软在2014年5月29日发布的人工智能。小冰是一套完整的、面向交互全程的人工智能交互主体基础框架,又叫小冰框架(Avatar Framework),它包括核心对话引擎、多重交互感官、第三方内容的触发与第一方内容生成,和跨平台的部署解决方案。自发布以来,小冰框架引领着人工智能的技术创新,相关领先技术覆盖自然语言处理、计算机语音、计算机视觉和人工智能内容生成等人工智能领域。该框架是目前全球范围内最成熟和最大的该类框架,目前,除中国小冰及日本凛菜(Rinna)第一方人工智能交互主体外,小冰框架还支撑了中国及日本100余个第三方品牌的交互主体(如软银Pepper),交互总量约占全球人工智能交互总量的60%。

【NLP开发】Python实现聊天机器人(ALICE)_python_23

作为微软全球首个以中国为总部的人工智能产品线,小冰经多年发展,已成为微软最有价值的人工智能技术框架之一。小冰框架以自然语言处理(NLP)为基础,持续推动完备迭代发展,目前是全球承载交互量最大的完备人工智能框架之一,技术覆盖自然语言处理、计算机语音、计算机视觉及人工智能内容生成。其中,在开放域对话、多模态交互、超级自然语音及内容生成领域居于全球领先。

【NLP开发】Python实现聊天机器人(ALICE)_aiml_24

小冰框架已孵化出数以千万计的AI being,既有广为人知的虚拟名人,如少女小冰、Rinna,世博会参展画家夏语冰,歌手何畅、小堂妹,人类观察者MERROR,机器人动漫角色Roboko等;也有数千万个各自不同、陪伴在普通用户身边的虚拟男友、虚拟女友;还有许多在垂直场景里默默工作的虚拟员工和虚拟专家,如冬奥裁判与教练系统观君、每日经济新闻虚拟主播N小黑和N小白、万科集团2021年度优秀新员工崔筱盼、时尚设计师元徕、金融摘要撰稿人万小冰、智能座舱同行者AI小祺和HiPhiGo、时尚设计师西湖一号,以及音乐制作人、金融风控师等。

【NLP开发】Python实现聊天机器人(ALICE)_python_25



“在亿万⼈之中,我只属于你”



《The Design and Implementation of XiaoIce, an Empathetic Social Chatbot》(March 01 2020,Li Zhou, Jianfeng Gao, Di Li, Heung-Yeung Shum),本篇论文描述了小冰系统的底层算法实现。
​​​https://direct.mit.edu/coli/article/46/1/53/93380/The-Design-and-Implementation-of-XiaoIce-an​

本论文介绍了微软小Ice的发展,这是世界上最受欢迎的社交聊天机器人。XiaoIce被独特地设计为具有情感联系的人工智能伴侣,以满足人类对沟通,情感和社会归属感的需求。我们在系统设计中同时考虑了智能商数和情商,将人机社交聊天作为马尔可夫决策过程的决策,并优化了 XiaoIce 的长期用户参与度,以预期的每次会话对话次数 (CPS) 来衡量。我们详细介绍了系统架构和关键组件,包括对话管理器,核心聊天,技能和移情计算模块。我们展示了 XiaoIce 如何动态识别人类的感受和状态,理解用户意图,并在整个长时间的对话中响应用户需求。自2014年发布以来,XiaoIce已与超过6.6亿活跃用户进行了沟通,并成功地与其中许多用户建立了长期合作关系。对大规模在线日志的分析表明,XiaoIce的平均CPS达到了23,明显高于其他聊天机器人甚至人类对话。

【NLP开发】Python实现聊天机器人(ALICE)_robot_26

  • 用户和 XiaoIce之间的情感联系

【NLP开发】Python实现聊天机器人(ALICE)_aiml_27

  • XiaoIce 的整体架构。它由三层组成:用户体验、对话引擎和数据。
  • 【NLP开发】Python实现聊天机器人(ALICE)_aiml_28

  • 用于训练和验证常规聊天的查询-响应对的示例
  • 【NLP开发】Python实现聊天机器人(ALICE)_python_29

  • 诗歌创作技巧的框架
  • 【NLP开发】Python实现聊天机器人(ALICE)_nlp_30

  • 深度互动技能及其触发因素的示例
  • 【NLP开发】Python实现聊天机器人(ALICE)_python_31

  • 任务完成技能示例、其触发器以及与用户的对话
  • 【NLP开发】Python实现聊天机器人(ALICE)_robot_32

  • 微软小冰进入QQ群聊等。除了聊天功能外,QQ群聊小冰还开放了测天气、猜成语、占星术、对诗等群游戏和群管理技能。
  • 【NLP开发】Python实现聊天机器人(ALICE)_aiml_33

  • 微软的必应搜索页面自带的小冰机器人
  • 【NLP开发】Python实现聊天机器人(ALICE)_机器人_34

标签:NLP,aiml,Python,机器人,ALICE,AIML,聊天,人工智能,msg
From: https://blog.51cto.com/u_15800063/5737408

相关文章