【小沐学NLP】Python实现聊天机器人(ELIZA)

38 篇文章 5 订阅
🍺NLP开发系列相关文章编写如下🍺:
1🎈【小沐学NLP】Python实现词云图🎈
2🎈【小沐学NLP】Python实现图片文字识别🎈
3🎈【小沐学NLP】Python实现中文、英文分词🎈
4🎈【小沐学NLP】Python实现聊天机器人(ELIZA))🎈
5🎈【小沐学NLP】Python实现聊天机器人(ALICE)🎈
6🎈【小沐学NLP】Python实现聊天机器人(微软Azure)🎈
7🎈【小沐学NLP】Python实现聊天机器人(微软小冰)🎈
8🎈【小沐学NLP】Python实现聊天机器人(钉钉机器人)🎈
9🎈【小沐学NLP】Python实现聊天机器人(微信机器人)🎈
10🎈【小沐学NLP】Python实现聊天机器人(Selenium、七嘴八舌)🎈
11🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,代码示例)🎈
12🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成前端页面)🎈
13🎈【小沐学NLP】Python实现聊天机器人(ChatterBot,集成web服务)🎈

1、简介

聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。聊天机器人是虚拟助理(如Google智能助理)的一部分,可以与许多组织的应用程序,网站以及即时消息平台(Facebook Messenger)连接。非助理应用程序包括娱乐目的的聊天室,研究和特定产品促销,社交机器人。

聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序。“Eliza”和 “Parry”是早期非常著名的聊天机器人。它试图建立这样的程序:至少暂时性地让一个真正的人类认为他们正在和另一个人聊天。
在这里插入图片描述

早期经典的聊天机器人是 ELIZA (1966)与 PARRY (1972)。近期值得注意的则包括 A.L.I.C.E.,Jabberwacky,以及 D.U.D.E。虽然 ELIZA 和 PARRY 仅仅用于模拟笔谈,现在许多聊天机器人纳入游戏及网络搜寻的功能。1984年,《警察的胡子造了一半》(The Policeman’s Beard Is Half Constructed)出版,据称作者是聊天机器人“瑞克特”(Racter)。

相关的人工智能领域是自然语言处理。通常“弱人工智能”(Weak AI) 领域使用专门的软件或编程语言以完成特定的功能。例如 A.L.I.C.E.使用一种叫做 AIML 的标记式语言,适用于谈话代理的功能,并且已被各类开发人员采用,他们的产品叫做爱丽丝机器人(Alicebots)。不过 A.L.I.C.E.仍是纯粹运用类型配对的技巧,缺乏思考能力, 跟1966年的 ELIZA 并无不同。“强人工智能”(strong AI) 则不同, 必须有智慧和逻辑推理的能力。

在这里插入图片描述

  1. 基于人工模板的聊天机器人。
  2. 基于检索的聊天机器人。
  3. 基于深度学习的聊天机器人。

2、ELIZA

伊莉莎(Eliza)是最早的与人对话程序,是由系统工程师约瑟夫·魏泽堡和精神病学家肯尼斯·科尔比在20 世纪60 年代共同编写的。是世界上第一个真正意义上的聊天机器人。他们将程序命名为伊莉莎,灵感来自于英国著名戏剧家肖伯纳的戏剧《偶像》中的角色,它能够使计算机与人用英语谈话。在自然语言理解技术尚未真正取得突破性进展时,这是一个令人费解的现象。

在这里插入图片描述

ELIZA是第一个把英语作为输入和输出的程序,这是他的一大特性。ELIZA最初的开发者,Eliza 的名字源于爱尔兰剧作家萧伯纳的戏剧作品《卖花女》中的角色,剧中出身贫寒的卖花女 Eliza 通过学习与上流社会沟通的方式,变成大使馆舞会上人人艳羡的“匈牙利王家公主”。作为世界上第一个聊天机器人,Eliza 被其作者赋予了充满戏剧性的内涵。

ELIZA是一个被设计为模拟精神治疗医师的程序,由麻省理工大学研究员Joseph Weizenbaum设计。程序实际上提供了一些模拟反应来回答用户提出的问题。它向展示向人们展示了,一个足够厉害的程序应该是智能的。仅用 200 行代码就实现了这一过程,使 Eliza 能够让人产生被机器聆听、理解的错觉。

Weizenbaum编写Eliza使用的是Lisp语言,一种比较难懂和小众的程序设计语言。不过他做了非常详尽的注释 ,这使得将Eliza移植到别的平台和语言成了相当容易的一件事。

在这里插入图片描述

>>1966年1月,Joseph Weizenbaum教授,写出了一篇关于Eliza的论文。在 1964 年至 1966 年间,麻省理工学院人工智能实验室的德裔美国计算机科学家约瑟夫·维森鲍姆(Joseph Weizenbaum)开发了历史上第一个聊天机器人 —— Eliza。
>> 通过 Eliza 的实验,Joseph Weizenbaum开始质疑阿兰·图灵(Alan Turing)在1950 年提出的关于人工智能的想法。图灵在他的题为“ 计算机械与智能 ”的论文中提出,如果一台计算机可以通过文本与人类进行令人信服的对话,则可以认为它是智能的。这一思想也就是著名的图灵测试的基础。
>> 1976 年,Joseph Weizenbaum发表了《计算能力与人为原因:从判断到计算》 ,该书对人们为何愿意相信“一台简单的机器也许能够理解复杂的人类情感” 进行了深刻的剖析。尽管ELIZA的实现技术仅为关键词匹配及人工编写的回复规则,但魏泽鲍姆本人对ELIZA的表现感到吃惊,随后撰写了《Computer Power and Human Reason》这本书,表达他对人工智能的特殊情感。

Joseph Weizenbaum: 解释就是掩饰,越抹越黑。

Eliza的计算机对话模拟程序。最为著名的一段对话脚本随后被发布在1966年元月期的ACM通讯杂志上。这段发生在计算机程序与一个年青女病人之间的对话记录如下(程序的回应使用大写):

在这里插入图片描述

Men are all alike.
IN WHAT WAY
They’re always bugging us about something or other.
CAN YOU THINK OF A SPECIFIC EXAMPLE
Well, my boyfriend made me come here.
YOU BOYFRIEND MADE YOU COME HERE
He says I’m depressed much of the time.
I AM SORRY TO HEAR YOU ARE DEPRESSED
It’s true. I am unhappy.
DO YOU THINK COMING HERE WILL HELP YOU NOT TO BE UNHAPPY
I need some help, that much seems certain.
WHAT WOULD IT MEAN TO YOU IF YOU GOT SOME HELP
Perhaps I could learn to get along with my mother.
TELL ME MORE ABOUT YOUR FAMILY
My mother takes care of me.
WHO ELSE IN YOU FAMILY TAKES CARE OF YOU
My Father.
YOUR FATHER
You are like my father in some ways.
WHAT RESEMBLANCE DO YOU SEE
You are not very aggressive but I think you don’t want me to notice that.
WHAT MAKES YOU THINK I AM NOT VERY AGGRESSIVE
You don’t argue with me.
WHY DO YOU THINK I DON’T ARGUE WITH YOU
You are afraid of me.
DOES IT PLEASE YOU TO BELIEVE I AM AFRAID OF YOU
My father is afraid of everybody.
WHAT ELSE COMES TO MIND WHEN YOU THINK OF YOUR FATHER
Bullies.
DOES THAT HAVE ANYTHING TO DO WITH THE FACT THAT YOUR BOYFRIEND MADE YOU COME HERE
参考文献: Weizenbaum J. ELIZA—a computer program for the study of natural language communication between man and machine[J]. Communications of the ACM, 1966, 9(1): 36-45.

https://web.stanford.edu/class/linguist238/p36-weizenabaum.pdf

2.1 Eliza Test(java)

http://chayden.net/eliza/Eliza.html
在这里插入图片描述

2.2 wadetb/eliza(python)

https://github.com/wadetb/eliza
Eliza chatbot in Python:Loosely based on Charles Hayden’s version in Java, at http://chayden.net/eliza/Eliza.html.
在这里插入图片描述

import unittest
import eliza

class ElizaTest(unittest.TestCase):
    def test_decomp_1(self):
        el = eliza.Eliza()
        self.assertEqual([], el._match_decomp(['a'], ['a']))
        self.assertEqual([], el._match_decomp(['a', 'b'], ['a', 'b']))
        
    def test_response_2(self):
        el = eliza.Eliza()
        el.load('doctor.txt')
        self.assertEqual(el.initial(), 'How do you do.  Please tell me your problem.')
        self.assertIn(el.respond('Hello'), [
            'How do you do. Please state your problem.',
            'Hi. What seems to be your problem ?'])
        self.assertEqual(el.final(), 'Goodbye.  Thank you for talking to me.')


if __name__ == '__main__':
    unittest.main()

运行结果如下(增加了部分规则):
在这里插入图片描述

2.3 eliza-py(python)

https://github.com/rdimaio/eliza-py
在这里插入图片描述

运行结果如下(增加了部分规则):
在这里插入图片描述

2.4 nltk.chat.eliza(python)

https://www.nltk.org/_modules/nltk/chat/eliza.html#demo

在这里插入图片描述

2.5 ELIZA-ChatterBot(python)

https://github.com/graylu21/ELIZA-ChatterBot

在这里插入图片描述
在这里插入图片描述

3、在线机器人

3.1 青云客机器人

青云客智能机器人api是由青云客网络免费提供的一个智能聊天api 接口,技术人员可直接调用接口实现有趣的人机对话。不用注册,不用申请key,拿来就用!哈哈!
在这里插入图片描述

  • 测试代码如下:
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_list = ['小沐好看吗?', '小沐经常做什么?', '爱看书的小沐来了!']

for msg in msg_list:
    print("小沐>> ", msg)
    res = qingyunke(msg)
    print("青云客>> ", res)
  • 测试结果如下:
    在这里插入图片描述

3.2 思知机器人

思知(OwnThink)AI机器人开放平台拥有自定义知识库、语义理解、知识图谱、对话场景等功能,机器人采用了基于知识图谱的语义感知与理解。
在这里插入图片描述

  • 测试代码1如下:
import json
import requests

ret = requests.get('https://api.ownthink.com/bot?spoken=小沐多高啊?')
answer = ret.text
answer = json.loads(answer)
print(answer)  
  • 测试结果1如下:
    在这里插入图片描述
  • 测试代码2:

import requests

def kg_view(entity):
    # 知识图谱API
	url = 'https://api.ownthink.com/kg/knowledge?entity=%s'%entity     
	sess = requests.get(url) 
	text = sess.text 
	response = eval(text)
	knowledge = response['data']
	
	nodes = []
	for avp in knowledge['avp']:
		if avp[1] == knowledge['entity']:
			continue
		node = {'source': knowledge['entity'], 'target': avp[1], 'type': "resolved", 'rela':avp[0]}
		nodes.append(node)		
	for node in nodes:
		node = str(node)
		node = node.replace("'type'", 'type').replace("'source'", 'source').replace("'target'", 'target')
		print(node+',')
	
if __name__=='__main__':
	kg_view('图灵')  

  • 测试结果2:
    在这里插入图片描述


结语

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

在这里插入图片描述

  • 9
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值