• 【NLP开发】Python实现聊天机器人


    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    参考文献: 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 测试结果如下:
      在这里插入图片描述

    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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 测试结果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('图灵')  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 测试结果2:
      在这里插入图片描述


    结语

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

    在这里插入图片描述

  • 相关阅读:
    网络小说怎么推广?
    工业I/O模块的功能和应用介绍
    Mac+Typora颜色快捷键设置
    Windows + VS2022超详细点云库(PCL1.8.1)配置
    L79.linux命令每日一练 -- 第11章 Linux系统管理命令 -- sar和chkconfig
    计算机体系结构:编译器预取例题(优化前后失效次数计算)
    学生会学习部部长竞选稿
    线段与线段的关系
    独立站推广引流的8个渠道
    Linux基本认识及指令
  • 原文地址:https://blog.csdn.net/hhy321/article/details/121918519