ChatGPT-4
之前对ChatGPT
进行过两次测试,第一次
是刚推出时进行的面试测试,纯粹从语言交流的角度来说其表现可以用惊艳来形容。第二次
是用中英文数字转换为主题进行的编程测试,结论是ChatGPT并不真的会写代码。
前几天看了GPT-4 Developer Livestream,对ChatGPT
又有了进一步的了解。
在视频的TaxGPT
示例中,开发人员把计税的一大段规则描述文字喂给了ChatGPT,后者理解了规则并正确给出了答案,看起来非常棒。于是我想当初让ChatGPT写程序转换中文数字也许有点强人所难了,因为跟TaxGPT
的演示过程不同,我并没有把完整的规则告诉它,而是像面试真人一样在假设对方知道“中文数字”这一概念的前提下让AI写程序。
要知道答案很简单,再测试一下就知道有没有。
我先粗略把中文数字的规则大致总结了一下:
-
个位数:“零,一,二,三,四,五,六,七,八,九”分别对应”0,1,2,3,4,5,6,7,8,9”
-
单位:“十,百,千,万,亿”分别对应“10,100,1000,10000,100000000”
-
读数规则
-
A. 10到19的读法是“十+数字”,比如“11”通常读作“十一”而不是“一十一”。但是当10到19出现在大数的尾数的部分时需要把“一”包含进去,比如“212”通常读作“二百一十二”而不是“二百十二”
-
B. “零”的读法。0出现在末尾的时候读法是按前面出现最近的单位来,比如“20”读作”二十”,”300”读作“三百”。如果0出现在中间,那么当前数字跟之前出现的单位之间出现断档的时候需要在中间加上“零”,比如“2048”中的48与前面的单位1000之间出现断档,就应该读作“二千零四十八”而不是“二千四十八”。再比如“10030040”应该读作“一千零三万零四十”
-
C. 整数规则。基本规则是“数字+单位”,比如“100”读作“一百”,”3000”读作“三千”,”30000”读作“三万”,”300000000”读作“三亿”。数字位于10000到100000000之间的时候用“百万”或者“千万”,比如“4000000”读作”四百万”,“50000000”读作”五千万”。
-
D. 其余的数基本规则是“数字+单位+…+数字+(单位)”,比如“1234”读作“一千二百三十四”,“1638410240”读作“十六亿三千八百四十一万零二百四十”。
之所以把这个“自然语言描述的规则”而不是程序化的规则告诉ChatGPT,是因为把程序化的规则(类似于伪代码)转换为程序代码根本不需要AI,而我们希望AI能做的是“理解用自然语言表达出来的意图并写成代码”。
先是ChatGPT 3.5
。把规则告诉它,然后让它按规则写程序。结果大失所望,跟上次差不多,生成的几段代码没有一段能工作。于是换了个角度,不让它写代码而是随机给出一些中文数字让它转换,结果好得多!大多数情况下它能给出正确的结果。不过如果像我在下图中那样指出它“零”的用法有错后下一次它还是会犯同样的错误。
再是Bing。Bing号称发布之日起就基于GPT-4.0,但也许微软针对搜索引擎微调过,让它角色扮演阅读理解能手和程序员写代码有点爱理不理的,结果毫不意外。
最后是最新发布的GPT 4.0
。实测下来在同样的语境下跟GPT 3.5
相比可以说完全没有进步——在了解了规则以后不能写出正确的代码,只能给出不知道哪里偷来的甚至带有明显错误、完全没法执行的代码。
我于是又换了个角度,直接问它知不知道怎么把中文数字转换为阿拉伯数字,有趣的事发生了。
首先它给出了一个颇为程序化的步骤。但我随机出题让它按这些步骤转换的时候结果出现了错误——虽然看起来它确实是按照它自己给出的规则在转换。在被指出答案错误后它竟然胡乱凑答案——比如我告诉它转换结果应该是某个数,它就重新生成一遍并说抱歉答案应该是我说的那个,但转换的过程是错的。
最后我想既然它自己知道规则,而且并不是我喂给它的规则,不妨让它用代码实现一下。然而它生成的代码似是而非,没法工作也不能正确反映它自己给出的规则。
测试到这里可以下结论了,我的看法也维持不变:ChatGPT
会是非常非常好的工具,但根本不会编程。
斯坦福有个人写了篇论文《Theory of Mind May Have Spontaneously Emerged in Large Language Models》,用测试儿童心智的方法测试了ChatGPT,结论是ChatGPT达到了9岁儿童的心智。通过自然语言让这个年纪的儿童了解中文数字的规则显然不是什么难事,让他们举一反三的应用也没什么问题,这一点与ChatGPT的表现类似。但要把规则写成程序代码,别说这个年纪的儿童,就算是成年人,甚至是程序员都不是轻而易举的事,其中涉及到该从低位还是高位开始循环,临时变量的使用,循环在什么条件下该如何跳转等等很tricky
的东西,相比之下自然语言虽然看起来模糊但其实很直观易懂。
当然这并不是说ChatGPT能编程不可能实现,只是目前为止ChatGPT要么没有往那方面努力,要么目前的人工神经网络复杂度还不够。Ted Chiang
在《ChatGPT Is a Blurry JPEG of the Web》一文中说ChatGPT是互联网的有损压缩
,说不定它丢弃的那些信息正是导致它在一些简单的数学以及本来可以精确的事情上犯糊涂的原因。人类大脑的神经网络既能处理模糊信息(自然语言)也能处理精确信息(数学、编程等),更包括记忆那种可能一开始模糊但在不断加强下会变得越来越清晰的信息。人工神经网络虽说理论上可以拟合任何函数,但函数能否用来描述大脑的所有活动需要打个问号。
目前网络上所有关于ChatGPT会编程的说法都有一定的误导性。如果把“会编程
”定义为能像人一样能分析和理解问题并转换为程序的话,毫无疑问ChatGPT不具备这样的能力,更不用说实现并且维护一套完整的应用系统,否则GPT 4.0应该能轻而易举地把它已经了解的中文数字规则转换为代码。人们所见到的ChatGPT会编程的各种假象包括但不仅限于下面这些:
-
把一段用A语言写的代码改写成B语言——这是常见的满足人们复制粘贴需求的功能,但根本不需要ChatGPT这样复杂的人工智能就能实现。
-
GitHub Copilot——能根据上下文给出一些建议,以及根据描述性的注释生成代码片段。但这不叫会编程,仅仅是理解了自然语言的描述后从学习过的代码库里拿出一段而已,简单来说就是更高级的
代码模板
功能。 -
GPT-4 Developer Livestream里面演示的根据草图生成网页代码片段——看起来很酷,但仔细想一下就会明白那只是官方宣传的噱头而已,和
GitHub Copilot
读懂注释并生成代码没有本质区别,换成理解图片罢了。
其它领域不谈,就编程来说ChatGPT之类的AI最好的应用就是在非常确定的小场景下帮助开发者生成代码以便省去不必要的体力劳动。比如常见的把对象A的所有属性复制到对象B的同名属性;生成一段框架代码来验证用户输入等——那些担心自己工作会被AI取代的程序员就算每天做的都是类似的体力劳动,需要担心的对象也不是AI。因为AI根本还不具备根据需求生成完整的代码并且维护这些代码的能力。
有人会说一些需求不就是接受输入,查询一下数据然后显示表格吗,完全可以用AI来做啊?确实存在一些相对固化的场景,这在网页上尤其常见。但在ChatGPT出现之前的那些低代码框架如Shoptify,Wix等早就已经实现了,丢工作根本不需要等到AI出手。
AI毫无疑问会成为有史以来最好的工具,会让人进一步从重复枯燥的体力劳动中解放并释放更多的生产力。一个容易得出的结论是,如果一个程序员担心自己的工作会被取代,那多半会得其所望——只不过不是被AI而是被更善于使用工具的程序员取代。那些讨厌重复劳动、在每天的工作中本来就在发明和使用各种工具使自己高效工作的开发者只会为有了AI这样的好工具而欢呼,根本不会担心自己的工作被AI取代。