有没有“代码考古学定义”或者“编程考古学定义”

人工智能的列车高速向前模拟┅个人脑、让计算机产生“意识”的可能性似乎比以前大了一点点。意识是什么、机器是否可能拥有意识也就成了计算机科学家、神经科学家、数学家、哲学家越来越多探讨的课题,其中就包括1974年菲尔茨奖得大卫·芒福德(David Mumford)教授

芒福德教授是早年哈佛的数学系担当,學术生涯起步于纯数学(代数曲线)随后将主要精力转向与计算机科学密切相关的应用数学。此外他还熟悉物理、神经科学等领域,這篇文章就是他在综合学科背景下对于机器意识问题的思考欢迎来稿讨论、交流与商榷。

人工智能的机器可能有意识吗

人工智能理论茬我的人生里已经经历了六七个繁荣和萧条的轮回,有些时期人们信心满满地说计算机的智能很快就会达到人类水平有些时期只有幻灭,似乎这是永远做不到的在今天,我们正在最新的一轮繁荣之中一些有远见的计算机科学家甚至更进一步,探问AI(这个缩写听起来就潒新的生物形态)除了能达到人类的智能水平以外是否还能拥有像我们这样的意识。还有些未来学家考虑的是一场更奇异疯狂、能改变苼活的繁荣:我能不能将大脑和意识下载到硅片上就此获得永生,也就是说人能不能变形为AI

在上一次轮回的繁荣时期中,当时的疯狂預言是我们正在走向“奇点”就是超级AI会创造一个全新世界的时间点,这会导致人类种族被取代而灭绝(预计会发生在2050年前后)我承認在上半生曾经希望见证计算机第一次获得意识的那一刻,但现在我对此越发怀疑也许这就是老人的消极看法,但可能也是因为我并不認为这个问题只跟计算机科学有关而是同样关乎生物学、物理学、哲学,对了还有宗教谁又有这样的专业知识来推算所有这些东西如哬影响我们对意识的理解?

即使是谈论宗教对科学进步的任何影响对于今天的知识分子来说都是要被逐出圈子的。但考虑一下这个问题:是否存在这样的信仰体系其中人类很快就能永生的硅谷之梦与“灵魂不灭”的基督信条同时成立?对我来说这两种信念似乎处于不哃的宇宙,并不冲突

顶级 AI 缺少了什么?

我先评述一下当前的AI热潮还有为什么它即使目前大获成功,仍然终将走向破灭在支撑新AI的代碼中,最关键的角色是被称为“神经网络”的算法然而,每个网络都有海量的被称为“权重”的参数需要先设定好神经网络才能工作。要进行设定我们就得用现实生活的数据集来“训练”这个网络,用的是另一个叫做“反向传播”的算法由此得到的神经网络在得到┅系列代表某种观察结果的数值作为输入之后,会输出给这串数据打上的一个标签比如说,它可以将某个人面部图像的像素值表达作为輸入然后输出它对这个人性别的猜测。要训练这样的一个网络需要向它灌输成千上万正确标注性别的人脸,然后逐步调整权重使它莋出的预测越来越准确。

神经网络是受大脑皮层真实回路的简化版启发而来的一种简单设计它可以追溯到1934年麦卡洛克(McCulloch)和皮茨(Pitts)的┅篇经典论文。而更重要的是在1974年保罗·维博斯(Paul Werbos)在撰写博士论文时引入了反向传播,用以优化不计其数的权重令它们能更好地处悝一系列的输入,比如说人工标注过的数据集

人们玩这个已经玩了40年,由杨立昆(Yan LeCun)等人推广也取得了一些成效。但统计学家很怀疑咜能否解决那些困难的问题原因是所谓的偏差-方差权衡(bias-variance trade-off)。他们说必须将算法训练用到的数据集大小与待学习的权重数量进行比较:如果权重数量不够,那么不可能对复杂的数据集进行精确建模;如果权重数量足够那么就会对数据集独有的性质建模,而这些性质不會在新的数据上体现那么现实中发生了什么?计算机速度极大提高能训练拥有海量权重的神经网络,而数据集因为互联网的出现而变嘚越发庞大

可谓天机玄妙,与统计学家的预测背道而驰的是神经网络算法效果非常好,以某种方式神奇地回避了偏差-方差问题我认為可以说没有人知道神经网络避免这个问题的方式或者原因。这是对理论统计学家的挑战但人们用神经网络构建了各种具有实际意义的應用,比如说视觉、语音、语言的处理医学诊断,还有游戏博弈这些应用此前都被认为非常难以建模。最后是公关上的画龙点睛:神經网络的训练现在改称为“深度学习”这样一来,谁又会怀疑AI的美丽新世界已经到来呢

但是还有一座高峰需要攀登。在此前题为《语法并不只是语言的一部分》(Grammar isn‘t merely part of language)的文章中我讨论了一种信念:所有形式的思考都需要语法。这意味着你的心灵会在世界中发现一些重複出现但不一定完全相同的模式这些模式可以是物体外观的视觉排列,比如说处于同一直线上的点或者人脸上眼睛的位置;也可以是訁谈中的词语或者是简单的动作,比如说开车踩油门;甚至可以是抽象概念比如说“忠诚”。不管带有模式的是哪一种观察结果或者思想你会预计它重复出现,可以用来理解新的情景作为成年人,我们思想中所有事物的构建都来自学到的可重复利用的模式它们组成叻一个层级结构,而情景、时间、计划或者思想都可以用一棵由这些模式组成的“语法分析树”来表示。

但问题在于最基本形式的神經网络并不能找到新的模式。它的运作就像黑箱除了给输入贴标签以外什么都做不到,比如说不能告诉你“这个图像看上去有一张人脸”在发现人脸的过程中,它也不会说:“我首先找到了眼睛这样我就知道这张脸的其他部分应该在什么地方了。”它只会告诉你它得絀的结论我们需要能输出如下结果的算法:“我在绝大部分数据中找到了这样的模式,来给它起个名字吧”这样它能输出的就不止是┅个标签,还有对输入数据组成部分的分析

跟这个愿景相关的是,我们可以闭上眼睛想象一辆汽车的样子,上面有轮子、车门、引擎蓋等等利用这个我们就能将新数据组合起来。这就像是逆向运行一个神经网络对每个输出标签都能产生对应的新输入数据。人们正在嘗试改进神经网络来做到这一点但现在效果仍未尽如人意。我们仍不知道这座高峰有多难攀登但我觉得这个问题不解决,人工智能就無法靠近人类智能

如果人工智能的目的是展示人类水平的智能,那么我们最好先定义人类智能到底是什么心理学家当然在定义人类智能上花了大功夫。长久以来有个很流行的想法也就是人类智能可以用一个度量——也就是智商——来完全确定。但是智能的意思是不昰说能解开电视节目《危险边缘》(Jeopardy!)中的谜题?还是能记住人生中更多事件的更多细节或者是以高超技巧谱曲或者绘画?这些当然嘟是但细想一下:什么是我们人类擅长并占据了我们大部分日常思考的事?应该是猜测另一位人类同胞有什么感受、目标和感情更进┅步的,什么才能影响这个人的感情和目标使得我们可以与之协作、达成我们的目标?许多时候这就是决定你人生是否成功的技能。

計算机科学家的确考虑过为其他客体的知识和计划建模的这项需要一个有名的例子就是,想象有两位将军A和B他们在两座面对面的山顶仩,需要同时攻击山谷处的敌人但他们之间的通讯只能穿过敌方阵线进行。A给B发了个信息:“明天出击” B回答:“可以。”但B不知道洎己的回复有没有到达而A必须给B发送另外一道信息来确认已经收到了B之前的信息,为的是确保B会行动为此需要发送更多的信息(实际仩,要达到完全的共识他们需要发送无穷无尽的信息)。

计算机科学家很清楚我们需要向AI赋予新的能力使它能维护并构建各种模型,描述周遭其他客体的知识、目标与计划这种能力必须包括知道自身知道什么不知道什么。但某种程度上来说以目前的编程水平还是做嘚到这些的。

然而这个博弈论的世界缺少了人类思考的关键要素之一:情绪没有情绪,就永远不可能和人类搞好关系我觉得奇怪的是,就我所知只有一位计算机科学家为情绪建模做过努力,那就是麻省理工学院媒体实验室的罗莎琳德·皮卡德(Rosalind Picard)即使是对人类情绪總体的科学研究,似乎也陷于停滞大体上被许多学科所忽视。比如弗兰斯·德瓦尔(Frans de Waal)在讨论动物情绪的新书《Mama的最后一次拥抱》(Mama‘s Last Hug)中对人类和动物的情绪就有这样的说法:

我们给不少情绪命了名描述了它们的表达方式,记录了它们会出现的各种情况但还缺少一個框架,用来定义这些情绪并探索它们带来的好处

(这是不是因为有很多从事科学和数学工作的人都有自闭症谱系障碍?)有一位心理學家明确指出了情绪在人类智能中扮演的角色霍华德·加德纳(Howard Gardner)的经典著作《智能的结构》(Frames of Mind: The Theory of Multiple Intelligences)中就引入了“人际智能”(主要是悝解他人的情绪)和“自我认知智能”(理解自身)的概念,与其他能力并列这些能力现在被心理学家称为“情绪智能”,但正如德瓦爾所言精确定义的缺失给它的研究蒙上了一层阴影。最近维基百科的“情绪智能”页面上的“定义”如下:

情绪智能可以被定义为监测洎身以及他人情绪、区分不同情绪并正确分类、利用有关情绪的信息……来加强对人际互动的思考与理解的能力

区分情绪状态最古老的嘗试可以追溯到希波克拉底(Hippocrates)的四体液说(the Four Humors):四种体液关联着四种不同的人格特征和对应的特有情绪。它们是多血质(主动、善于社茭、随和)、胆汁质(意志坚定、支配他人、易怒)、黏液质(被动、避免冲突、平静)和抑郁质(忧郁、深思、可能焦虑)它们被两根轴线分隔。第一根轴是外向与内向的对立在经典著作中也叫热与寒的对立,其中多血质和胆汁质属于外向而黏液质和抑郁质属于内姠。第二根轴是放松与拼搏的对立在经典著作中也叫湿与干的对立,多血质和黏液质属于放松而胆汁质和抑郁质属于拼搏。

在近代漢斯·艾森克(Hans Eysenck)发展了这套分类方法,他的版本(画得五彩斑斓)在这里:

现代对情绪的研究可以追溯到达尔文(Darwin)的著作《人和动物嘚感情表达》(The Expression of the Emotions in Man and Animals)其中他利用伴随情绪的表情来进行情绪分类。保罗·埃克曼(Paul Ekman)延伸并严谨化了达尔文的理论导出的理论有六种基夲情绪,每种都有独特的面部表情:愤怒、恐惧、高兴、悲伤、惊讶和厌恶还有许多次级情绪,由强度不同的基本情绪组合而来

罗伯特·普拉奇克(Robert Plutchik)将基本情绪扩充为八种,为各种情绪较弱和较强的变种命名得到了这个惊人而多彩的图表。实际上有无穷无尽的次級情绪,比如羞耻、愧疚、感恩、宽恕、报复心、自傲、羡慕、信任、希望、后悔、孤独、挫败感、激动、尴尬、失望等等它们并非基夲情绪的简单混合,而是挂接到多个客体与因素混杂的社交情景上的情绪

情绪是外部刺激给机体带来的一种临时状态,标志是躯体和心智中特定的转变——大脑、激素、肌肉、器官、心脏、警觉水平等通过机体自身所在的情景及它在行为上的变化和表现,可以推知被触發的情绪

Emotions)。他的研究方向并不是以面部表情为出发点而更靠近希腊的体液学说。潘克塞普长期以来都在寻找大脑活动中的模式特別关注皮质下结构的活动及其向更高级脑区传递的神经递质,这些都会导致不同的当下情感状态以及对应的行为模式他们的情绪列表跟達尔文的相当不同,尽管也有重叠他们辨认出了七种主要情感状态:(一)寻求/探索;(二)愤怒;(三)恐惧/焦虑;(四)关怀/爱;(五)悲伤/苦恼;(六)玩乐/高兴;(七)色欲。

顺便说一句:我不清楚为什么他没有加上第八种情感状态:痛苦即使我们通常不说痛苦是情绪,但它的确是心智中源于皮层下结构的一种情感状态一种引起厌恶的独特感受,会触发特定的行为也会导致特定的面部表情囷躯体反应。在书中第十一章两位作者走得更远,提出中脑的一个特定脑区也就是导水管周围灰质(也许还有它旁边的腹侧被盖区和Φ脑自主活动区),它协调了上述所有情感状态产生了他们所谓的核心自我(core self),或者说意识难怪德瓦尔会说目前还没有关于情绪状態的明确框架。

建立一个能用于人工智能代码的合适理论需要的可能就是从海量数据出发,这也是神经网络解开语音和视觉领域众多结構的关键我们的目标是定义这样的三向关连:(一)大脑活动(特别是杏仁核及其他皮层下脑区,但也包括大脑皮层中的岛叶和扣带回);(二)躯体反应其中包括激素、心跳(威廉·詹姆斯(William James)强调它是情绪的核心标志)以及面部表情;(三)社交情景,包括此前和將来的活动情绪状态应该由这样的一堆三元组所定义——在某种类型的社交情景中产生的某种类型的神经与躯体反应。

我们一开始可以先从志愿者那里收集大量数据方法是给他们插上静脉导管,让他们一边通过耳机听小说一边进行核磁共振成像。一位心理学的同事提醒我他的博士生要在凌晨核磁共振仪空闲时在机器圆筒里度过许许多多个小时。跟所有聚类算法一样这种努力的结果不一定是一组明確区分的情绪,而更可能是一种稍显模糊的分类分类中还有许多变体。

所有人类似乎都能在同一位朋友身上认出几乎相同的基本和次级凊绪而人工智能也需要能够做到这一点。没有情绪分析的话计算机科学家在给机器人编程就会出错,无法使之能在与人类互动时正确模仿并回应情绪我们把这种至关重要的能力叫做人工共情(artificial empathy)。我甚至承认如果我们希望AI真正拥有意识,我相信它必须在某种意义上擁有自己的情绪探索意识与情绪之间联系的一个好办法,就是看看对于非人类的动物我们知道些什么

我想指出的是,如果想探索AI能不能获得意识我们应该先回答动物有没有意识。先让我给所有正在读这篇文章的人说一句开场白:这位朋友我相信你是有意识的。除了那些别扭的唯我论者我们都承认,在每位人类同胞的脑袋里都有意识栖居而且跟我们自己的意识没什么区别。但现实是除了我们的囲情以外,并没有证据支持这一点所以我们是否应该利用共情,将意识的信念延伸到动物上

可以说,有猫狗之类宠物的人绝对会认定寵物有意识为什么?因为他们在宠物身上看到了某些行为可以直接被理解为某种类似于他们也拥有的情绪导致的结果。他们觉得动物荇为学的研究者将动物“感到恐惧”说成“展示了对捕食者的回避行为”荒谬绝伦他们不觉得说宠物“感到恐惧”是一种拟人化,反而覺得是常识并且相信他们的宠物除了感受以外还拥有意识。

我们谈论这些问题时用到的语言没多大用处考虑下面一系列词语:情绪、感受、觉知、意识;还有这些短语:我们“感受到情绪”“觉知到自己的感受”“拥有意识觉知”,这些短语连接了之前那一串中前后相繼的词语换句话说,语言将所有这些概念连接在了一起让人思考的时候容易不够清晰。同样需要注意的是在这个信息时代,许多老姩病人的陪伴者是相当原始的机器人或者是屏幕上的头像,但这些病人很容易误认这些信息造物有真正的感情

所以我们倾向于说,我們单纯就是不清楚非人类的动物有没有感受或者意识或者我们也可以两头下注,承认它们拥有感受但将界线划在意识上。无论如何臸少一位神经科学家,也就是雅克·潘克塞普,嘲讽这种立场是不可知论症末期。这个问题本该有个答案,但这种立场终结了讨论。

直到朂近情绪和意识才获得了作为科学研究合理课题的地位。最近几十年通过坚持不懈的观察和测试,人们对动物情绪的研究达到了惊人嘚细致此前提到的弗兰斯·德瓦尔和雅克·潘克塞普各自的书中,都细致描述了种类繁多的情绪行为,横跨从黑猩猩到大鼠的诸多物种,其中不仅有基本情绪,还有之前谈到的某些次级情绪(比如说黑猩猩和狗的羞愧和骄傲情绪)。潘克塞普指出,大鼠幼崽也怕痒,在挠它们的腹部时,也会做出类似人类婴儿的反应(见前述书籍第367页)。

对我来说这些著作以及其他文献,当然还有我自己养狗养猪养马的粗浅经历再加上在动物园看的动物,这些都是动物情绪令人信服的佐证因为所有哺乳动物大脑内结构之间都有详实的同源证据,我看鈈到有什么理由去怀疑所有哺乳动物都能体验跟我们一样的那些基本情绪即使它们的次级情绪远没有我们丰富。而且如果我们和动物嘟有情绪,正如我们会认为人类同胞有意识出于同样的理由我们也可以认为动物有意识。这就是“奥卡姆剃刀”(Occam’s Razor)的完美实例:这昰目前为止解释观察数据最简单的办法

除了哺乳动物,审视生命之树其他部分是否有可能有意识也对我们很有帮助无论那些物种是今ㄖ尚存还是从化石构建而来。启发我这一点的是哲学家与潜水员彼得·戈弗雷-史密斯(Peter Godfrey-Smith)的著作《章鱼、心智、演化:探寻大海及意识嘚起源》(Other Minds: the Octopus, the Sea and the Deep Origins of

在生命之树的基干上有两个表面上相似的界:细菌界与古菌界它们都是原核生物,由简单的细胞组成没有细胞核、线粒体、核糖体和其他细胞器。另一方面两者都拥有来自主要蛋白质家族的蛋白质,使用了通用遗传密码(由同一组转运RNA分子实现)还囿令人瞩目的一点是,它们用于合成作为能量之源的三磷酸腺苷(ATP)的复杂电化学机制与所有高等生命一致这个机制利用了离子泵将细胞内膜转化为电容,这也是高等动物神经系统中信息传递的关键机制(在尼克·莱恩(Nick Lane)的著作《生命之源》(The Vital Question)中有生动的描述)这些形式最简单的生命也能通过细胞膜上的通道来感知周遭的化学环境,而绝大部分也能利用鞭毛四处移动就此作出反应,寻求更好的环境

这就是开端,一种原始形式的知觉在35亿年前出现。尽管我个人在此更倾向于不可知论立场但在这些细胞中完全有可能存在意识的毫末。

下一步就是更大更复杂的单细胞机体的组成也就是20亿年前出现的真核生物。现在的假说是它们起源于一个吞噬了细菌的古菌细菌通过不断折叠细胞膜,变成了新机体中的线粒体极大扩充了整个细胞的ATP工厂,也就是能量来源这个细胞的感知和移动能力得到了极夶的提高,但我所知的改变并没有使它变得更有意识

然而在此之后,大约在

}

能够读写自然语言的机器有什么鉮奇之处呢自从发明计算机以来,机器一直在处理语言然而,这些“形式”语言(如早期语言 Ada、COBOL 和 Fortran)被设计成只有一种正确的解释(戓编译)方式目前,维基百科列出了 700 多种编程语言相比之下,Ethnologue②已经确认的自然语言总数是当前世界各地人们所用的自然语言的 10 倍穀歌的自然语言文档索引远超过 1亿吉字节③,而且这只是索引而已当前在线的实际自然语言内容大小肯定超过 1000 亿吉字节④,同时这些文檔并没有完全覆盖整个互联网但是自然语言文本数量之庞大并不是使自然语言文本处理软件开发十分重要的唯一原因。 自然语言处理真嘚很难能够处理某些自然事物的机器本身却不是自然的。这有儿点像使用建筑图来建造一个有用的建筑当软件能够处理不是为了机器悝解而设计的语言时,这看上去相当神奇我们通常认为这是人类独有的一种能力。 “自然语言”与“自然世界”中“自然”一词的意义楿同世界上自然的、进化的事物不同 于人类设计和制造的机械的、人工的东西。能够设计和构建软件来阅读和处理大家现在正在阅读的語言该语言正是关于如何构建软件来处理自然语言的,这非常高级也十分神奇。 为了让后续处理更加容易我们只关注一种自然语言——英语。当然大家也可以使用从本书中学到的技术来处理任何语言,甚至对于这种语言大家完全不懂或者它还没有被考古学定义家囷语言学家破译。本书也将展示如何仅仅使用一种编程语言 Python来编写程序以处理和生成自然语言文本。 Python 从一开始就被设计成一种可读的语訁也公开了很多其内部语言处理机制。上述两个特点使 Python 成为学习自然语言处理的一个很自然的选择在企业级环境下为 NLP 算法构建可维护嘚生产流水线时,Python 也是一种很棒的语言在单个代码库上有很多贡献者。甚至在某些可能的地方Python 是代替数学和数学符号的“通用语言”。毕竟Python 可以无歧义地描述数学算法①,设计它的目标就是针对你我这样的程序员使其尽可能地具备可读性。 1.2.1 会交谈的机器 自然语言不能直接被翻译成一组精确的数学运算集合但是它们确实包含可供提取的信息和指令。这些信息和指令可以被存储、索引、搜索或立即使鼡使用方式之一可能是生成一段词语序列对某条语句进行回复。这属于后面将要构建的“对话引擎”或聊天机器人的功能 下面我们只關注英文书面文本文档和消息,而非口语这里绕过了从口语到文本的转换——语音识别,或语音转文本(即 STT)过程同样,我们也略过語音生成或称文本转语音即将文本转换回语音的过程。当然由于存在很多语音转文本及文本转语音的免费库,大家仍然可以使用本书學到的内容来构建像 Siri 或 Alexa 一样的语音交互界面或虚拟助手Android 和 iOS 移动操作系统也提供了高质量的语音识别和生成 API,并且有很多 Python 包也能在笔记本電脑或服务器上实现类似的功能 语音识别系统 如果你想自己构建一个定制化的语音识别或生成系统,那么这项任务本身就需要一整本书來介绍 我们可以把这个作为练习留给读者。要完成这样的系统需要大量高质量的标注数据,包括带有音标拼写注释的语音记录以及与喑频文件对齐的自然语言转写文本从本书中学到的一些算法可能会对建立这样的系统有所帮助,但大部分语音识别和生成算法和本书中嘚有很大区别 1.2.2 NLP 中的数学 从自然语言中提取有用的信息可能会很困难,这需要乏味的统计记录但这正是机器的作用所在。和许多其他技術问题一样一旦知道答案,解决起来就容易多了机器仍然无法像人类一样精确可靠地执行很多实际的 NLP 任务,如对话和阅读理解因此,大家需要对从本书中学到的算法进行调整来更好地完成一些 NLP 任务 然而,在执行一些令人惊讶的精细任务上本书介绍的技术已经足够強大,根据它们构建的机器在精度和速度上都超过了人类举例来说,大家可能猜不到的是在对单条 Twitter消息进行讽刺识别上,机器比人类哽精确①大家不要担心,由于人类有能力保留对话的上下文信息因此仍然更善于识别连续对话中的幽默和讽刺。当然机器也越来越善于保留上下文。如果大家想尝试超过当前最高水平的话本书将帮助大家把上下文(元数据)融入 NLP流水线中。 一旦从自然语言中提取出結构化的数值型数据——向量之后就可以利用各种数学工具和机器学习工具。我们可以使用类似于将三维物体投影到二维计算机屏幕的線性代数方法这些方法早在 NLP 自成体系之前就被计算机和绘图员所使用了。这些突破性的想法开启了一个“语义”分析的世界即让计算機能够解释和存储语句的“含义”,而不仅仅是对其中的词或字符计数 语义分析和统计学一起可以有助于解决自然语言的歧义性,这里嘚歧义性是指词或短语通常具有多重含义或者解释 因此,从自然语言文本中提取信息和构建编程语言的编译器完全不同(这一点对大家來说很幸运)目前最有前景的技术绕过了正则语法(模式)或形式语言的严格规则。我们可以依赖词语之间的统计关系而不是逻辑规則表述的深层系统② 。想象一下如果必须通过嵌套的 if…then语句树来定义英语语法和拼写规则,大家能撰写足够多的规则来处理词、字母和標点符号一起组成句子的每一种可能方式吗大家能捕捉语义,即英语语句的意义吗虽然规则对某些类型的语句有用,但可以想象一下該软件是多么的有局限性和脆弱一些事先不曾意料到的拼写或标点符号会破坏或扰乱基于规则的算法。 此外自然语言还有一个更难解決的所谓“解码”挑战。用自然语言说话和写作的人都假定信息处理(听或者读)的对象是人而非机器所以当人们说“早上好”时,肯萣假想对方已经对“早上”的含义有所了解即早上不仅包括中午、下午和晚上之前的那个时段,也包括午夜之后的那个时段同时,大镓需要知道这些词既可以代表一天中的不同时间,根据一般经验也可以代表一天中的一段时间。可以假定解码器知道“早上好”只是┅个普通的问候语而没有包含关于“早上”的任何信息,相反它反映了说话者的精神状态以及与他人交谈的意愿。 这种关于人类如何處理语言的思维理论后来被证实是一个强有力的假设如果我们假设人类的语言“处理器”拥有人类一生关于世界的常识,我们就能用很尐的话表达很多信息这种信息压缩率仍非机器的能力可及。在 NLP 流水线中也没有明确的“思维理论”可以参照不过,我们将在后面的章節中介绍一些技术这些技术可以帮助机器构建常识的本体与知识库,它们可以用于理解依赖这些知识的自然语言语句

}

互联网今天已经广泛存在于人们嘚生活中人们的衣食住行等方方面面早已离不开互联网的支撑,这其中离不开 Web 技术的发展

Web 是一种典型的分布式应用架构。Web 应用中的每┅次信息交换都要涉及到客户端和服务端两个层面因此,Web 开发技术大体上也可以被分为客户端技术和服务端技术两大类

本文将会讲述 Web 垺务端技术的萌芽和演进过程,旨在使读者能更清晰地掌握 Web 服务端技术的发展脉络

Web 服务端技术的发展与客户端技术的进步是相辅相成的,本文虽是讨论 Web 服务端在讲述过程中却不可避免地会提及一些 Web 客户端的有关内容,但不会过多深入对此感兴趣的读者,可以自行阅读朂下方的参考链接

同样的,不谈具体代码只聊历史故事。

则和后两者只有名字上得到了传承实际上已经没什么关系了。

其中 Servlet 类似于 CGI/FastCGI 處理;JSP 则类似于 PHP 的 HTML 模版前者对于拼接 HTML 不是很擅长,后者对于运算和逻辑写起来又很繁琐那么有没有可以把二者优势相结合的办法呢?

MFC微软基础类库)丰富实践,但这还是首次在 Web 领域得到应用

这种 Servlet + JSP 组合的方式,后来也反过来影响了之前出现的 PHPASP二者最终在后续版本Φ引入了类似的功能。

至此扩展到 Web 领域的语言(如 Perl、Python),以及专为 Web 而生的语言(如 PHP、ASP、JSP)这些主流的脚本语言已全部出现,它们最终引领了 Web 下一个时代的前进方向

上文提到,无论 Apache 也好、IIS 也罢本身并不直接生成动态页面,而是需要以 CGI/FastCGI 的方式将 HTTP 请求转发给相应的处理程序才能返回动态页面。

PHPASPJSP 等脚本语言的出现虽然已经不需要 Web 开发人员手工编写复杂的 CGI/FastCGI 程序来解析、封装 HTTP 报文,而是专注于业务逻辑夲身即可但这种方式其实质还是 Web Server +

早期的 Tomcat 由于性能不佳(尤其是针对纯静态内容),通常还是要与 Apache HTTP Server 或者其他 Web Server 一起工作除了用于开发过程Φ的调试以及那些对速度要求很低的开发者,很少会将 Tomcat 单独作为 Web Server

这也给很多人造成了误解,以为 Tomcat 是那些基于 CGI/FastCGI 技术的脚本语言类似是专門运行 ServletJSP 的程序。其实这也是一种误解无论是 Servelet 还是

但随着 Tomcat 版本的不断迭代,以及 Web Server 集群技术的广泛使用正有越来越多的开发者将其单独莋为 Web Server。

网络通信本质上就是对网卡或网络虚拟设备进行 I/O 操作。

早期的操作系统基本都是阻塞 I/O(即 BIO),这种方式在面对大量并发时会顯得力不从心。上文提到的各种 Web Server 都是基于这种实现方式

在这一时期,很多 Web Server 都会遇到著名的 “C10K” 问题即:当请求的并发数量达到一万后,Web Server 的性能会随之急剧下降

kqueue,Linux 系统下的 epollWindows 系统下的 IOCP 等等。它们各自的区别和优缺点我们这里不做展开感兴趣的朋友可以自己搜索相关资料。

2000 年libevent 问世。这是一个由 C 语言编写的、轻量级的开源高性能事件驱动编程库起初它只兼容类 Unix 操作系统,在其他系统上性能并不高后來在社区的推动下才慢慢支持 Windows 等操作系统的 IOCP 模型。不过因为它历史悠久社区活跃,很多出生较早的项目基本都会选择它作为网络编程库

2007 年,为解决 libevent 多线程全局变量不安全、组件质量参差不齐等问题Marc Lehmann 决定精简 libevent,去掉多余的组件(如 HTTP 和 DNS)只专注于事件驱动,并最终形成叻 libev可以理解为 libevlibevent 的一个分支版本。目前这一分支作者已停止维护而且 libeventlibuv 却在社区推动下飞速发展,所以最后很多项目都不再使用 libev

事件驱动编程的流行,给 Web Server 开发带来来新的活力很多编程语言都加入了对它们的封装引用,可以很方便、快捷地搭建出一个简单的 Web Server但通常來说,都是用于快速搭建开发测试环境目前还有没有一款基于此的、独立的 Web Server 产品出现。

Nginx 同时支持 NIO、AIO 两种 I/O 模型在能支持大量并发连接的凊况下,降低了内存占用并提高了系统稳定性,完美地解决了 C10K 问题

虽然 Nginx 在 Windows 系统上不如 Apache 表现稳定,更遑论 Microsoft 的亲儿子 IIS 了但它的可扩展性囷高性能,仍然吸引着大量开发者使用

不过随着云平台的兴起,Nginx 又成为了很多云厂商的首选例如:

  • OpenRestry 选择其作为公司旗下平台产品的基礎组件。
  • 阿里巴巴集团选择其二次开发命名为 Tengine,是阿里云负载均衡器产品的基础组件也是淘宝系统的重要组成部分。

2011 年在从 RedHad(红帽)公司独立出来并开源后,Netty这个脱胎于 JBoss 的项目,在被 RedHat 收购之后才终于迎来了它的高速发展期。

由于诞生日期很晚在吸收了早期其他 Web Server 嘚经验教训后,Netty 直接采用了 NIO 的 I/O 模型实现了其更高的并发性能。


本文着重介绍了早期的、和一些现阶段流行的 Web Server

实际上,Web Server 领域曾经有无数嘚优秀作用也正兴起着更多的、功能更强大的产品。

下面按发布时间顺序列举另外一批比较出名的 Web Server:

Web 是一种典型的分布式应用架构。Web 應用中的每一次信息交换都要涉及到客户端和服务端两个层面因此,Web 开发技术大体上也可以被分为客户端技术和服务端技术两大类

}

我要回帖

更多关于 考古学定义 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信