如何在Mac电脑上随时学习一个单词一句话怎么读,怎么发音?

在Mac的第一代,苹果就在Mac电脑里面加上了机器发声的功能,使用起来有很方便,所以你只要有Mac,等于有了一个发音还不错的英语老师随时随地在你身旁。(当然现在Windows估计也有类似的功能,但是我很多年不用了,就不聊了)

比如你在看一个网页你遇到了一个单词你不会读,你就可以简单的选择这个单词,然后右键召唤菜单,选择Service->Start spreaking.

阅读单词

不仅仅可以读单词,你也可以干脆选择一段话,然后开启右键菜单,这样就会帮你读一个段落。

阅读一段话

当然不仅仅是在浏览器里,几乎所有的软件,只要支持文本选择,你都可以调出朗读功能。也就是说,只要你可以看到的英文文本,在Mac上都可以变成你的听力材料。

对于程序员来说,Mac还提供了在终端界面上的朗读功能。任何时候你在Mac自带终端,你输入命令Say,就可以朗读。比如你想读单词Hello。你就打入命令”say hello“就可以了。

如果你想让Say说一句话,你就直接在Say后面跟着也就可以了。比如”say This is a book“。

我是怎么学英语的(四级没过如何突破听说读写)

本视频为本文的理论和实践升级版,但是讲述更为简略,所以可以互为参照阅读。

我经常在微博和微信上面吹牛自己的英语水平,比如我会告诉大家我看美剧、美国脱口秀、电影都是不看字幕的,比如我目前的阅读是以英文书为主的,比如我讲过我在苹果店用英语帮助一个老外解决他的Mac遇到的技术问题,我还讲过我曾经在上海的一个外国人占半数以上的技术聚会里面用全英文做过技术演讲。

讲这些真实故事的时候,总有人膜拜,希望我好好讲讲我是怎么学的。当然也有人不以为然,一方面有人觉得我把学英语说的太轻描淡写了,在误导大家;另外一方面有些人觉得我在夸大自己的英语能力。

讲这些东西炫耀是一方面,另外一方面,我不认为自己的英语有多好,我认为大多数可以轻松的达到或超过我的水平,毕竟学英语只是我的业余爱好,我不想去考托福、雅思,我也没有四级六级专八的压力。我在公众账号Tiny4voice里面一直都在灌鸡汤,都在给大家讲学习方法,因为我认为大多数人的问题不是智商不够,不是努力不够,而是学习方法不对。我认为我学习英语的方法,只是我使用自己的学习方法的一个小小的例子而已,既然有那么多人想了解细节,也有那么多人质疑,我今天就好好讲讲。

为什么我要学习英语

我是一个非常实用主义的人,虽然我所在的中小学英语教育都很好,但是我对英语其实一直以来都是过关即好的态度。到了大学,我们学校的英语很差,我也就自暴自弃,我高中毕业去考四级都有可能能考过。但是大学期间,最高分数是58分,而且,我也不是很想再考了。大学期间,我的态度是反正我可以看懂各种计算机相关的技术文献(当然还是要查字典的),足够了。我对英语的态度是,技术英语我很在乎,看技术文献一定优先看英文的,不懂就查字典,其他的英语看起来很困难,也没有兴趣看。

时间到了5-6年前,我的好朋友韩磊推荐了我们看了一部港剧,很过瘾。我看完了,以后在微博和别的平台炫耀的时候,有人告诉这部港剧是模仿美剧24小时的,而且24小时比这部港剧好看几百倍。于是,我就入了美剧的坑。从24小时开始,我看的美剧越来越多,后来我干脆再也不看港剧和中剧和港剧了。我喜欢美剧的剧情、节奏和多种多样的形态和背景。

看着看着,我发现了一个大问题。那时候我是一个非常喜欢Multitask的人(我现在认为这是不对的,但是当时乐此不疲),我很喜欢一边看电视一边写代码,那时候我已经开始用Macbook小白了,但是旁边还放着一台PC显示器,PC专门用来看各种视频和电影。可是,我可以轻松的边看中剧、港剧边写代码,但是我没办法边看美剧边写代码。这引发了我的思考,这是为什么呢?我的结论是,看美剧的时候,我的眼睛必须盯着字幕,而看中剧、港剧(我的粤语能力看剧够了)的时候,我可以靠听解决大部分剧情,眼睛不用一直盯着副屏幕。

所以,当时为了解决这个问题,我想,我能不能学会不用字幕看美剧呢?于是,就开始了我自学英语的历程,这大概是3-4年前吧。

我的学习方法

入手的方法

怎么学英语呢?我不想报任何培训班,我觉得我是一个自学能力很强的人,我就开始设计自己的自学方法。其实我以前技术英语也不行的,怎么学好的呢,就是硬看所有的技术资料,看不懂就查字典,看多了,我就发现看同等难度的技术素材,随着看的时间越来越多,查字典的次数越来越少,读的越来越流畅,大概就是在闷头读技术素材的一个月不到的时间,技术英语就突破了,看大多数的技术资料就不太需要查字典了,而且越看越快。

这跟我小学的时候看小说的故事是一样的,我三年级以前看的都是所谓的儿童读物,自然都很好懂。可是三年级的时候,我父亲去图书馆借了一些小说看,比如梁羽生的武侠等等,我的成绩很好,所以,他看完的,我要过来看他从来不拦着,一开始遇到一些字不认识问他,他不耐烦的让我去查字典。我后来就这么查字典的情况下,看懂了很多小说。我觉得我三年级的阅读能力可能可以超过很多初高中生了。

我觉得我国的整体英语教育水平很差,大多数大学毕业生的英语水平惨不忍睹,但是,即使是很差的大学的毕业生,你大学毕业的时候的英语水平,其实也快到了,英语母语国家,三年级的小学生的水平了。所以,我们是有硬学的基础的。

我在读37signals的那本书Rework时,收获最大的一句话,就是世人都说要说从失败里面学习,但是我们更应该从自己的成功里面学习。我们不用去复制唐骏这个骗子的成功,因为他的脸皮、承压能力和骗术我们不一定学得会,但是我们总是可以复制自己过去的成功。你今年20-30岁,你真的敢说,你从来没有努力过,从来没有成就过任何小的成就么?

所以,我的方案很简单,跟我小学三年级硬看小说那样,跟我在大学硬看技术英语一样,去硬看没有字幕的美剧。一开始是很痛苦的,你需要一些faith,我发现很多我觉得很简单的美剧完全看不懂了,从娱乐变成一种煎熬了。怎么办?如果当时退缩了,那么我现在还是只有对着字幕看美剧。但是如果当时纯粹的硬看,完全不考虑方式方法,我估计我也坚持不下来。方案很简单,把所有自己喜欢的美剧,按照难易度分级,只看简单的美剧,只看不太需要大词汇量就能看懂的美剧。把一些剧情已经很烂熟美剧找回来看第二遍,每一集看懂为止,看不懂的话,就看第二遍。这样大概坚持了几个月以后,我发现大多数的美剧,都可以轻松的不看字幕的情况下看懂80%以上了。

如何才能坚持

每次说到看美剧学英语的问题的时候,都会有人问,你真的能看懂全部么?能看懂80%不错了吧。问题是,干嘛要追求全懂?我现在大多数剧可以全看懂。但是,遇到了一些背景很不熟悉的剧,确实很难全懂。可是,为什么要全懂?你看中剧时候,虽然没有语言的问题,你可以保证你全懂么?

有人以为我说看美剧学英语很简单,所以,就说我刻意的把学英语说容易了,学英语很难,我在误导人。我可以告诉你们的是,这个方法很简单,但是并不容易,练到我今天的听力水平,我大概看过了几十部各种各样的美剧,有很多剧看了无数次。为什么可以看这么多?

原因很简单,我是乐学。我从来不让自己痛苦。我在能力不够的时候,就看简单的剧。能力提升以后才去看复杂的剧。在起初的时候,如果发现一个剧聚精会神也看不懂30%,那么这个剧暂时就不看了,等到过了一段时间自己的听力和词汇上升了再回过头来看这个剧。

任何一个剧看到能看懂80%,就说明看懂了,不求全。如果一个剧大概的内容都懂了,就有一两个细节不懂的话,就去死抠的话,看剧的效率就大大下降,看剧的乐趣也大大下降。

我很反感学习中的那些捷径派,我见太多了,学习啥都想问问有没有捷径。我有一条捷径,那条捷径就是硬学、不多想、不扯淡、不放弃。不追求全部看懂的意义就在于,一开始学习的时候,我们追求的是尽量多的看美剧,看越多越好,量上去了自然而然水平就会上去。

一开始我看的是用字幕看过无数次的《24小时》,然后是一点一点的上难度,现在,我已经开始看Saturday Night Live(模仿政界人物、明星等为主的综艺)、Last Week Tonight(偏政治的脱口秀)这些英语好,对英美文化不了解都很难看懂的剧了。

看剧可以学词汇么?

这个问题是大家问我问的最多的问题。答案是当然可以。需要查字典么?不需要。没美剧的时候查字典是很困难的,你只是听到了剧里面的台词,你往往不知道拼写,怎么查字典呢?

我一开始也不确定这样学到底效果如何。虽然我看懂了很多么剧,但是我到底是不是学到了新的词汇呢?有一次朋友跟我一起参加一个技术会议,老外演讲,我们都没有要同传耳机,他中间有一些细节没听懂,他问了我几句,我回答的很清楚。他很感慨,因为他觉得几年前,英语听力比我强,现在觉得我的英语听力比他强了。他建议我去考个雅思测试一下。

于是,我在网上找了一个雅思测试题,在做题的时候,我遇到了词语marriage,其实我没学过这个词,但是我顺口念出来了,然后根据上下文一对,我居然猜对了意思。这个词,我没有见过中文释义,没有见过拼写。但是根据拼写,我大概一念,我就认出来了。另外一个词是siren,我在看一篇文章,讲遇到地震或者啥危险的时候,老师该怎么引导学生避险。提到老师要去按一下siren,我一开始不理解这个词,感觉通篇阅读都有点不理解,但是硬读了一下,我发现,这个词应该是汽笛之类的,后来查了下字典,果然是对的。

然后,我觉得我不用测试自己的雅思了。我觉得我看到了这种学习方法的魅力了,我通过大量的视听,很多词虽然我不知道在字典上对应的中译,但是,我知道可以用在哪里,大概是个什么东西。这是什么学习方法呢?这不就是我们小时候学习母语的方法么?你父母确实会刻意地跟你说这是椅子,这是桌子,我是爸爸,她是妈妈。但是更多的词汇量(听力词汇量),不是老师在课堂上教你的,也不是你在书上看到的,而是你在听大人讲话的时候慢慢积累的。这就是学习语言应该的学习方法啊(很多人可以一个汉字不认识,但是不影响他的说话很溜,什么都会说)。

进阶篇

用以上的方法,在不到半年的时间内,我就完成了我学英语的既定目标,完全不看字幕的情况下,看自己喜欢的美剧。有一段时间以来,我的英语就停留在这个水平上,没有任何变化,因为没必要有任何变化,当年剧看的越来越多以后,各种不同类型的词汇量一直都在积累,但是整体水平并没有大的前进。

一个很大的问题摆在了我的面前,要不要继续深化我的英语水平,还是满足于技术英语完全看得懂,看美剧也不需要字幕,自然看WWDC直播也不需要字幕的水平呢?

实话说,从工作和生活上来讲,确实也没有需要了。我觉得我的英语够用了。但是,看了这几年的美剧下来,我对美国文化的了解加深以后,我越发觉得只看中文的材料,对我的视野影响很大,特别是我是IT行业从业人员,能不能第一手的看到国外的资料,可能对我未来的创业和工作都有比较大的影响,所以我觉得学英语还是值得继续下点功夫的。

特别是2013年度,我的事业处在低谷中,爱情生活也是空白的。我这个人是受到挫折越大,越努力的那种人。2013年,我想给自己一个彻底的翻身,努力去做好公司的事情,锻炼好身体,那么学好英语和提高在别的方面的修养也提到了议事日程。

听英文Podcast的开始

因为要锻炼身体,我决定开始走路(不要跟我扯跑步,选择走路是非常科学的选择,懒得跟不懂的一句一句的解释了。),一开始走7-8公里就需要一整天,慢慢地,我可以一天走20多公里,只需要几个小5-6个小时的样子(2个月内减了40斤)。一开始,走路的时候,我都是在听音乐,虽然我的正版曲库有几百首英文歌,但是还是会腻,我就开始在走路的时候,听中文的Podcast,有一天我在想,要是走路的顺便听英文Podcast,不就可以边走路边学英语么?(一次性获得两种积分,好赞,节约时间的好办法)

于是,我开始寻找好的英文Podcast,听了一阵子才发现,看懂电视剧是一个难度,听懂英文Podcast是另外一个难度。看电视的时候,有画面帮你理解问题,而且对白的并不是很大,听Podcast的时候,全部都是语言,同样一个小时的Podcast的句子量可能是一个小时的美剧的10倍以上。我在美剧上建立起来的对自己听力的信心,被无穷的摧毁了。但是我不害怕,我有过了,从离不开字幕到完全不看字幕的美剧观看经验了,我知道Podcast也不过是需要一个过程而已。

方法很简单,先找最简单的Podcast,可以推荐的是English as a second language Podcast,这是洛杉矶加利福尼亚教育发展中心的几个老师做的一个Podcast,至今已经有1000多期了,每一期是一个100字以内的简短对话,用标准语速,慢速,以及单句讲解三种方式来读三遍。基本上,英语稍微有点听力就可以用这个入听英文Podcast的门了。我大概听了100来期以后,感觉自己的Podcast听力到了一定水平,才开始找其他的Podcast来听。

首先听的是ATP,因为是纯粹几个技术大牛扯淡,所以词汇量跟技术英语比较贴近,所以也算是一个上手材料。这两个Podcast一直在听,听到一定量我就开始寻找各种各样的Podcast来扩展我的不同领域的词汇量了。这种扩展词汇量的方法,在我学英语的几种方法里面是共同的,从最简单,最熟悉的材料入手(喜欢的、简单的美剧,教学类Podcast、技术Podcast),熟悉后,慢慢扩展各种难度升级和种类多样的英文材料。

到了今天,我听的Podcast包括了经济学方面的,EconTalk(斯坦佛大学胡佛中心经济学家Russ Roberts,节目里面采访过大量的诺奖获得者,著名企业家,包括uber的创始人,Airbnb创始人等,著名风投比如马克安德森等),Planet Money(轻松的经济学小故事);包括电台节目This American Life,Ted Radio Hour等等,当然最多的可能还是技术类的。现在听的范围就都是我喜欢听的东西。

听英文Podcast的好处是听力又上了一个台阶,我听的Podcast里除了English as a second language Podcast是教学英语,所以提供慢速以外,其他都是正常的美国人听的东西,都是常速英语,甚至很多人说话非常快(电台的感觉你懂的)。而且听的种类多了以后,你会发现信息量比美剧大得多,毕竟美剧是娱乐为主的,大多数内容都是很浅显的。

看英文书的开始

2013年的时候,我去了一趟香港,买了几本书,一本是高华的禁书,另外两本就是诚品书店英文销售榜榜首的书,一本是《the Power of Habit》,另外一本的名字暂时想不起来了。我当时只是觉得诚品书店的外文书数量比国内的书店多得多,不买两本太浪费来香港一趟了。

回来以后,我发现这本《the Power of Habit》写的非常好,而且改造自己的坏习惯和建立好习惯的方法论和我一贯的学习方法论很兼容,所以很认真的在看,但是出门带一本书很麻烦,我就下单买了一个Kindle paperwhite。另外我的朋友子元,在美国,他告诉我他喜欢买在亚马逊买有声书来听,感觉比看书更爽。于是我又买了这本书的有声书版本。至此,这本书我有三个版本,大概说了50美金左右。我出门坐地铁就用Kindle看,走路的时候,就用iPhone的Audible App听(亚马逊旗下的有声书品牌,书非常全。)。这本书一半是用Kindle看完的,一半是用Audible听的。

这本书我看完了以后,刻意地用书里面的方法来改造我的走路习惯和阅读习惯,我发现效果都很好。于是我发现了看英文书的一个大好处,就是可以获取很多新的知识(这本书确有中文版,但是很多好书,其实没有)。

看完这本书后,我觉得我打开了一个新的世界。于是,我开始了刻意阅读英文书的旅程。方法很简单,在任何场合,看到有朋友推荐一本书,只要这本书是译书就去亚马逊买一本原版的。我每个月在亚马逊光买电子书,消费至少在300美金以上。遇到任何一本书非常喜欢的话,就马上再买它的有声书版本,一本有声书的价格往往是电子书的三四倍,但是,可以在走路的时候读,加快效率,我不在乎这点钱。

之后,我在EconTalk听Russ Roberts采访了《the Great Debate》的作者Yuval Levin,他是主修西方政治的,但是在学习西方政治的时候,美国的民主党、共和党两党的主张有很多非常具体而微的差异,很多并不能以利益来简单的说明,他很好奇,这两派差异的来源,经过调查,他得出的结论是,西方左右派的创始人,左派的创始人Thomas Paine(Common Sense常识的作者,所谓西方普世价值观大量来自于他的论点),右派的创始人Edmund Burke(英国高官),这两个人在美国大革命和法国大革命的时期,爆发的论战,特别是针对法国大革命是否正确的论争,奠定了西方左右派的起源。

我被这个采访深深打动了,因为我对西方的左右派是怎么回事儿,也非常有兴趣,马上买了这本《The Great Debate: Edmund Burke, Thomas Paine, and the Birth of Right and Left》,然后大概花了3个月才看完。这本书看的极其的吃力,因为里面都是一些艰涩的哲学、经济学、政治概念,有非常多十几个字母的长词儿。我看《the Power of Habit》的时候,最开始一页书需要查5-6个词,但是看到1/3以后,基本上不用查字典就可以通读,了解大概的意思了。但是这本《the Great Debate》基本上是查字典从头查到尾,每页可能都需要查7-8次字典。但是,这本书太有意思了,太开阔我的视野了,解决了我心中对历史和政治方面的很多疑窦,所以看的非常辛苦也甘之如饴。

看完这本书以后,我觉得我的视野被打开了很多,三个月的苦读一点都不苦了。这本好书,更坚定了我要多读英文书的信念(虽然这本书其实也有中文版)。更重要的是,我从Edmund Burke的哲学观点里面学习到了渐进的力量,真正开始理解日拱一卒,不期速成的价值,我的内心更加平静,更加可以让自己去坚持做一件自己觉得正确的,哪怕是路径非常坎坷的事情,这本书对我的人生改变之大,不可估量。

后来,我在一些投资人朋友的书单上看到了《Zero to One》和《the hard thing about the hard things》这两本和创业很相关的书,看完了也是觉得非常赞,非常贴近我在创业遇到的问题和思考。特别是《the hard thing about the hard things》,作者是马克安德森在网景的同事,在互联网泡沫即将破碎的时候创业,经历了流血上市,家人重病,公司分拆,出售主营业务,等等,无数的艰难险阻,最后修成正果的故事。我几乎是见一个创业的朋友,推荐一次这本书,送了一本纸质的和几本电子版的给我的好朋友们。

在我看这两本书的时候,大陆还没有出版这两本书,在我看完,甚至推荐给很多朋友后,国内才开始有译本。上次有个朋友从深圳来上海出差的时候见过我一次,几个月以后他来上海一定要再约我一次。聊的时候,他说,我推荐他这本书的时候,身边没有人知道这本书,他看了以后也是收获很大,最近国内创投圈子都开始看这本书了,他就觉得我有先见之明。我想了想,这就是坚持看原版书带来的时间差异。

另外有一本书,叫做《One Billion Customers》是我前些日子一直在看的书,收获非常大。作者是纽约时报驻中国记者站的前负责人,后来在中国经营纽时的数据业务,接触了大量的在中国经商的外国人,直接间接参与了美国和中国的WTO谈判,后来也在中国经商多年。这本书因为有提到太多的细节信息,所以一直没有办法引入国内,而很多年前,译言做过非官方翻译,但是迫于内容的限制,也删节了很多内容。

这本书的立意本来是讲外国人在中国做生意有哪些坑,但是我看完全书发现,这本书是一本了解中国政治,中国商界非常难得的客观的读本。不仅仅对外国人在中国做生意有大好处,对中国人本身怎么在中国做生意,也有很大的意义。而且从历史的角度入手,也帮助我去理解,中国如何在挣扎和矛盾中进步和倒退,市场和政治以及垄断等力量如何博弈,如何推动和阻碍中国的发展。这样一本包含大量真知灼见的书,如果我不坚持阅读英文原版书,就彻底错过了。

至此,我觉得我学英语的目的越来越清晰。作为一种语言,英语到底有多么的流利不是重点了。我发觉英语的价值是可以让我跟这个世界最好的内容、戏剧、书、知识建立起联系。我学英语的重点在转移,更不在于语言层面的东西,更在乎自己专业,自己兴趣方面以及文化方面。英语完全退化成了解世界认识世界的工具,当然,这个工具需要学的非常好,才能满足我的需求。

口语和写作的练习过程

口语突破之路

其实在我开始阅读电子书之前,我就开始了口语的练习。但是,听读其实是比较相近的能力,说写则是另外一种能力。所以,我把口语和写作放在后面聊。

中国人大多数是哑巴英语,很多词汇量巨大的人,也说不清楚一件非常简单的事情。原因很简单,听和读其实是容错性很大的行为。之前有人举过例子,刻意把一些句子里面的每个单词都写错一个字,你是完全可以读懂的。比如,“Thos xs a bxxk, I loke Englosh boxk.” 其实读懂这个不难。实际上,美国黑客界很流行一种用数字代替英文字母的写法, 比如著名的美剧Numb3rs,里面的3就是代表字母e的。大多数人对这样的错误都是可以完全包容的。而且,不管你语法多烂,只要大概的词语对了,老外其实是可以听懂你大多数词语的。这是因为我们说的话,都有大量的冗余信息,只要你的错误没有多到一定程度,可以被其他的冗余信息来纠正回来。

但是说和写就不是这样的了。一句话,可以有三十种说法,你要想说好和写好其实是很难的。即使你听了很多,也不会自然成为你的口语表达能力。

口语只有一个练法,就是不停地说。可是,你不能跟中国人练习,不是说只能跟英语极好的人练习,跟谁练习都可以只要练习足够多,因为练的核心是你自己说。但是跟中国人练习的问题是,刚开始说个Hello,以后,他就喜欢挑错,他们总是习惯每一个字都对,不懂得练习的真谛是多说,在练习的时间里面尽量地说才是要点,他们可以找到的大多数错误,你自己也可以找到,他们总喜欢得意洋洋的告诉你一些小学级别的英语错误问题,以找到别人的错误为乐,一旦找到了,立刻出戏,进入了嘲笑和反嘲笑的游戏里面。我跟中国人试了几次,发现效率最高的情况下,一个小时也只能扯几句,完全起不到练习的作用。

于是,找老外吧。我不想花钱,怎么找老外呢。12-13年的时候,StackOverflow(国外最著名的一个技术社区)搞了一次全球大聚会,利用MeetUp网站在全球所有的城市发起了聚会邀请,只要有MeetUp的会员站出来参加就可以参加。那次我带着我公司CTO去了,那次上海聚会大概有15-6个人,中外各占一半左右,大家聊的还是比较开心的。我当时就在想,我们中国人搞的技术活动很少有老外参加,但是StackOverflow在MeetUp上搞的活动,老外居然有一半,这说明老外跟我们一样找信息有固定的渠道。

当我想要找老外的时候,我就想到了MeetUp,于是我开始看在上海有哪些MeetUp,不找不知道,一找才知道,原来活动那么多,每天晚上都有活动。我就开始密集地去参加这些活动。

我参加过桌游活动,大概8、9个人里面,只有3个是华人,而且另外两个都是在海外多年,刚回来的。那次有一个黑人说是刚从美国来的Java程序员,我觉得大家都是同行就比较好聊,多问了几句。他说公司允许员工在全球任何地点远程工作,只要在固定的时间上线下线就可以。于是,他就来了上海,每天上海的深夜他开始上班,第二天早晨下班(时差要配合美国的同事们)。

还有专门讨论TED的主题活动,形式是,主持人播放一个TED视频,然后在主持人的引导下进行讨论。有时候主持人会故意在放视频前,先用一个问题引发讨论。我印象最深刻的有一次是,主持人问大家讲故事的意义是什么。一开始大家说的还好,然后有一个美国大叔说,如果人类不会讲故事的时候,经验就不会在一代一代之间传承。然后主持人问了一个问题说,那么老狗可以教小狗技能么?这算不算讲故事。还是说故事必须有虚构的成分。有一个人就站起来说,他知道一只狗当主人给它骨头的时候,它就会挖个坑埋起来。然后主人问他骨头在哪里,它就装傻。这时候,主持人说,这算不算是本能呢。有人能不能举一个动物可以骗人的故事,不是本能的。这时候有人站起来说,他见过朋友家的一只鹦鹉,主人在家的时候,就让它自由活动,不在家的时候,就把它锁在笼子里面。那天主人要出门,过来看鸟笼子,其实没有锁住,但是鹦鹉就故意用爪子抓住笼子的锁的位置,好像是想拉开的样子,主人就以为锁好了,就走了。然后鹦鹉就大摇大摆的走了出来。大家都乐疯了。

事后我特意跟主持人聊了一会儿,他在中国做程序员,以前他在美国是叫科学的老师,他说他的主持方法就是美国课堂上的教育方法。老师负责抛出问题,学生可以从各个角度去表达自己的想法,老师不负责说对错,但是会根据学生的论点,提出一些新的问题,引发讨论的深入。

这个活动我去的很多,从一开始只能站起来说一句话,两句话,到后来可以用蹩脚的英语说一大段表达我自己观点的言论。口语仍旧不流利,但是可以表达自己的观点了。我有参与过很多好玩的讨论,宗教方面,慈善方面,NGO方面,创业方面,很有意思。

后来,有一段时间因为我工作比较忙,我就没有参加这类活动了。但是我觉得口语已经开始过关,有了足够的自信心,也学会了一些简单的表达方式。更重要的是,我发现我在跟老外smalltalk方面,很不自然,而TED讨论那种类似辨论的场合反而可以侃侃而谈。我仔细思考了一下,其实我在中文世界也是如此,除了跟最好的朋友以外,跟一般人都很难扯天气家常,要么是辨论,要么是给别人灌输才是我的擅长。但是,我已经知道怎么练习口语了。我连老外都不需要了。我开始在看英文书的时候,刻意的用读的方式,大量的朗读以后,果然再遇到老外聊天的时候,就更自然了。

后来我有个朋友人字拖二号,想拉着我做中文Podcast,但是被我说服,跟我一起做了英文Podcast,他以前是在加拿大留学的,刚毕业几年,是国内那种比较少见的,留学的时候,没有混在华人圈子,而是跟老外玩的铁熟的那种。我们做了几期节目,全部都是土生土长的老外,和我们两个聊天,人字拖的英语更流利,他负责做主持人,我听力了得,基本上老外聊啥都听得懂,我就只负责在我觉得有趣的时候,插入一些好玩的问题。比如,我们第一期找了一个在美国做医疗用品生意的朋友,他以前是读生物医药方面的博士,学识很好。他给我们介绍奥巴马的医保方案,我就很好奇。因为我们听说过很多关于美国急诊室的故事,比如不管病人有没有钱,都必须治,问他是不是真的。又比如据说美国的急诊室人满为患,经常排队排到病都好了,还没轮到等等。我又跟他讲了,中国最近出了些很好玩的案例,某医院门口来了一个病人,医院把病人放上车,送到别的医院等等,我问他美国有没有这种情况等等。

他很多年前来过中国,对中国印象还不错,而且觉得中国的各种发展中的问题并不严重。于是我就问他知不知道黄浦江上飘猪的故事,等等。

这个Podcast也是我练习英语的一种方法,让自己在一种真实的场景里面去试图讨论问题从而锻炼英语水平。

前几个月,我经常参加的一个老外为主的技术社区活动CocoaHeads上海的组织者说缺演讲者,我就报名说,想去做一个演讲。他同意了以后,我就花了一个晚上,把我一个曾经过的中文技术演讲的提纲全部改成英文的,然后去演讲了。那天非常发抖,表达很不流利,但是基本上把要讲的技术细节都讲了。因为我们的技术方案非常有趣,而且非常有挑战,讲完以后,老外们问了好多问题,我觉得非常有收获。 我的口语完全谈不上流利,但是因为我的听力基本上过关了,我的表达也可以用各种曲折的方式表达出全部的意思,我觉得口语算是过关了,可以跟老外进行没有歧义的沟通了。以后的练习就在多朗读和多跟老外扯淡了。

前几周,我去上海IAPM的苹果店蹭网,一个老外拿着自己的MacBook air来咨询,他说他的Parallels Desktop软件出现了故障,一旦打开Windows虚拟机,随便运行一个软件,整个MacBook air的磁盘空间就会从剩余几十G迅速减少到0,然后,Windows虚拟机就无法运行了。苹果店的天才们,大概只能听懂Parallels Desktop,但是讨论的时候,却念成了paradise,而且连基本的看日志之类的调试方法都不懂。老外跟他们扯了几分钟以后,天才们只能搪塞说paradise不是我们苹果的软件,我们解决不了。我在一旁看着实在过不去就过去搭话,老外问天才,我是干嘛的,天才说我也是一个顾客。老外就开始跟我解释他目前遇到的问题,长话短说,最后我咨询了下我的朋友大别,因为我不用Parallels Desktop。我帮老外清除了几十G的磁盘空间,帮他把Parallels Desktop启动起来,然后建议他OS X升级一下,Parallels Desktop也升级一下,据大别说社区里面最近是听说Parallels Desktop老版本的类似Bug很多,但是升级到最新版本以后就没问题了。老外买了一个外挂硬盘用来导数据,然后说“Thank you sir”,然后重重地握了我的手,“you have a nice day.”客客气气的走了。

其实我的口语,仍旧强调一下,很不流利,但是完全可以表意了,这就是我追求的状态,可以用英语做技术演讲,可以个老外聊技术问题,修老外的电脑,可以谈老外谈经济、社会和政治(在我们的Podcast里面做到了)。当然这样的口语也只是一个起点,有了可以自由沟通的开始,我相信我的口语还会继续进步的。

写作突破之路

听读写突破以后,我深刻的发现,写作其实是最难的。到今天为止,我的写作其实也不能算真的突破了,但是我找到了一条路径。

根据我听读写的突破过程,我认为想突破写很简单,就是多写。问题是怎么能多写?我很多年前就有英文Blog,写了没人看的话,我根本没有办法坚持下去。在这个时候,我就想到了Quora。Quora是一个社会化的问答网站,简单的说,国人众所周知的知乎就是抄Quora的,我很多年前就Quora的账号,而且已经有1000多粉丝,但是我没有回答过几个问题。

于是,我去Quora回答了几个问题,但是还是没有人理我。我那1000多粉丝多数为中国人,而且早就不玩Quora了,没有人玩,我就没有兴趣写,该怎么办呢?我给自己设计了一个Quora突破计划。目标是在Quora上面再吸引1000个粉丝,回答100个问题,争取有些问题获得大量的投票。

这个计划的实施方式是:

第一步,找到所有Quora的优质用户,天天刷Quora的内容,看到某个答案好玩,点赞多,或者回答者的粉丝多,就加一个关注。到处寻找Quora推荐关注列表,把列表里面的人全关注了。找到Quora员工列表(几百人),全关注了。这些人有些出于礼貌也关注了我,我多了几十到上百个关注。更重要的是,我开始找到了Quora的好内容在哪里。这类社会化的媒体,如果你不关注对的人,你根本看不到好的信息。

第二步,给自己订了一个每天必须回答一个Quora问题的计划。因为不是每个问题都可以回答,都想回答,所以,也就是说,每天至少看10-20个问题,才有机会回答一个。

第三步,在中文圈子里面推广Quora。在我的推广下很多人都开始玩Quora,他们很多也关注了我。

大概在1个多月以后,人字拖找到我说,Tiny你的口语还不错,但是写作很差,你是不是没有用拼写检查工具啊。

我说,我在用操作系统的拼写检查工具啊。

他说那个差远了,他推荐了1Cheker给我,我马上用了用果然很好用。我在用这个工具前,因为对很多表达模棱两可不敢确定,所以写回答的时候经常写的很短,因为写长了就不知道怎么组织了。而有了1Checker以后,我就开始能写很长的答案了。最好的一个答案是关于“Which are some of the character traits that most developers have in common?”的答案,总共有387个赞同。

大概在三个月以后,我完成了100个答案,1400个赞,粉丝达到了2700个,完全超额完成任务。

我的写作还差得很远,但是已经有一条道路了,这条道路跟听读写的练习一样,要点在于,我想上量,我就可以上量了

总结篇

其实按照中国人的标准,老外的标准,我的英语都还差得很远。我觉得我自己听说读写都突破了的意思是在我需要的领域,这四样能力都足够了,而且走上了可持续改进的道路。

总结起来说,我的学习方法要点有几个:

1、硬学。看不懂的美剧硬看,听不懂的Podcast硬听,看不懂的书硬看,聊不清楚的老外硬聊,写不好的英文文章硬写。

2、循序渐进。虽然是硬学,一开始绝对由浅入深,让自己时刻都有成就感。

3、追求最大的材料量。循序渐进的目的是一直都没有挫折感,所以可以用大量的时间去看美剧(至少上千小时),去听Podcast(几百小时了),去跟老外扯淡,去写文章。

4、逐步改进,慢慢地从学语言本身,进化到学文化,学跟世界交流。这个过程越深入,学习的动力越足。

5、不急躁不冒进,日拱一卒,不期速成。看美剧突破用了半年,但是一直看到现在。听Podcast突破用了一个月。口语用了几个月,写作用了几个月。听起来很浪费时间,但是几年以后,想对自己的能力提升去看,觉得自己花的时间并不多,很少,很值得。

6、保持快乐,所以可以坚持做终身学习。我的英语水平高么,比以前高了很多,足够高么,不足够高,但是我可以自傲的是,现在我的英语学习是终身学习,你比我高,没关系,大多数人的学习速度没我快,而且不像我不停的在学习,总有一天超过你。(当然最重要的永远是追求每日超越昨天的自己。)

为什么有些人用一年时间获得了你十年的工作经验?

此视频为本文对应的演讲,本文是该视频的删节版文字总结稿。

我一直喜欢跟优秀的人来往,和非常优秀的人工作,因为我是一个非常懒惰的人,而我知道跟非常优秀的人工作的时候心情可以非常愉快。

优秀人才的特征:极强的学习能力必不可少

那我自己创业的时候呢,我招的第一个员工,他毕业于漳州一个大学,在那个不是很发达的地方,但他自己学会了怎么做iOS开发,并把自己的软件在AppStore上线。

后来我看这个软件做的还不错,他的学历不是太好,也没有什么背景,我都不理解他是怎么学会这些东西的。然后我们开始给他喂一些材料,给他一点点做一些项目,我发现这样的人也是没有什么极限的,于是我给他们做的东西越来越难。

后来我发现,原来这个公司我终于不用再做主要程序员了,我终于找到了一个编程水平和我差不多的人,我不干活的人生目标的终于达到了。

所以我这些年呢,我一直在想怎么样把人变得优秀。我想要和优秀的人合作。

就有人在问:这样的人你怎么找得到呢?

前两个月呢,我验证了这么一个流程:我让所有人远程工作起来。于是我就在论坛里发了一篇帖子,说我认为远程工作是这个世界的未来,我在想我们下个项目要不要找两个远程工作的人。

当天晚上我就收到了六篇简历,但是其中五个人都不是我想要的人。我就和最后一个人聊,因为最后一个人是做Java后端的。但是呢这个小伙子很无聊的在他的博客中写了有35篇一步步如何应用Java的系列。

这的确不是什么特别难的事情,但是我没有见过一个人可以把这样的副项目(side project)做的这么干净、整洁,每一步都写的非常清楚。

所以我就和他说我觉得他是我们想要的人,他问我们的项目要做什么。我告诉他我们要做一个把iOS直接编译成安卓的项目,我让他看了一个我关于这个项目的视频。

过了五分钟,他回邮件说,他觉得很难,搞不定。我说我相信你可以搞定,我给你两个星期的时间去学什么叫做iOS开发,你不需要学到非常难,你只需要学到可以做一个最简单的iOS app就表明你会做iOS开发了,你就进我公司了。

两个星期以后,他做了一个app并写了一篇文章来解释这个是怎么回事。看完这篇文章之后,我和我们的CTO说这个人就交给你管了。我特别喜欢这样的人,所以我在想这样的人到底是什么样的人。

去年我过的不是很顺,我就在想我怎么样可以让自己过得积极快乐。我发现这就是一个过程,这个过程就是我能不能够征服一些我征服不了的过程,比如我能不能走一段路把我这身肉减下来。一开始走一两万步,累得吐血。

后来我陪一个小朋友去逛外滩,我回家发现我走了三万步,但是我一点事情也没有,这是我去年想象不到的事情。所以我开始写一本很鸡汤的书。

我对这个世界的理解是,这个世界太容易活下来了,可是对于很多人来说不是这样,问题出在哪里呢,在于这个世界变化得太快。

在iPhone出来之前我觉得手机应该是一台电脑,但我不知道应该是一台怎么样的电脑。iPhone出来之后我觉得这就是,我相信那个时候没有人会相信iPhone可以把诺基亚搞死但它做到了。但我相信这只是伟大产品的很小的一部分,iPhone把日本的DC和DV搞死了,这才是伟大产品的真正的意义。

大家打过Uber吗?我觉得Uber其实就是我们以前想象的未来智能世界的样子,随时随地都能够打到车。从一个程序员的角度讲,我们应该在出租车的计价器上装一台电脑。

但实际上怎么解决的呢,实际上每位司机都有一台手机,这手机并没有强悍到车上去,但这台手机连接到了每一个人。这个世界正在不停地变化。

什么东西都有可能,做一个高级程序员很难吗?同样的一个黑人,可能在美国街头打架,也可能是奥巴马。你想想一个美国街头小混混变成奥巴马有多难,他需要跨越的阶梯更多。每一个你见到的比你更优秀的人,他到底是有什么天赋异禀呢?

我不太相信这件事情。我见了太多优秀的人,我不认为他们天生的智商比别人高,但是我觉得他们的学习方法、对待事情的认真态度是不可阻挡的。我不知道高博之前在大学挂了11门,我在大学也挂了11门。我是我们大学了唯一一个家长被叫到学校的大学生。

我在校门口接我爸妈时,我爸妈当时觉得特别丢人。但是走着走着,遇见两个人对我说“郝老师好”,我爸妈当时觉得特别惊讶。这两个人参加了我当时在另外一个系做的关于Word、Excel、Powerpoint的演讲。

当时我就在想:这个世界其实有不同的评价标准。也许我的大学觉得我应该被开除掉,但是我看到的不完全是一份简历,我觉得每个人具有完全可变的能力,但我们被我们的理解所塑形,把我们变成了一个完全不可变的人。

我们会听到别人说“学一门语言好难啊”。五年前有人跟我说“Tiny,该怎么学iOS”,我说“很简单”;五年之后还跟我说“Tiny,该怎么学iOS”,我都无语了。

十年的工作经验 or 只是一年的工作经验用了十年?

有这么一个笑话,一个人跑去问老板“我都有十年工作经验了,问什么您还不给我涨薪水呢?”,老板回答说 “你是有十年工作经验呢,还是把一年工作经验用了十年呢?”。

我觉得在这个社会中有太多人是把一年的工作经验用了十年。刚才也有演讲者提到了《异类》,《异类》的理论是只有当你刻意去学习,当你不停从自己的安全区跳出来,忍受一种痛苦和煎熬,改变了自己以后,你付出的时间才是算数的。

当时我们在珠海讨论学习的问题,其中有一个人说他在进公司前两个星期的时候非常痛苦,觉得他什么都不会,谁都比他强。但后来他可以轻松处理这些事情,他却觉得有些担心了。

我问他担心什么,他说他觉得这一年没有什么成长。我觉得他把我点醒了,我给的建议有两个:一是找一份更有挑战性的工作,二是做一个副项目去挑战自己。

1、掌握“学习曲线” 享受终生学习

什么叫做“学习曲线”——横轴是时间,纵轴是能力。

我相信我们在校的学习和工作的第一年一定会学到很多东西,但是我见到的很多人工作一年、十年、二十年是完全一样的。我认为终生学习的人的学习曲线应该是没有尽头的。

有人在论坛上问,现在硅谷都在宣扬二三十岁创业、成功、成为明星的例子,有没有人能够给我举一个四五十岁成功的例子。那么就有个人回复:“我在42岁创办了Craiglist。”Craiglist是分类网站的鼻祖。我当时就懵了,我才36岁,我的人生才刚开始啊。

在任何环境中我们都可以观察,我认为在任何一个不断变化的环境中,终身学习者只能占1%。

我的结论是,由于你是一个终身学习者,你可以秒杀在任何一个领域里你的同侪。终身学习者是没有极限的.

我的另一个观察分析是学习的方法有很多种。一般的学习方法是阶段性的,就是学一会儿,休息一会儿,再学一会儿。我们传统教育和我们推崇的人,他们通常是意志力非常坚强人。

比如说我们要考试了,在一个星期之内从完全不懂到能够考试,那么我们的学习曲线将会非常陡峭。我觉得这是一个非常错误的示范。

大多数认为自己不聪明的人来自于用一种错误的方法去学习。我经常遇到一些非常神奇的初学者,有人说“这本iOS书看了三天还没有看完”,我想问的是这本是是三天能学会的吗?比如你去爬珠峰掉下来了,然后你说自己是一个失败者。

其实,为什么要这么爬山呢?我一直强调大家不要急,为什么?

因为一着急你就会开始做错误的东西。一开始你以为你是神,可以在一个星期内、三天内学会一个非常难的东西。一旦你做不到,你就会觉得你什么都做不到了。我觉得正是这样的原因让大家以为自己不够厉害。

我觉得有了正确的方法以后,大多数人都可以攻克这个问题。我经常和很多人说,刚进入一个项目的时候,学习曲线要平,可怕的平。

比如像我这么一个人,一次就要走三万步的话,大家可能在急诊室看到我。那我第一次的目标是怎么定的呢?第一次我就背了个包,带了很多的补给,不知疲倦的从早上走到晚上,后来我算了一下我大概走了六七公里。我从来不知道我能走六七公里。

那么第二天我想既然第一天我走了七公里,那我今天可不可以走八公里呢?有一次我为了见一个朋友,跨了个江,走了十五六公里,后来我觉得我自己太厉害了,后来就一发不可收拾。

我觉得学习曲线一开始比较平,但是当你对一个东西了解了以后,到后面是一个加速度过程。会学习的人在一开始都是非常慢的,在给自己设定基准,并基于自己正反馈的空间,并且永远不会把自己控制得太狠,让自己一下子崩溃掉。

2、Hacking大脑 锻炼你的大脑

我的另一个思考是Hacking大脑。

首先我对机器学习非常有兴趣。我觉得机器学习对我们理解人脑是非常有帮助的。

机器学习:模型+数据量
机器学习主要有两个东西,一个是模型,另一个是数据量。当你选对了足够的语料、足够的数据量的时候,这个模型会越来越好。

我一直在想我们的大脑是一个什么东西。大脑其实是一个反馈的流程,大脑接受了一定的数据、一定的训练,形成了一定的理论,然后不断地去验证这些理论对不对。一个聪明的人大脑的结构应该非常的清晰。

为了学英语练听力,我开始听一些Podcast,一开始我发现我听的不太懂,但由于是自己领域内的东西后来我都能听得懂;于是我开始听一些经济学的东西,发现十几个字母长的东西我也能够听懂,我到现在不知道那些词怎么写,但是我就是能够听得懂。

现在我验证了大脑是一个无穷力量的机器,那我怎么去训练它呢?我觉得我听力有一定水平了,那我能不能够说英语呢?于是我就去参加上海老外的聚会,从一句话不会说到能够和老外争论宗教的问题。

我始终觉得我的词汇量是一个问题,那我又开始读英文书,现在我可以看哲学等比较艰涩的书籍了。那后来我发现我要练口语的一种方法,原来一开始我要培养即使看不懂也能读下去的一种感觉,现在我遇到每一个不会的单词都要查,于是我感觉我的口语又在慢慢进步。

think fast and slow:避免远古大脑,唯慢不破

我们有两个大脑,一个大脑深思熟虑、功能非常强大;另一个大脑比较像远古的动物不太懂事,但它非常快,有点像反射。通过这个理论我想明白了我们为什么会产生争执,原因很简单。比方说有个老外说“你们中国人……”,另一边就会想“你怎么了,又想说我们中国人了吗?”,但其实他都不知道是要说中国人好还是坏。

很多时候呢,我们都会陷入到一种情绪中,都在用大脑最快但是最愚蠢的部分。所以我在想,我能不能降低我的反应速度,把每一句话都听完,把每一件事情都想完,再回答,就是先听后说。后来我有个理论叫做“不争论”,这也是我们论坛的宗旨,即使你对上一个人的发言有多大分歧,你都只表达我的观点是什么,而不是说“某某某的想法是错的”。

因为一旦说了这么一句话,就会陷入到一种以“说服对方”、“压倒对方”为目的的讨论中。实际上我认为每一个讨论的人都会有一些不对的部分,不可能全对。所以我们都在一种不争论或者深思熟虑的环境下,给予大家充分的表达空间,你总是能够收获一些。

我觉得成长就是我们不断去接受这个世界散在很多人、很多书、很多理论里的信息,信息量慢慢地增长,让我们的大脑不断进化。

再回到大脑进化这个问题。我在有个阶段认为,我们大脑的模型进化我是有感觉的。我觉得我英语听力上升的时候,莫名其妙觉得我的粤语听力和上海话听力也在上升。

你的大脑其实就是一个复杂机器,当这个机器越来越好的时候呢,不光是对某一个具体的问题有好处。所以我在追求让大脑更复杂更进化,帮我来解决更复杂的事情。

the power of habit:把好变为习惯.

最后一个是《习惯的力量》,其实这本书的观点与《思考,快与慢》是相反的。它认为我们的习惯存储与我们大脑比较古老低级的部分,比如反射。

《习惯的力量》提出了一个我们怎么把一个回路放到大脑古老部分里去的方法。放过去的好处在于,习惯意味着我们做一些事情就会变得很容易。我觉得这本书可以和《异类》一起看:当任何时候你觉得难受,你的大脑就在进化;当任何时候你觉得轻松,你都在使用你的习惯。

但这两种理论对我们都有非常重要的意义。我在想我可不可以用这个理论改造我的习惯,这个理论的内容是:习惯有三个要素——触发条件、流程和奖励。

我拿这个理论去可以改造我的走路行为、学日语的行为,效果都非常好。我现在每天大概都能够学40分钟的日语,我能够看到我的日语水平在提升。

结束语

大脑Hacking的理论虽然不够完美,但是我们可以不断地去验证。

我可以试试看心平气和的聊天是不是能够更好地交流;我可以试试习惯的理论能不能够把一个我不想做的事情很容易的做到,而一些不想有的坏习惯能不能够戒除掉。

希望有一天我能够写一本关于方法论的书,很多人或许会叫它“鸡汤”,但我觉得只要他能够改变别人、改变我自己,那就是对的,谢谢大家。

Google为什么发展TPU而不是自己造超级GPU

Google机器多,服务器多,训练从来都不是Google担心的问题。我知道对每个个体研究者来说,GPU都是笔大开销和主要预算方向,但是对Google不是问题。

Google随着Tensorflow不断地在发布他们训练好的,在某个领域领先的模型,为啥?因为从Google的角度,要提供的不是AI训练云,而是AI服务云。服务你们这些几十万个研究者重要呢?还是服务潜在的所有的都可能需要AI服务的公司重要呢?这不是一个很难的选择。

所以,Google操心的不是训练,Google的用户一般不需要训练,顶了天是Finetune一次两次,主要需求是服务,这就是为啥TPU对Google是个大战略的原因啊。

科研者有了更好的模型,没关系,Google可以参考,可以自行实现,可以购买吧,然后再租给自己的AI服务云的用户即可。

如何在Mac OS X EI Capitan下安装带有OpenCL支持的Theano

我有两台Mac,一台Mac pro和一台Macbook pro。他们都是用AMD,所以我无法使用CUDA加速机器学习,所以,我想使用OpenCL。

首先安装一些必备的库和工具:

brew update
brew install cmake

sudo easy_install pip
sudo pip install virtualenv

然后建立一个安装环境 (使用virtualenv可以避免很多麻烦的问题):

mkdir Theano
cd Theano
virtualenv venv
source venv/bin/activate

sudo easy_install nose
sudo pip install NumPy SciPy
sudo pip install Cython

安装Theano:

sudo pip install Theano

然后,你可以用这个测试代码 ( test.py ) 测试Theano的安装:

from theano import function, config, shared, tensor, sandbox
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], tensor.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
              ('Gpu' not in type(x.op).__name__)
              for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

这测试会显示如下的信息:

$python test.py
[Elemwise{exp,no_inplace}(<TensorType(float64, vector)>)]
Looping 1000 times took 1.492254 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the cpu

其实就是做一些数学运算做1000次,花了1.49225秒,它在使用CPU。

然后我们必须安装libgpuarray,这样Theano才能支持OpenCL:

git clone https://github.com/Theano/libgpuarray.git
cd libgpuarray

mkdir build
cd build
cmake ..
make
make install

cd ..
export CPATH=$CPATH:/usr/local/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
python setup.py build
sudo python setup.py install

然后,我们可以用THEANO_FLAGS设置我们需要用的OpenCL设备。

在我的Mac pro使用OpenCL和CPU:

$THEANO_FLAGS=device=opencl0:0 python test.py
Mapped name None to device opencl0:0: Intel(R) Xeon(R) CPU E5-1620 v2 @ 3.70GHz
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float64, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 1.750073 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the gpu

注意: 代码显示“Used the gnu”,但是实际上你能看出这是CPU。

在我的Mac pro使用OpenCL和GPU:

THEANO_FLAGS=device=opencl0:1 python test.py
Mapped name None to device opencl0:1: AMD Radeon HD - FirePro D300 Compute Engine
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float64, (False,))>), HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.623279 seconds
Result is [ 1.23178032  1.61879341  1.52278065 ...,  2.20771815  2.29967753
  1.62323285]
Used the gpu

终于,我们可以使用OpenCL和GPU了。

性能:

我的Mac pro

屏幕截图 2016-04-01 15.09.25

我的Macbook pro

屏幕截图 2016-04-01 15.09.32

注意:现在我们可以用Theano和OpenCL了。但是,当我发现Theano使用CUNN的时候,我很悲哀,因为当你用Theano做神经网络训练的时候,它仍旧需要CUDA的支持。暂时,我还没办法解决这个问题。

英文版本:How to install Theano on Mac OS X EI Caption with OpenCL support

[译]使用机器学习的方法给Quora的答案排序

原文:A Machine Learning Approach to Ranking Answers on Quora

每天数百万人使用Quora寻找问题的答案,做出更好的决策,寻找梦想的工作,更好的照顾自己的家庭,等等。在问题页面提供更好的阅读体验,对我们来说非常重要。做到这点很重要的一步就是,根据与问题的相关性以及答案的价值排序,这样最有用的答案总是排在前面。

在这篇blog文章里,我们将描述,在Quora我们是如何使用机器学习给答案排名的。

早期尝试和基准线

赞成和反对票数量的简单排名函数(百分比,或者差值),可以作为排名问题一个不错的基准线。虽然这个基准线还不错,但是也有一些问题:

•时间相关:我们在答案收到投票之前无法排名。

•马太效应:内容一旦收获投票,则更容易收获更多的投票。

•玩笑答案:玩笑答案往往很热门,但是不见得对问题有任何帮助。

•可发现性:新加入Quora的专家,可能没有足够多的followers,他们的内容无法被看到,导致她们的回答永远在后面,然后他们就更难获得followers。

非常明显,虽然这样的基准线简单,快速,容易诠释,但是他们经常效果不佳。我们也可以用其他尝试,比如展示数,但是这些模型也各有各的问题。既然Quorayou大量的结构化数据,我们想尝试一些更复杂的模型。

我们的排名方法

回答排序属于一类问题叫做排序问题。我们在Quora还有很多其他的排序问题在解决,搜索,主页流,摘要邮件,邀请回答,等等。在排序问题里,我们的目标是根据相关性预测一组文档。大多数情况下,也包含一些附加的上下文,比如正在看结果的用户,也就是要引入个性化到这个问题里。

我们尝试过很多种回答排序方法,不过在本文,我们讲专注于非个性化supervised item-wise regression方法。一个supervised方法意味着,一个训练数据集,用来抽取特征,建立模型。Item-wise regression就是说模型会给每一个回答一个数值的分数,让我们用来排序。后面的站街,我们将深入细节讨论我们如何收集数据,我们如何验证我们的模型,最后我们如何在生产环境让整个系统循环起来。

基础信任数据集

不管问题如何被建模,我们希望可以客观的验证我们的模型。一个方法是使用A/B测试来验证模型,观察相关的指标。这通常被叫做在线验证。另外一种方法,离线验证,指的是我们模拟排名,然后用它们和一些已知的好的排名比较。离线验证非常重要,可以让我们非常快速的迭代我们的模型。对于答案排序,我们选择了一个模型,在这两种设置下都有最佳的性能,但是最后我们还是决定专注于离线验证,因为我们从根本上相信我们需要做的不是短期的优化用户行为表现,而是提供更高质量的产品。

对离线验证来说,难点在于如何知道好的排名是什么样子。为了达到这个目的,我们构建了一个答案排序正确的基础信任数据集。这非常困难,因为什么是好的答案,每个人想法都不一样,尤其是是当考虑到个性化的时候就更加困难了。在Quora我们定义一个好的答案要拥有如下5个特性:

•不能答非所问。

•给任何对这个问题感兴趣的人提供可以复用的知识。

•答案必须符合基本原理。

•示范必须可信,基础事实必须正确。

•清晰,易读。

main-qimg-9030730f23877a02cc3a79da843992bd

上面的截图,我们看到了一个好回答的例子。注意高亮区域,他们显示了我们可以用在我们的预测中的结构化信息,例如,作者的可信度,格式,赞同票,等等。我们还有很多作者和投票者的历史数据,来推断主题专业度以及可信度。更多关于好答案是什么样的的信息,参见“什么是Quora上好答案的样子?什么叫做’有帮助’”。

创建一个好的数据集可能成本高昂,但是对在离线情况下验证排名算法极端重要。我们使用很多不同的方式来了解答案的真实质量。例如,我们曾经考虑使用一个答案列表,用赞同票和反对票的比例作为标签。这可以作为构建一个基础信任数据的一个不错的起点。这样的数据有很多,因为Quora上有成百万的答案既有赞同票也有反对票。然而,这种标签的问题跟之前反对票标签会遭遇类似的问题。它会把一些非常流行,但是低质量的答案(例如,玩笑答案)排在前面。

另外一种其他人得到训练数据的方法是进行一个用户调查。调查页面可能会问用户是否觉得某个答案有用。我们也可以尝试,结合用户正在看什么答案,以及他们未来参与等级如何,来推测这个信息。

所有这些方法都有它们的长处和缺点,在现实世界的设定下,我们可能想尝试很多种有创意的方法,然后尝试把它们都结合到一个权威的基础信任数据集。

main-qimg-2cd17bf06f6dbcf567c0244d72d841a5

问答排名系统循环

特征和模型

supervised学习设定下,我们使用从训练集抽取的一组特征训练我们的模型。特征选取就是用一组函数把我们的例子转换成数值的流程。

特征选取是一个模型成功的主要贡献者,也常常是构建一个好的机器学习系统最难的部分。在答案排名的案例里也一样,我们花了很大的功夫选择和实现正确的特征抽取。

我们用我们对答案质量的直觉测试了大量的特征。我们尝试过的特征可以大致分为三类:基于文本的特征,基于专业度的特征,基于作者投票者历史行为的特征。我们开始使用效果明显(高ROI,高投资回报率)的基于文本的特征,但是我们实验了一阵子,开始尝试更复杂的概念,比如句法复杂度(syntactic complexity)。很重要的是,观察确保我们的特征很好的泛化(generalize well)。考虑到这里文本特征实际上经常产生问题。

很多时候,我们最后组合特征,并且重用其他机器学习模型的输出,如果它合理的话。一个组合模型往往比单一特征更好,常常是提到性能的强大方法。例如,我们有一个模型尝试去估价一个用户对指定主题的专业度,从这个模型引出的特征结果非常有效。

为了解决这个通用回归(general regression)问题,我们实验了几个模型:linear regression、logistic regression、random forests、gradient boosted trees、 neural networks。很多都不错,特别是gradient boosted trees以及一些深度学习(deep learning)方法,非常不错。

然而,我们很在乎的模型可解释性——任何时候,排名看起来不对,我们想知道问题出在我们的模型,我们的特征,还是我们的训练数据,或者还是其他的原因。大家都知道模型越简单,就越好解释。例如,线性回归就是一组特征的权重,但是神经网络可能有很多层,难以解释和可视化。而且从性能考虑,我们倾向于简单的模型。

度量

问答作为一个机器学习问题”一文中提到,寻找正确的度量是非常重要的。对于我们的目的,既然我们选择了point-wise排名方法,我们关注很多高级度量,有一些是基于排名的,有一些是point-wise的。我们使用如下的度量方式:

  • 基于排名的:NDCG、Mean Reciprocal Rank、Spearman’s Rho, Kendall’s Tau
  • point-wise:R2、Mean Squared Error

基于排名的度量给我们关于算法的信息,同时point-wise的确保我们的评分在尺度上接近我们的训练数据,不同问题之间的答案也可以被比较了。

产品化

这个章节我们讨论,在我们的生产系统中,实现排名训练循环,我们面对的工程挑战。

当用户在Quora加上了一个新答案,我们希望尽快在问题页面给这个答案排名,以提供一个平滑的用户体验。虽然预测的延时非常低,但我们仍旧需要为新答案计算一些耗时的特征,然后我们发现这种延时会损害加入答案流程的用户体验。所以,我们创建了一个单独的模型,仅基于那些容易计算的特征,为新加入的答案提供一个还不错的近似评分,来快速排名。一旦答案被添加后,我们会异步的计算一个更准确的评分。

在上百万个答案上实时排名是一个核心的挑战。问题页面可以包含数百个答案。想象一个系统使用数百个特征,需要上百毫秒去计算。问题页面可能需要10秒钟以上去加载。在这种情况下,答案的评分必须更快的产生,所以,把答案评分缓存起来,以便问题页面可以在合理的时间内加载完成。但是,缓存的问题是,如果任何一个特征值变了,我们就可能需要更新答案的分数。为了节约重新计算全部特征的时间,我们也保存了全部的特征值。所有这些数据(答案得分、特征值),都保存在HBase,一个开源的NoSQL数据库,可以支撑大量的数据以及写入。

缓存每个答案的得分带来的一个问题是,当一些问题或者用户的特征改变时,我们需要更新大量的答案。考虑一个可能有上万个答案的用户。如果我们依赖于特征,例如用户的答案数,那么每次他增加一个答案,我们就需要更新他全部答案的评分。答案多的用户,往往添加答案也更频繁,这就更恶化了这个问题。为了缓解这个问题的影响,我们决定把部分用户和问题的数据组织起来。然后,我们尝试批处理计算这些答案的分数,减少重复的计算。

以上一切,仍旧无法把更新量降低到一个可以控制的范围,所以,我们在决策树内部做了其他的优化。如果更新一个特征不会影响到答案的评分,我们就不更新它。

以上全部的优化,把预测工作量降低了70%,我们的模型在我们目前的规模下可以高效的运行。

总结和结果

总体上,我们发现我们模型生成的积分,比基准线准确得多。我们同时发现,这些评分对很多基于好答案定义的应用都很有价值:

  • 折叠答案。如果一个答案的积分太低,它可能是坏的内容,应该被折叠。我们现在还会在作者得到反对票之前,就提示他内容质量不够高,可能会被折叠。
  • 高质量的通知。如果用户收到一个低质量答案的通知,那是一个非常坏的用户体验。
  • 提高首页流的排名效果。

总体来说,我们使用supervised学习方法预测答案的质量和排名。得到一个好的排名效果,我们进行了大量的迭代,是我们团队中很多人的贡献的结晶。最终,我们在全部的度量标准下,相比基准线提高了50%的效果,缩短了和完美排名之间的差距,排名质量看起来很不错。最终,我们成功的通过排名给作者和读者,提供了更好的用户体验。

在这些改进的基础上,还有很多需要去做。例如,我们的模型还不能个性化。我们也可以多花些精力放在用更高的技术来给回答文本建模。我们可以研究Recurrent Neural Networks,它可以处理词序列(早期实验结果很好)。或者,我们可以使用一个可以处理更多数据的模型。总体上,我们会把精力放在更复杂的自然语言处理(Natural Language Processing (NLP))方法上,帮助我们理解问题和回答的语义。

如果你有兴趣研究回答排名或者其他有意思的ML和NLP问题,欢迎你应聘我们的NLP工程师职位