哈希算法背后的男人:他为尚不存在的问题找到了答案
━━━ ━━━
当时是 1958 年 11 月,在一个为期 6 天的科学信息国际大会上,发明家汉斯・彼得・卢恩(Hans Peter Luhn)展示了其研制的一系列电气机械设备。这些设备看起来普普通通,与当时的其他计算机设备相似,四四方方,相当实用的样子,专门用于抓取和分类成堆的穿孔卡片,并把它们放入卡槽或卡箱中。
与其他计算机不同的是,卢恩的设备并非用来处理数字或计算,而是用来处理文字和语句的。其中一台设备尤其引人注目,它使用了一种被卢恩称为 KWIC(KeyWord in Context 的首字母缩写,为 “文中关键字” 之意)的算法。输入一大段文字(通常是 500 到 5000 个单词的文章)后,KWIC 系统可以自动地快速创建一套索引。
当时,即便对最有经验的专家来说,编制索引、分类和组织书面信息也仍然是个艰苦的过程。而且很多领域的信息量增长飞快,无人能及。
人们迫切需要一种更好的摘要和汇总方法。在华盛顿特区的图书管理员和信息科学家们原本沉静的集会上,KWIC 系统的这场演示无异于是件惊天动地的大事,全美所有的相关报纸都在报道卢恩的这一惊人发明。
到 20 世纪 60 年代初期,KWIC 已经成为数百种计算索引系统的设计核心,包括化学文摘社(ChemicalAbstracts Service)、生物学文摘(Biological Abstracts)和美国科学信息研究所(Institute forScientific Information)等使用的系统。有一位专家曾将 KWIC 的伟大问世等同于 “化学领域试管的发明”。
卢恩,这位 IBM 的高级工程师,还将 KWIC 集成到企业界的 “智能系统” 中,旨在识别并将相关信息传递给大型组织内特定的个人。KWIC 基本上就相当于那个时代的搜索引擎,让用户能够迅速找到所需的信息。
现在,计算机可以解读信息,随时提供餐馆评价、体育比分和股票价格,而我们对此已经习以为常。
然而,在卢恩那个年代,计算机仍是很原始的。他试图操纵文本的做法拓宽了人们对计算机及其能力的思路,而他的这种想法,时至今日仍是网上购物、自动翻译以及遗传研究等现代算法的基石。当然,在 20 世纪 50 年代,上述许多应用还是无法想象的。
本文将探讨是什么驱使卢恩为这些尚不存在的问题找到了答案 —— 一种被称为哈希函数的解决方案。
━━━ ━━━
第二次世界大战后的那几年,也正是电子计算机成形的那几年。战争期间建造的各种计算机,为弹道学、原子武器和密码学进行了必不可少的计算。冷战的紧张局势确保了计算机发展所需的持续资金,其结果是计算机变得更快速,更准确,更强大。但其主要用途 —— 数字处理和存储 —— 却变化甚微。
在这个新生的计算机世界里,卢恩展露出了锋芒。他一生穿着考究,在 1941 年初抵 IBM 时,相较计算机行业而言,他可能对纺织行业更熟悉一些。他的许多发明似乎都属于更早的前数字时代,那个有着机械计算器和计算尺的年代。20 世纪 50 年代,数字计算机逐渐取代了他的电气机械设备,然而他的思想,虽然由于用途变化历经了变更和重组,现在却已渗透到了我们能想到的几乎所有软件之中。
卢恩 1896 年出生于德国巴门,他的父亲约翰(Johann)是一位印刷大师。他显然是一位对孩子们的杰作非常宽容的父亲,有一次,卢恩和他的弟弟在家中的花园里建了一条微型铁路,其中长达 70 米的轨道是熔掉了父亲印刷机中的铅后制成的。
高中毕业后,卢恩前往瑞士学习家族生意。但是第一次世界大战以及在德军中度过的一段岁月,中断了他的印刷业生涯,战后他开始从事纺织品贸易。卢恩于 1924 年来到美国,是为了寻找适合开纺织厂的厂址。在纺织业,卢恩就展现出了发明天赋。1927 年,他发明了一种尺子形状的装置,可用于测量布料织数。时至今日,这种叫作纱条均匀度光学测定仪(Lunometer) 的测定尺仍在由卢恩创立的工程咨询公司 H.P.Luhn &Associates 进行出售。
卢恩学什么都很快,涉猎了多个领域。他是一名专业的登山运动员,一名厨艺精湛的美食家,也是一名风景画大师。在 20 世纪 30 年代,他的众多发明专利包括折叠式雨衣、女士长筒袜塑形装置、一款游戏桌和 “鸡尾酒神谕”,后者是一种鸡尾酒调制指南,能告诉用户如何用手头上的材料调制各种鸡尾酒。
但是卢恩真正的兴趣在于信息(特别是文本)的存储、通信和检索,这也是他加入 IBM 的主要原因。卢恩被授予了 “发明家” 的称号,成果颇丰,最终为 IBM 提供了 70 项专利。虽然他可以随心所欲地选择攻克任何他喜欢的问题,但他的许多发明都集中在使用包括电子计算机在内的各种设备来处理信息。
比如,在 1946 年和 1947 年,卢恩曾致力于创建一种机器可读的打字机打印文件。设备上有一条金属条带可插入打字机,能够将有磁性的图案印在纸上,然后可用机器读取这些磁性图案。
不久之后,他开始与麻省理工学院的两位化学家马尔科姆・戴森(MalcolmDyson)和詹姆斯・佩里(James Perry)一起工作,研制一种可以使用穿孔卡片自动搜索化学化合物的机器。每张穿孔卡片上都编码有一种特定化合物的信息。用户在机器中插入一张 “提问卡片”,上面列出一组搜索条件,机器将对照这组条件对所有的化合物卡片进行比对和分类。卢恩的这台扫描机器是高度专业化的,但他仍然在寻找更通用的方法来自动处理信息。
人们对信息非常痴情。战后的几年间,科学和工程论文发表数量激增。许多专家担心 “信息超载” 会压垮研究人员和商务人员。
范内瓦・布什是美国庞大的战时官方科学机构的领袖,也是美国国家科学基金会的创建人之一,他也曾提出过一种写字台大小的电子机械设备 Memex,用于存储和关联信息。
布什的想法未曾实现,但卢恩的想法却走进了现实。1954 年 1 月 6 日,他申请了一项美国专利:“用于验证号码的计算机”。这种手持机械装置旨在解决一项简单的实际问题。当时,各种各样的识别号码(如信用卡号码和社会保险号码)开始在人们的公共和私人生活中发挥重要作用。但这些数字难以记忆,而且有可能被错误地转录或被人故意伪造。所以迫切需要一种能够快速验证识别号码是否有效的手段。
卢恩的掌上电脑实现了这一功能,这台电脑使用了他开发的一种校验算法。对一串有 10 位数字的号码,电脑将执行以下操作步骤:
-
将每隔一位的数字翻倍 -
如果结果为 10 及以上的数字,则将该结果的各位数字加起来得到一位数字(例如 “16” 将变成 1+ 6 = 7) -
将新号码的全部 10 个数字相加 -
乘以 9 -
取这个结果的最后一个数字
更重要的是,卢恩设备的这些原理和部件成为数字时代最重要的算法之一 —— 哈希算法的基础。这种被广泛使用的算法,为我们提供了一种组织信息的强大手段,很容易被计算机找到。就像烹饪切碎的牛肉和土豆一样,哈希算法用各种方法切割和混合数据,这种数据混合如果能够巧妙部署,将可以加速多种类型的计算机操作。
1953 年初,卢恩曾撰写一份 IBM 的内部备忘录,在文中他建议把信息放入 “桶” 内以加快搜索速度。
几十年来,计算机科学家和程序员们对卢恩的方法进行了改进,并推出了新的用法。
但基本的思想仍然是一致的:使用数学方法将数据组织成易于搜索的桶。由于组织和搜索数据是计算中普遍存在的问题,因此哈希算法对密码学、图形学、电信和生物学都是至关重要的。每当你通过网络发送一个信用卡号码或使用文字处理器里的字典功能时,哈希函数都在发挥作用。
━━━ ━━━
卢恩的计算思想远远超出了简单的查找。
他认为计算机可以是一种复杂的文本操纵器,能够用于阅读和理解书面语言,然后建立索引并组织信息,以解决科学和商业中的实际问题。
到 1958 年,他的化学卡片分类器已经演变成了通用卡片扫描仪和 9900 专业索引分析仪,他曾在华盛顿特区的会议上对它们进行展示。这些电子机械设备可以根据用户的搜索条件,对打孔卡片进行搜索和分类。
然而,卢恩真正引起轰动的发明是用于构建用词索引的计算方法 KWIC。
词语索引是按字母顺序排列的书或文稿中用到的关键词列表,它就像是一个索引,但只列出文本中出现的实词,而不是概念(并且排除了诸如 a 和 the 这样无关紧要的词汇)。长期以来,词语索引一直被应用于神学和语言学领域。举例来说,《圣经》的词语索引就会显示使用了 “love”(爱)这个词的所有实例,包括各种引用、章节和诗句等。
在全文自动检索出现之前,构建词语索引是一项艰巨的工作,而且通常只会对《圣经》或莎士比亚文集这样的重要作品进行。
卢恩的数据桶方案是针对数字进行的,而他的 KWIC 词语索引系统的目标则是文本。
两者都使大量的信息能够被容易地搜索到。举一个非常简单的例子,假设你想为以下 4 本书的英文名称创建一个词语索引:《飘》(Gone with the Wind),《战争与和平》(War and Peace),《风之影》(The Shadow of the Wind),《战争之影》(Shadows of War)。
这些书名的 KWIC 一致性列表会生成为:
Gone With the Wind
War and Peace
The Shadow of the Wind
Shadows of War
War and Peace
Shadows of War
Gone With the Wind
The Shadow of the Wind
KWIC 算法按照所有可能的顺序重新排列标题中的单词,然后再按字母顺序将每种可能列出。其结果是一个完整的关键词列表(包括除介词、连词和冠词以外的所有词汇)。
科学界迅速采用了卢恩的 KWIC 系统。卢恩知道这一系统对商业用户也非常有用。
1958 年,他为《IBM 研究与发展杂志》撰写了一篇题为《一种商业智能系统》的文章,其中他提出了一种可以自动生成文章摘要并从摘要中提取 “行动要点”,然后将结果分发给组织内相应人员的系统。卢恩认为解决信息超载问题意味着要设计一种快速进行信息分类的方法,让人们免受无关材料的负担。
《纽约时报》在卢恩 1964 年的讣告中这样描述了他的自动摘要系统:
“卢恩先生在一次演示中,将《科学美国人》杂志中一篇有 2326 个单词的关于神经系统荷尔蒙的文章,以磁带的形式插入到一台 IBM 计算机中,并按下一个按钮。3 分钟后,计算机的自动打字机打出了 4 个句子,这 4 个句子给出了文章的要点,也就是说,机器已经自动生成了摘要。”
卢恩的自动摘要程序首先会计算一篇文章中所有单词出现的频率,在舍去非常常见的单词之后,系统会自动锁定高频词汇集中出现的一些句子。这样的句子会被系统认定为文章整体内容的代表,因此会被放入摘要中。这是一种纯粹的统计方法,而非试图去理解文章中的词汇或它们之间的关系。
但是,就像 KWIC 系统展示的这样,计算机能够富有成效地将文本组织成人们更易理解的形式。
━━━ ━━━
卢恩 1961 年从 IBM 退休,3 年后因白血病离开人世,未能目睹互联网和网页带来的深刻变革。
除了在一些信息专家、纺织品制造商和历史学家的有限圈子外,他的名字早已被人遗忘。但是,卢恩的思想是永恒的。
今天,哈希算法在管理和保护我们的数字生活方面扮演着重要的角色。当你在网站上输入密码时,服务器可能会存储密码的哈希版本。当你使用安全连接访问网络(网址以 “https” 开头)或使比特币买东西时,哈希算法也发挥着作用。对于 Dropbox 和谷歌 Drive 等云服务来说,哈希算法使得存储和共享文件的效率更高。在遗传学和其他数据密集型研究中,哈希算法则大大减少了筛选大量数据所需的计算时间。
哈希算法已经将计算机变成可以用字母和单词进行推理的文本工具。谷歌翻译、谷歌 N-gram、谷歌关键字广告和谷歌搜索都致力于以某种方式确定文本的含义。
网络上的信息爆炸已经使自动阅读和理解对商业、科学、和每个人来说都至关重要。哈希算法的发展与文本相联系,体现了卢恩对文字、句子、关键词、摘要、索引和文摘的思考。
这是卢恩留给我们的遗产:他向我们展示了电脑和计算不仅仅是数学、统计和逻辑的天下,而且也是语言、语言学和文学的疆土。在他那个时代,这是一种关于机器的革命性的想法。
技术史学家迈克尔・马奥尼(Michael Mahoney)称计算机是 “一台千变万化的机器”:它们一机千面,静待打造,用途多样。
即便是现在,我们也往往把计算机狭义地看作是一个每秒能够执行多项计算和操作的大型数字计算器。汉斯・彼得・卢恩对计算机的看法则更有远见。
在展望计算机的多样性时,他帮助我们开拓了诸多前景光明的全新探索领域。