聊天机器人可用于实用的目的,如客户服务或资讯获取。有些聊天机器人会搭载自然语言处理系统,但大多简单的系统只会撷取输入的关键字,再从数据库中找寻最合适的应答句。聊天机器人是虚拟助理(如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) 则不同, 必须有智慧和逻辑推理的能力。
伊莉莎(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。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
https://web.stanford.edu/class/linguist238/p36-weizenabaum.pdf
http://chayden.net/eliza/Eliza.html
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()
运行结果如下(增加了部分规则):
https://github.com/rdimaio/eliza-py
运行结果如下(增加了部分规则):
https://www.nltk.org/_modules/nltk/chat/eliza.html#demo
https://github.com/graylu21/ELIZA-ChatterBot
青云客智能机器人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)
思知(OwnThink)AI机器人开放平台拥有自定义知识库、语义理解、知识图谱、对话场景等功能,机器人采用了基于知识图谱的语义感知与理解。
import json
import requests
ret = requests.get('https://api.ownthink.com/bot?spoken=小沐多高啊?')
answer = ret.text
answer = json.loads(answer)
print(answer)
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('图灵')
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!