nlp开发python实现聊天机器人(alice)(代码片段)

author author     2022-12-04     299

关键词:

1、简介

简单来说,聊天机器人是一种可以模拟和处理人类会话(无论是书面还是口头会话)的计算机程序,让人能够与数字设备交互,就像和真人交流一样。不同聊天机器人的复杂度各不相同,简单如通过单行响应回答简单查询的基本程序,复杂则如数字助手,在收集和处理信息的过程中不断学习和进化,不断提高个性化水平。 当前聊天机器人用到的技术:大家常说人工智能的三大要素,包括数据、算法和算力。而在聊天机器人的技术体系下,最关键的三个因素应该是人工、数据和算法。在现阶段,人工是大于数据,更大于算法的。

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

  • 某机器人的算法实现原理
  • 某机器人平台系统架构

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

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

1.2 基于检索的聊天机器人

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

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

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

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

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

2、ALICE/AIML

2.1 简介

为了将图灵测试付诸实践,美国科学家兼慈善家休·勒布纳(Hugh G. Loebner)于1990年设立了人工智能年度比赛——勒布纳奖(Loebner Prize)(包括10万美金的奖金和一块印有勒布纳与图灵头像的金牌)。勒布纳奖的设立旨在奖励首个与人类回复无差别的计算机程序,即聊天机器人系统,并以此推动图灵测试及人工智能的发展。 <font color= grey> 在勒布纳奖的推动下,聊天机器人的研究迎来了一个高潮,这里面较为代表性的聊天机器人系统是ALICE(Artificial Linguistic Internet Computer Entity)。 <font color= blue> 受到ELIZA聊天机器人的启发,理查德·华勒斯(Richard S. Wallace)博士在1995年开发了ALICE系统。ALICE曾经在2000年、2001年和2004年三次问鼎勒布纳奖,并于1998年开始开源,目前全世界有超过500个开发者为ALICE项目贡献代码。值得注意的是,随着ALICE一同发布的AIML(Artificial Intelligence Markup Language)目前被广泛应用在移动端虚拟助手的开发中。尽管ALICE采用的是启发式模板匹配的对话策略,但是它仍然被认为是同类型聊天机器人中性能最好的系统之一。 <font color= orange> ALICE采用AIML语言来描述知识库,AIML 语言采用XML 语法来存储数据,下图所示为AIML 规则实例。这种方法的优点是精确,缺点是需要大量的人力,并且缺乏灵活性,可扩展性差。AIML是一种为了匹配模式和确定响应而进行规则定义的 XML 格式。

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

  • (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 python-aiml
  • 获取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 >> ")))
  • 运行结果如下:

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>
  • 测试结果如下:

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>
  • 测试如下:

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 >> "))
  • 测试如下:

3、在线机器人

3.1 图灵机器人

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

<font color=blue> 阿兰·图灵:一位伟大的数学家、逻辑学家,被誉为“计算机科学之父”,“人工智能之父”。 1936年,阿兰·图灵提出“图灵机”设想,为计算机发展奠定理论和思想基础。 1950年,阿兰·图灵发表论文“机器能思考吗”,提出一种用于判定机器是否具有智能的试验方法,即著名的“图灵测试”。 2014年,一群对人工智能充满无比热情的年轻人,发布“图灵机器人”,以此致敬人工智能伟大的先驱阿兰·图灵。

  • (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=好字的五笔/拼音

  • 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)

  • 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)

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上拥有游戏。

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

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O??? 如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡) 感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

nlp开发python实现聊天机器人(微软azure机器人服务)(代码片段)

1、简介什么是BotFrameworkSDK?MicrosoftBotFramework和Azure机器人服务是库、工具和服务的集合,可用于生成、测试、部署和管理智能机器人。BotFramework包括一个模块化且可扩展的SDK,用于生成机器人并连接到AI服务。借助此框架,开发... 查看详情

自然语言处理(nlp)聊天机器人模块实现(代码片段)

【自然语言处理(NLP)】聊天机器人模块实现(文章目录)前言(一)、任务描述使用PaddleNLP内置的生成式API的功能和用法,并使用PaddleNLP内置的plato-mini模型和配置的生成式API实现一个简单的闲聊机器人。(二)、环境配置本示例基于... 查看详情

聊天机器人(chatbot)终极指南:自然语言处理(nlp)和深度机器学习(deepmachinelearning)(代码片段)

...(NLP)以及如何将NLP和深度学习(DeepLearning)应用到聊天机器人(Chatbots)方面的最好的资料。时不时地我会发现一个出色的资源,因此我很快就开始把这些资源编制成列表。不久,我就发现自己开始与bot开发人员和bot社区的其... 查看详情

中文nlp笔记:13用keras实现一个简易聊天机器人

参考技术A第一步,引入需要的包:第二步,定义模型超参数、迭代次数、语料路径:第三步,把语料向量化:第四步,LSTM_Seq2Seq模型定义、训练和保存:第五步,Seq2Seq的Encoder操作:第六步,把索引和分词转成序列:第七步,定... 查看详情

基于pytorch热门深度学习框架从零开发nlp聊天机器人

百度云盘 NLP要学习和应用的好,首先是心理学的基础根基要打牢。必学科目:1.普通心理学,关于脑神经运作的基础和心理状态的基本分类。细分要研究认知心理学和情感管理,再细分,要多学习逻辑思维。2.发展心理学,... 查看详情

自动聊天机器人项目班[一门课搞定聊天机器人]

打造传统NLP聊天机器人第1课聊天机器人的基础模型与综述知识点1:行业与业界综述实战项目:最简单的Rule-Base聊天机器人第2课NLP基础及扫盲知识点1:NLP基本算法实战项目:经典NLP问题与解法第3课用基础机器学习方法制作聊天... 查看详情

用aiml开发人工智能聊天机器人

借助Python的AIML包,我们很容易实现人工智能聊天机器人。AIML指的是ArtificialIntelligenceMarkupLanguage(人工智能标记语言),它不过是简单的可XML(扩展标记语言)形式。本文的示例代码将带你初步领略如何借助Python创建属于你的人... 查看详情

想聊天?自己搭建个聊天机器人吧!

 课程简介 “手把手带你学NLP”是基于飞桨PaddleNLP的系列实战项目。本系列由百度多位资深工程师精心打造,提供了从词向量、预训练语言模型,到信息抽取、情感分析、文本问答、结构化数据问答、文本翻译、机器同... 查看详情

当程序员的一个人无聊时,甚至用python开发出机器人看他们聊天

...员的一个人独孤的时候,甚至可以用Python开发出两个机器人看他们聊天当你无聊的时候,可能会刷一下手机看一下新闻,看看电视剧,发发呆。但是当程序员无聊起来的时候,甚至可以用Python开发两个机器人&#... 查看详情

有哪些api接口可以用来做聊天机器人?

有哪些API接口可以用来做聊天机器人?1.海知智能:1.海知智能第三方技能插件开放平台概述·ruyi.ai开发者文档·看云docs.ruyi.ai不光能聊天,还可以在网站里内置技能,实现(翻译,成语接龙等)数十项功能2.天行机器人:白嫖用户... 查看详情

tensorflow打造聊天机器人

Tensorflow聊天机器人聊天机器人也叫做对话系统,是一个热门领域。微软、facebook、苹果、google、微信、slack都在上面做了大的投入,这是一波新的试图改变人和服务交流的创业浪潮。例如operator x.ai,chatfuel,以及一些库例如botkit... 查看详情

nlp开发python实现中文英文分词(代码片段)

1、简介分词是自然语言理解(NLP)的重要步骤。分词就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作。<fontcolor=blue><b>(1)中文分词⼯具</b></font>Hanlp:https://git... 查看详情

python使用图灵机器人实现微信聊天功能(代码片段)

  首先需要去图灵官网创建一个属于自己的机器人然后得到apikey。一、自动与指定好友聊天#-*-coding:utf-8-*-"""Createdat2019-3-2611:50:49"""fromwxpyimportBot,Tuling,embed,ensure_onebot=Bot()my_friend=ensure_one(bot.search(‘张三‘))#想和机器人聊天的好... 查看详情

题目:用python3实现微信聊天机器人(代码片段)

做微信聊天机器人,实现步骤:获取微信的使用权,即python脚本能控制微信收发信息。python脚本收到聊天信息后,要对该信息进行处理,返回机器人的回应信息。一二两步要用到wxpy库里的各种组件来收发信息&... 查看详情

使用python实现一个简单的智能聊天机器人(代码片段)

...明最近两天需要做一个python的小程序,就是实现人与智能机器人(智能对话接口)的对话功能,目前刚刚测试了一下可以实现,就是能够实现个人与机器的智能对话(语音交流)。总体的思路大家可以设想一下,如果要... 查看详情

有开发聊天机器人的教程吗? [关闭]

】有开发聊天机器人的教程吗?[关闭]【英文标题】:Anytutorialsfordevelopingchatbots?[closed]【发布时间】:2012-03-3104:42:10【问题描述】:作为一名工科学生,我想使用python制作一个聊天机器人。因此,我进行了很多搜索,但无法真正... 查看详情

基于python以及aiuiwebsocket,wechatpyapi实现的微信聊天机器人(代码片段)

基于python以及AIUIWebSocket,WeChatPYAPI实现的微信聊天机器人做此文的目的首先是学习Markdown的用法哈哈哈哈,其实也是记录自己学习的一个过程。以后我也会将自己在图像处理,计算机视觉的所学以及实践实战的process上... 查看详情

python快速搭建自动回复微信公众号(代码片段)

...信公众号在之前的一篇文章Python利用AIML和Tornado搭建聊天机器人微信订阅号中用aiml实现了一个简单的英文聊天机器人订阅号。但是只能处理英文消息,现在用图灵机器人来实现一个中文的聊天机器人订阅号。这里主要介绍如... 查看详情