标签归档:Mac

从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

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

Mac OSX下Go语言环境搭建过程及遇见的一些问题

Gopher

一直对Google的Go很好奇,最近看到Go的开发团队专门做了Go tour来帮助开发者学习,就决定尝试下。

本来感觉一个很简单的环境搭建却出现了几个意想不到的问题,所以有必要 

一.安装

Go的官网上有安装指南,看了下,决定用brew下载安装,简单方便。

$ brew install go

安装后输入go可以查看一些命令的使用。

看下版本

$ go version

go version go1.1.2 darwin/amd64

安装包会自动安装在 /usr/local/Cellar/go目录下。

二.配置

安装好后,在/usr/local/Cellar/go/1.1.2/libexec/misc中,可以看到有很多编辑器版本, 在其下可以自动配置不同编辑器来使用Go开发。

配置$GOPATH和$GOROOT

输入以下命令来查看环境变量

$ go env

GOARCH=”amd64″

GOBIN=”"

GOCHAR=”6″

GOEXE=”"

GOHOSTARCH=”amd64″

GOHOSTOS=”darwin”

GOOS=”darwin”

GOPATH=”/Users/Jackie/gocode”

GORACE=”"

GOROOT=”/usr/local/Cellar/go/1.1.2/libexec”

GOTOOLDIR=”/usr/local/Cellar/go/1.1.2/libexec/pkg/tool/darwin_amd64″

CC=”gcc”

GOGCCFLAGS=”-g -O2 -fPIC -m64 -pthread -fno-common”

CGO_ENABLED=”1″

$GOROOT是go的安装路径,配置后可直接在终端执行相关命令。注:Go 1.0之后安装包自带的Go tool会自动设置。

$GOPATH用来设置workspaces,即工作路径,可以设置多个。在Go  1.1之后被强制要求设置。具体见官方文档GoLang.org

关于这个$GOPATH,我安装时报错不断,真是让人头痛。

开始一直提示”$GOPATH not set.”,尝试了Stack Overflow上所有的方法,都没用,最后索性不弄了。没想到第二次打开又可以了,难道要重启?

后来就是在安装gotour时出现的一个问题,下面再说。

三.安装Gotour 

首先需要hg(Mercurial),这是一个跨平台的分布式版本控制软件。安装后可以使用hg等命令。

当然,我还是用brew安装

$ brew install hg

安装成功后后输入hg命令会出现Mercurial的相关使用信息。

接下来需要建立$GOPATH所需要的目录,下面是官方给出的一个例子

 GOPATH=/home/user/gocode

 

    /home/user/gocode/

        src/

            foo/

                bar/               (go code in package bar)

                    x.go

                quux/              (go code in package main)

                    y.go

        bin/

            quux                   (installed command)

        pkg/

            linux_amd64/

                foo/

                    bar.a          (installed package object)

按照官方文档,这时在终端下使用

$ sudo go get code.google.com/p/go-tour/gotour 

就可以安装Go tour了

如果安装中文的话地址改为

$ sudo go get bitbucket.org/mikespook/go-tour-zh/gotour

注:中文地址我始终不能下,貌似被qiang了。

不过我安装的时候又出现了问题,

abort: error: EOF occurred in violation of protocol  

package code.google.com/p/go-tour/gotour: exit status 255 

反复尝试无果后,决定用hg直接手动下载

$ hg clone https://code.google.com/p/go-tour/

再复制

cp -r go-tour $GOPATH/src/pkg/code.google.com/p/go-tour/gotour

再安装

cd $GOPATH/src/pkg/code.google.com/p/go-tour/gotour

go install ./

这时gotour就安装到$GOPATH/bin目录下了

屏幕快照 2013 11 26 17 09 26

进入这个目录打开它就行了

$ ls $GOPATH/bin

$ gotour

2013/11/26 15:48:56 Serving content from /Users/Jackie/gocode/src/code.google.com/p/go-tour

2013/11/26 15:48:56 A browser window should open. If not, please visit http://127.0.0.1:3999

这时会自动打开浏览器,如图

屏幕快照 2013 11 26 17 13 13

最后终于弄好了,不过不能每次都进这个目录再输入命令吧。

再配置一下bashrc就可以了。

$ sudo vi /etc/bashrc

然后在下面加上

#Go tour

alias gotour=’/Users/Jackie/gocode/bin/gotour’

这样就完美了。

大功告成,赶快体验一下。

 

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

找回OSX Mavericks中的网络实用工具

更新到Mac OS X 10.9后,很多人会发现Utilities里没有了Network Utility(网络实用工具)。

虽然它的功能完全可以在terminal中实现,但是在这里列出来打开它的方法以供需要的人参考。

用Spotlight强大的搜索功能就可以找到。如图:

2013 11 18 16 06 08

可以看到地址为/System/Library/CoreServices/Applications

打开Finder,shift+command+G,粘贴地址,前往文件夹。

2013 11 18 16 18 01

这时就可以看到程序的文件了。

然后再给它做个替身,把替身移动到/Applications里,这时就会在Launchpad中显示网络实用工具了。

2013 11 18 16 20 25

另外,其实Mavericks是给它提供了进入方法的,不过这入口有点偏僻。

打开“系统信息”,选择“窗口”,这时就能看到被打入冷宫的网络实用工具了。

2013 11 18 16 22 16