06 从验证码谈起
古代君临天下的皇帝,如何下旨调遣驻守千里之外的军队?
凭借以每秒30万公里光速传递的电磁波,千万里的距离根本不在话下,眨眼即达。但显然这种远程通信手段那时压根就不存在。若以吼声通信,以每秒343米的声速传播,千里之外几十分钟可达,也相当不错的——但哪有那么大的“吼声”呢?而烽火能传递的内容局限性又太大。
放只信鸽,或其他有点灵性的动物送过去吗?恐怕很难令人放心,要是信鸽被谁打下来就误大事了,要是误入敌方领地,军机泄密就更是灾难了。
看来只得人去。派人“八百里加急”,驿站换马接力,两天之内将皇令送达远方的统兵将帅。
然而,还存在一个明显的漏洞。即便军队将领认得来人,又怎么确保这人不是叛党派来的呢?即便熟悉皇帝的手迹而且来人怀揣的皇令看似真迹,但对蓄谋已久的逆党而言,通过充分练习来模仿伪造,也非难事。
历代朝廷是怎么对付这个难题的?
“符”,即符节,是中国古代的一种信物。调兵遣将所用的符就是兵符,常做成老虎的形状,称为虎符,多用金属制成。兵符分左右两半,分别称为左符和右符,右符存于朝廷,左符发给出征将帅或外任官员。兵符由朝廷专管,制作精密,几乎不可能伪造。
皇帝调遣在外的军队,会派人持右符抵达军队驻地。只有左符右符对接得严丝合缝,驻地统帅才算完成对来人的“验明正身”,认定其确为皇帝所派。
现代汉语中的“符合”一词就来源于此。
“验明正身”历来在很多场合都是一件首先要做的事情。
上网要进入一个系统,除了需要输入用户名和口令,常常还需要额外输入一个“验证码”。
这里要讲的不是“手机短信验证码”。要你的手机短信验证码,其目的是验证你确实拥有你提供的那个手机号码以及带有该号码的手机。
这里要讲的,是那种显得特古怪的“验证码”,比如在乱糟糟的背景里,有几个歪歪扭扭、模模糊糊的字母和数字,好像故意要弄得让人难以辨认似的。
明明已经输入了用户名和密码,不是已经可以“验明正身”了吗?还让我输入额外的“码”,一堆模糊难辨的东西,这不是故意作弄人吗?
让你输入这古怪“验证码”的目的究竟是什么呢?
没错,它就是要“故意作弄”一下,看你究竟是不是人!
这“古怪验证码”,其专业术语为“CAPTCHA”,它是“Completely Automated Public Turing test to tell Computers and Humans Apart”的首字母缩略词——“全自动区分计算机和人类的公开图灵测试”。
可见,这是一种具有特殊目的的验证码,即要区分是人还是机器,例如判定登录系统者是一个人类用户还是一个计算机程序。因此,中文笼统地俗称CAPTCHA为“验证码”是不合适的,因为还存在用于其他目的的验证码,例如前面提及的用于验证手机和手机号码拥有者的验证码。
让系统用CAPTCHA区分人和机器,确保是人而不是机器,有时是必要的。例如,要确保正在登录的是正常的一个人类用户而不是一个黑客用来试图破解登录密码的计算机程序。再如,要确保系统不被自动“灌水”或发布广告的聊天机器人侵扰。
CAPTCHA采 取 挑 战-应 答 认 证(challenge-response authentication)方式,确保行为主体是人而不是计算机程序。因此,CAPTCHA提出的挑战问题或任务,应是对人比较容易而对计算机程序比较难的,如识别模糊扭曲的字符就是最初CAPTCHA常用的方式。
但显然,随着机器能力的不断提升,最初的CAPTCHA办法就有问题了,比如扭曲的字符对机器也不难了,于是就会用上对机器来说更具挑战性的任务,如要求识别水果或交通标识等,这时就得看懂简短的自然语言题目(如“把下列图片中所有的水果挑选出来”)。总之就是采用对人易而对机器难的任务。
CAPTCHA虽然其全称中含有“图灵测试”,但它与真正的“图灵测试”根本不是一回事,最多可以称为弱得多的“反向图灵测试”。CAPTCHA是由机器(计算机系统、软件、程序)来测试一个欲使用它的主体,以区分出该主体是人还是机器——换句话说,只要能区分人与机器就行,并不关心机器是否会思考,是否具有多高的智能;而“图灵测试”则是由人来测试机器,其目的是评估机器是否具有人一样的思考能力或智能水平——这比CAPTCHA的目标高得多。
图灵测试与CAPTCHA的这一差别非常重要,是准确把握图灵测试这个概念的关键,值得再次强调:CAPTCHA就是区分人机;图灵测试则是测试机器的智能水平,即以人类智能为比较基准的机器智能水平(哪怕有时不妨仅限于某一方面或某个层次),因此其根本目的并非区分人与机。
图灵测试是1950年由图灵在他的论文《计算机器与智能》(Computing Machinery and Intelligence)中提出的,是要回答“机器能思考吗?”(“Can machines think? ”)这一人工智能领域的根本问题。
图灵测试的典型方式是这样的:
总共有三个角色,包括两个测试对象和一个测试者。测试对象A是一台计算机,测试对象B是一个人;测试者C是一个人。
三个角色相互隔离,交流只能通过文字渠道,就像现在不用音频也不用视频的私聊一样。测试者C向测试对象A和B提问,A和B回答。通过充分的问答之后,如果测试者C不能区分出对象A和B哪个是人哪个是机器,则机器A就通过了测试,表明它具有与人类相当的智能水平。
注意,虽然测试结果取决于测试对象机器和人的表现是否能被测试者区分,但这并不意味着测试目的是为了区分机器和人——不能颠倒因果,不能弄混动机和结果。
上述典型测试框架,有的称为“标准图灵测试”。除此之外,当然还有其他可能,比如一个人类测试者,面对一个测试对象——以各一半的概率出现人或计算机,测试者向测试对象提问,如果整个过程中无法区分人和计算机,则计算机通过测试。其实这与标准图灵测试没有本质不同,只是把“并行”改成了“串行”而已。
有一个微妙因素会对图灵测试结果产生影响:是否应该让测试者知道有计算机参与测试,是否需要“盲试验”?人们发现,测试者知道和不知道有计算机参与,测试结果相当不同。
其实,所谓“盲试验”,还要看谁“盲”。单盲试验中,试验者(如图灵测试中的测试者)完全知情,即“不盲”,而试验参加者(如图灵测试中的测试对象)不知情,即“盲”;双盲试验中则是试验者和试验参加者“双盲”。
标准图灵测试中,假如是这种情况:两个测试对象计算机A和人B都知情,即“不盲”,反倒是测试者C不知情,即“盲”(比如不知道某一轮测试中是否有机器参加),那么这应该属于“单盲试验”,但与通常的单盲试验中是试验者知情的模式相反。这种情形其实更接近图灵原文中描述的方式:他称为“模仿游戏”,即计算机A尽量模仿人类的行为以诱使测试者C产生错误判断,即把它判定为一个人——可见计算机A是“知情”的。
实际有没有机器通过了图灵测试呢?
罗布纳奖(Loebner Prize)年度比赛采用标准图灵测试,即一人类裁判同时与一计算机程序(如聊天机器人)和一人类个体进行文本对话,并根据回应情况判定谁是谁。比赛要选出最像人类的计算机程序。
让我们看看最近(2018年)的结果吧:
进入决赛的4个聊天机器人,无一能够骗过人类裁判而被认为是人,而且差距太明显了——其中裁判们给冠军的平均分数(代表“像人”的程度)仅为33%。
这个33%还并不意味着机器与人类的智能差距只有67%——实际比这大得多。
当然,在有的专门领域,机器已胜过人类,甚至是完胜,比如下国际象棋、下围棋。
在下棋这样的领域进行标准图灵测试,结果会是怎样的?是人类测试者不能区分机器和人吗?不,完全能区分:强的那个是机器,弱的那个是人。如果能区分,按照标准图灵测试的描述,那不就是没通过图灵测试吗?比人还强却被判定为没通过测试,是讲不通的。
看来,图灵测试的描述可稍加改进:如果人类测试者选出的强者是机器,则该机器通过图灵测试。这正好说明,跟反向图灵测试不同,图灵测试本质上不是“区分人机”,而是“评估机器的智能水平”。
当一作画程序和一普通人分别画了一幅画,一个显得基本功特别好而另一个完全是业余水平都算不上,于是人类裁判毫不犹豫判定好的那一幅是机器作的。这个结果不仅不应该被看作是对机器的否定,而且应该恰恰相反。
与此形成鲜明对比的是,首次罗布纳奖是被一个毫无智能可言的程序夺得的,原因是它被设计成会出现拼写错误,人类裁判毫不犹豫就认为它是人类,因为一般来说机器不会出现拼写错误。这种荒谬结果是必须避免的。
所以,图灵测试必须去挑选“最强”的,而不是“最像”的。
在下国际象棋、下围棋这样的领域,最强的就是机器了,可以说它们已彻底通过了图灵测试。
不过,这只能叫作“主题专家图灵测试”(subject matter expert Turing test),它比起一般的图灵测试——本质上对应着通用人工智能(artificial general intelligence)——弱得太多了。
而且,通常的图灵测试还只是“纸上谈兵”的形式——不见面、不发声,所以主要测试的是思考方面的能力。如果要见面、要发声,机器还必须具备额外的能力,比如感知和行动,要能看能听,会走路拿东西。这种情形下的图灵测试,叫作“完全图灵测试”(total Turing test)。
如果觉得这还不够,那就索性把智能机器人放到人类社会中去,让它在现实中跟人类同台竞技。假如结果是它被人认为是人,那么它就通过了完全图灵测试;假如它被人认为不是人但强于人,那么它通过的,连完全图灵测试都“难以名状”,只能称之为——终极图灵测试。