分类目录归档:Emacs

ELIZA是如何思考的——Emacs Doctor代码的简单分析

版本:Gnu Emacs 20.2.2.

使用的源代码: http://www.csee.umbc.edu/courses/471/papers/emacs-doctor.shtml

 

输入以后,Doctor会首先结合句子长度和关键词来进行选择,注意,是结合。我看到有的文章说是关键词为主,其实并不是这样,比如输入“unix”,并不是直接匹配“mach”类型。

一般Doctor所作的输出都是在一个个list中选取的。比如句子长度过短而句子中又没有特定关键词,就会被定义为short,然后结果就会从“shortlst”中选取。

另外,这些list还会结合一些语气词(如hmmm,well),短语(如feelings about,thoughts on),形容词(如vivid,boring)等生成句子,来使它看起来更像是人机对话。

 Emacs Doctor把269个关键词分为26类,并归为“doctor-put-meaning”,下面是“doctor-meaning”的全部分类

howdy打招呼

mach机器/计算机

foul脏话

toke放松

drug药物

loves/love 爱

hates/hate 恨

state 状态

desire 渴望

mood 心情

fear 恐惧

sexnoun 关于性的名词

family 家庭

death 死亡

symptoms 症状

alcohol 酒精

sexverb 关于性的动词

conj 连词

when 时间连词

rms Stallman 

school学校

eliza 这个不用解释了吧

sports运动

math数学

zippy 有活力

chat 这个只有“Chat”一个关键词

 

注:这个有意思了,不知道“Stallman”的自己Google。

事例:

Know Stallman?

 

Have you been a friend of Stallman?

所以说,当你问About Stallman时,它会回复一个带有Stallman的句子,

请注意,“Stallman”,是大写“S”的,而在Doctor里一般情况下名字是不可能出现大写字母开头的,如问的是”Tom“,会输出”tom“。这个也算是个彩蛋吧!向自由软件致敬!

 

每一个”doctor-put-meaning“对应一个函数defun和一个lst(list)

输出过程探究

1.输入”Know unix?”

2.“unix”属于“mach”(代码:(doctor-put-meaning unix ‘mach))

3.调用函数defun doctor-mach ()

4.函数查询machlst,并从machlst的几个句子中选取(貌似是按顺序选取的),见下面。

machlst代码:

(make-local-variable ‘machlst)
(setq machlst
‘((you have your mind on (// found) \, it seems \.)
(you think too much about (// found) \.)
(you should try taking your mind off of (// found)\.)
(are you a computer hacker \?)))

测试:

know unix?

 

You have your mind on unixs, it seems.

 

know unix?

 

You think too much about unixs.

 

know unix?

 

You should try taking your mind off of unixs.

 

know unix?

 

Are you a computer hacker?

 

这样就完成了一次和Doctor的对话。

写的不好,如有错误欢迎指正。

从Emacs Doctor到ELIZA,看早期的人工智能

在Mac中学习一些Terminal命令时尝试过Emacs Doctor,当时只知道这个可以和机器聊天小程序是集成在Emacs中的。最近发现Emac Doctor背后是一个早期的人工智能项目——ELIZA,仔细研究了一下,来头不小。


1.Emacs Doctor长什么样?

如下,

GNU Emacs

 

2.如何找到她?

Emacs中输入“xdoctor”即可。Terminal中需要先输入“Emacs”,再“shift+esc”。

3.这个Doctor怎么用?

找到Doctor后,输入你的问题,按两下“Return”,Doctor就会回答你的问题。

不过貌似这个精神治疗师的回答会让你更加神经。

下面是我和她的一段对话。

 

Talk

 

4.Emacs Doctor到底什么来头?

说到Emacs Doctor,就不得不说ELIZA维基百科-ELIZA)。

Eliza是早期的一项人工智能项目,被MIT的41岁计算机科学家Joseph Weizenbaum在1964-1966年开发出来,并以萧伯纳的戏剧作品《卖花女》(不是《茶花女》)中的主人公的名字命名(因此本文用“她”来称呼)。ELIZA的智能之处在于她能通过脚本理解简单的自然语言,并能产生类似人类的互动。而其中最著名的脚本便是模拟罗吉斯心理治疗师Doctor。GNU Emacs Doctor则是这个脚本的另一个版本。

ELIZA在1966年被发布出来以后,引起了不小的轰动,与ELIZA“聊天”的用户有时会误以为自己是在和人类,而不是和一个程序交谈。但是实际上ELIZA根本不知道自己在说什么。它只是按固定套路作答,或者用符合语法的方式将问题复述一遍。甚至有一段时间,人们认为这种思路可以做出通过图灵测试的程序。

Weizenbaum很吃惊很多用户会忽视自己面对的是一个机器,而对ELIZA敞开心扉(这种情况也叫做ELIZA effect,ELIZA效应)。虽然Weizenbaum创造的ELIZA使他在人工智能领域成就斐然,但他并不认为AI能与人类的情感和智慧相比。1976年Weizenbaum出版著作《计算机的力量与人类的推理》,书中表示人工智能的滥用可能损害人类生命的价值,并对计算机和人类的关系进行了探讨。

关于这段历史,可以看看《面对互联网:我们已经丧失了人性》。查到有两部关于Joseph Weizenbaum和ELIZA的电影《Weizenbaum. Rebel at Work.》《Plug & Pray》,打算有时间看一下。

Weizenbaum最早是用SLIP写的ELIZA。后来出现了很多其他语言的版本,著名的有Bernie Cosell重写的Lisp版本,Jeff Shrager的BASIC版本,还有就是GNU Emacs中的Emacs Doctor了。

另外,有一个用Perl写的改进版本的ELIZA(Chatbox-ELIZA),好像只能装到UNIX内核的机器上,我尝试了下。ELIZA体验过程及更多请看文章最后“ELIZA体验”。

作为最早的机器智能的体现之一,ELIZA可以说是一个里程碑。不管它有多么简陋,但它是将人-人互动的感觉带到了人机互动上的第一次尝试。

自己总结一下,ELIZA有以下影响:

* ChatterBot:ELIZA可以说是第一个Chatterbot——聊天机器人,你现在依然可以在很多Chatterbot中发现ELIZA的影子。不得不说的是,两年前Apple的Siri发布时,ELIZA也被再次请出,用来吐槽“智能”的Siri。

* Game:这一点很容易理解,由于ELIZA具有很强的互动性,她对游戏领域的影响是深远的,特别对早期的游戏。一些角色扮演类游戏和文字游戏很大程度上借鉴了ELIZA的设计,具体看这里。2011年的游戏黑客入侵:人类革命(Deus Ex: Human Revolution)也在向ELIZA致敬。游戏中的一个伪装成记者的反派Eliza Cassan最后被主角击杀,并发现她是一个高度智能的AI。

* Smart Assistant:虽然Google Now和Siri等一些智能语音助理能完成各种任务,甚至对它们给予的输入是完全的自然语言,但是它们仍可以判断意思并给出回答。维基百科上说Siri中有个很有意思的彩蛋(前提是语言设置为en),问Siri:“Who would you vote for-Mitt Romney or Barack Obama?”,Siri回答:“I can’t vote.But if I did,I would vote for ELIZA.She knows all.”或者问Siri:“Tell me a story.”最后她会给你讲她是如何被选中给Apple工作的,然后故事中会提及ELIZA。当然你也可以向Siri问ELIZA,然后她会仔细地向你介绍。

* etc.

 

 Emacs Doctor源代码中这样介绍自己

The single entry point `doctor', simulates a Rogerian analyst using
;; phrase-production techniques similar to the classic ELIZA demonstration
;; of pseudo-AI.

Emacs Doctor的脚本是用eLisp语言写的。在Mac中,打开emacs/24.3/Emacs.app/Contents/Resources/lisp/play ,其中的doctor.elc便是Doctor的藏身之处

Gnu Emacs 20.2.2中Emacs Doctor源代码http://www.csee.umbc.edu/courses/471/papers/emacs-doctor.shtml

写的不好,有错误还请指正。

Eliza体验

安装过程:

$ cd Chatbot-Eliza-1.04

$ ls

Chatbotdebug.cgidoctor.txtsimple

MANIFESTdeutschnorsksimple.cgi

Makefile.PLdeutsch.cginorsk.cgitest.pl

READMEdeutsch.txtnorsk.txttwobots

$ perl Makefile.pl

Checking if your kit is complete…

Looks good

Writing Makefile for Chatbot

$ make test

cp Chatbot/Eliza.pm blib/lib/Chatbot/Eliza.pm

PERL_DL_NONLAZY=1 /opt/local/bin/perl “-Iblib/lib” “-Iblib/arch” test.pl

 

Attempting to load module…done.  

 

OK, looks good.

 

$ make install 在这需要权限才行,sudo就行了

Manifying blib/man3/Chatbot::Eliza.3pm

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ERROR: Can’t create ‘/opt/local/lib/perl5/site_perl/5.12.4/Chatbot’

mkdir /opt/local/lib/perl5/site_perl: Permission denied at /opt/local/lib/perl5/5.12.4/ExtUtils/Install.pm line 494

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 at -e line 1

make: *** [pure_site_install] Error 13

$ sudo make install

Password:

Sorry, try again.

Password:

Files found in blib/arch: installing files in blib/lib into architecture dependent library tree

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/.DS_Store

Installing /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/Chatbot/Eliza.pm

Installing /opt/local/share/perl5.12/siteman/man3/Chatbot::Eliza.3pm

Appending installation info to /opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/perllocal.pod

这算安装好了。

然后”./simple”运行,尝试一下,本来感觉无聊的过程却发现亮点在最后。。。 感觉这个比Emacs Doctor的回答智能多了!

Eliza

 

 

参考资料:

Need A Psychiatrist? Meet Eliza

Meet The Emacs Doctor

Wikipedia—ELIZA

Wikipedia—ELIZA Effect

Wikipedia—Joseph Weizenbaum

CSEE.UMBC.EDU

面对互联网:我们已经丧失了人性