

面对“无所不能”的大语言模型,如何对症下药?
作者:三联生活周刊文·高品天“就跟用锤子硬砸一样,除非你是模型架构的设计者,那么一切用某种机器学习模型去解决一个现实问题的尝试都是缺乏想象力的Python猴子行为,尤其缺乏数学上的想象力。但是现在,我有一个现实问题需要你立刻去解决。”
前不久,我刚刚结束了我的博士生涯,这也宣告我打磨了四年的“面对化学领域的问答系统”终于完成。历经三个月的论文修改过程,给了我一个系统性回顾过去四年研究成果的机会,在此期间,上面那段话常常在我的脑海中萦绕。
这段话来自我的博士生导师老马。老马是德国人,数学家,泛“人工智能”的前批判者,现拥护者与研究者。“Python猴子”(Python Monkeying)和“抡锤子”(Hammer It)是老马谈论人工智能时常用的两个比喻。“Python猴子”的说法来源于法国数学家埃米尔·博雷尔在20世纪初提出的“无限猴子定理”(Infinite Monkey Theorem):一群猴子在打字机上跳舞,如果时间够长、猴子够多,总归是能打出莎士比亚全集的。Python猴子,顾名思义,就是比喻复制粘贴和调用已有代码,试图攒出一套可行解决方案的工作,入门门槛较低并常用于机器学习的Python代码就是其中一种。“抡锤子”的意思正如其字面含义,常用于形容机器学习模型的训练过程,指用暴力方式、通过大量数据去训练一个模型,建立输入与输出的关联,至于这种关联是如何建立的,很难解读,在面向大众的人工智能科普文章里,常常用云遮雾绕的“黑箱”一词来形容。
这两个说法话糙理不糙,基本上概括了我四年的博士生涯。我的博士课题的任务就是建立一个化学问答系统:在化学领域内,以用户问题为输入,自动查询数据库,输出回答。该课题涉及大量的自然语言处理(Natural Language Processing)任务,所以需要训练各类自然语言处理模型。我写了很多代码,当然也复制粘贴或者调用了很多Python代码,并且反复尝试让它们跑起来,所以我算是一只Python猴子。我的模型训练过程也较为粗糙,所以也算用锤子砸。我在自然语言处理领域的经历始于2017年前后,当时我开始使用NLTK、Stanford CoreNLP、Gensim等一系列现成的工具来处理数据。这些工具帮助我进行文字分类、关键词识别等任务。2018年10月,BERT模型出现,我立即跟进学习。BERT的引入对我的工作产生了巨大的影响,因为它具备了强大的预训练能力,使得在拿到手的时候就已经具备相当的语言理解能力。我将BERT比喻为一个已经具备广泛教育背景的人,虽然不一定懂得具体的专业内容,但不需要多少指导,就足以帮助我做文本摘要、划重点等任务;如果经过专业领域的指导,就可以胜任领域内的很多工作,比如文本的分类、句子中关键要素的识别等。顺带一提,2019年2月GPT-2模型出现。GPT-2具备强大的文本生成能力,也包括生成代码的能力。GPT-2可以理解为一个同时具备一定理解能力和写作能力的人,能够在接收任务后直接产生结果。但是很遗憾,当时我认为生成模型可能与我的工作关系不太大,还是把研究重点放在了BERT上,因此错过了一个很好的研究方向。
在计算机世界之外,包括我所在的化工领域,很多人也都注意到了BERT这个具备强大语言分析能力并非常易用的模型,并开始将其应用于各个领域,取得了很好的效果。对我而言,自然语言处理是一个非常吸引人的领域。“如何让计算机理解甚至创作人类语言?”本身就是一个让人兴奋的课题。
但是要理解一个特定领域内具有专业性的句子,要面临一系列特殊的挑战。具体到化学领域,一个突出的例子就是要让电脑识别句子中的各类化学物质的标识符,比如说国际化合物标识等。它们比一般的词或词组长,包含很多括号、破折号、逗号,以及数字之类的特殊字符,更重要的是,它们很少出现在类似于BERT之类模型的预训练当中。所以,要建立一个针对化学问题的问答系统,并不能简单地直接使用如BERT或者GPT-2之类的现成的模型,需要专门针对问题的特性选择合适的模型。
判断哪个模型在该任务上合适,这个过程需要一定数学基础和理解能力,要理解模型的架构与特性,也要理解任务的数学本质是什么,当然,你也可以跟风看看别人用的什么模型,比如早些年的LSTM,后来的Transformer,这需要根据你的任务各取所需。并不是强大的新发布的模型就是适用的。
比如在项目初期,我们就选择了2001年发布的条件随机场(Conditional Random Field, CRF)模型来解决实体识别问题,即从一个问题,比如“德国的首都在哪里”中抽取“德国”这一实体,因为如果要回答这个问题,我们需要将问题中的关键要素抽离出来。前面我们提到,化学问题有它的专业性,其中往往包含一些如化学方程式这样不常出现在普通训练语句中的词。好在化学方程式这个东西的识别其实是简单的,它具有高度规律性,比如总是由26个字母和数字组成,不会出现元素周期表上没有的字母组合等,条件随机场模型很适合用来处理这类问题。但是,在其他领域表现更好的、更新更大的模型,反而不一定在这个任务上表现更好。CRF模型在具有其他实体识别模型的能力的同时,也具备定制一系列识别规则的能力,就非常适合在化学语境下识别特定的实体,比如化学方程式。
跟大家的想象可能不同,搞人工智能不只是要搞定技术,还要搞定“人”。确定好模型之后,我还要处理一系列“社会工程问题”,主要内容包括:向导师阐明该项目的重要性和先进性,找导师要人力给你标注数据,找导师要经费和算力,安抚给你标注数据的博后和硕士的情绪等。总而言之,要说很多话,涉及很多语言艺术和心理学操作。
然后就可以开始训练模型了,这也是“抡锤子”的一部分。从最初步的线性拟合(Linear Regression)到庞大的大语言模型(Large Language Model),机器学习的本质是类似的。机器学习模型训练的本质是通过数据拟合的方式,建立某种输入与输出之间的关联。我们可以想象一个最简单的例子,如果我要建立一个通过人的身高预测其体重的模型,那么我要建立的就是身高和体重这两个数据之间的关联。首先我们要收集一群人的身高体重成为训练集,那么在一个以身高为x轴、体重为y轴的平面直角坐标系中,每个人的身高体重都可以用一个点来表示。我们知道,在直角坐标系中,任意一条直线都可以用y=ax+b来表示,那么在这个例子中,机器学习的本质就是通过调整a和b的大小和正负号,来找到一条可以“串”起我们收集到的各个坐标点的直线y=ax+b。有了这一条直线,我们就可以“预测”一个没有出现在训练集中的身高对应的体重。当然,在现实中,我们的BMI不会是一样的,需要开发更加复杂的、拟合能力更强的模型。
训练一个问答系统也是同理,我们用化学问答系统中重要的问题分类模型来举例。在我们的系统中,由于一些问题间差异过高,比如通过某种反应物查找反应式和计算某种物质的比热容这两种问题,就需要使用不同的方式来处理。所以,就需要对问题进行分类,给他们打上诸如“查找反应”和“计算比热容”之类的标签,再分别交给不同的系统处理。我们可以把不同类型的问题想象为一个个平面直角坐标系中的点,相同类型的问题会相对靠近彼此。从整体来看,每一类问题就像是聚在一团的点,我们一般称为一个“簇”。而对这些点的分类,也是通过“画线”的方式解决的。与前面身高体重稍有不同的是,这回我们想要画的线不是要穿过这些点,而是要用一条线将从属于不同类型的、由点构成的“簇”分隔开来。
假设我们只有两类问题,“查找反应”和“计算比热容”,并且存在一条线y=ax+b,将这两类问题形成的“簇”分隔开。这里,x可以理解为一个问题的某一种“特征”,比如问题内如果包含“反应”这一个词,我们可以把x设为1,不包含“反应”则设为0,那么把x带入y=ax+b则可以计算出一个y。如果y大于某个值,我们说这个问题属于第一类,而y小于某个值,这个问题则属于另一类。而训练的过程则和身高体重的例子相似,也是通过调整a和b的大小,只不过这次的目标是找到一条可以清晰分割两个“簇”的线。
从本质上来说,机器学习的确与猴子在打字机上跳舞和抡动锤子有些许类似——有一些未知,但绝没有什么神秘。但是,对于一个没有动手训练过机器学习模型,也没有了解过机器学习模型架构和数学原理的非从业者来说,如今一个个无比复杂和强大的模型,看起来就多少有些像魔法了。可是,我大胆地认为,大部分认真完成了自己九年义务制教育的人,只要是真的想要去了解,在找到合适的学习资料的情况下,应当至少可以掌握机器学习的最基本数学原理,届时,大家看待机器学习、人工智能等一系列充满科技感与神秘感的名词,可能是完全不同的一种感觉。我花了四年时间,利用各类自然语言处理机器学习模型,试图解决一个构建化学问答的系统。在这一过程中,三个问题一直悬在我的头顶:我们真的需要一个这样的系统吗?我们真的能做出这样一个系统吗?如何让更广泛的人群明白,这个系统还只能解决一小部分的问题,而这已然不易?我想,这也是折腾了很多人的三个大问题,是很多在大模型时代想要做些什么的人需要想清楚的三个问题。
“在过去的五年里,我们已经完成了第一步工作,储备了大量化学和化工的结构化数据,我们得拿它们做点什么,做得越多越好。”2019年底,我博士生涯伊始,我的导师和全组说。在进组读博之前,我已经在我们组的项目里作为程序员干了三年时间,参与了第一阶段数据的采集、清洗和整理。但项目内很少有人能够全面且清晰地阐述,我们到底为了什么目的而构建这样一个数据库。只有一点是明晰的,这个数据库一定会在未来派上大用场。这是一个多层次、多领域,打通了数据孤岛的数据库,将原本不同细分领域内的数据与信息整合了起来,能够支撑一系列需要多种数据的应用。
所以,在我的导师说到我们该利用数据库做点什么的时候,我提出想要做一些和自然语言处理相关的研究,利用自然语言处理模型,理解人类的问题,自动查询数据库并给出答案。要声明一下,这个项目并非是利用LLM技术给刚健朴实的化工研究“锦上添花”,它的现实意义也很充足。在化工领域内,由于数据结构的高度复杂,人类查询结构化数据需要使用特定的查询语言。比如说,我想要查询某一个分子量在一定范围内,并且比热容也在一定范围内的分子,就无法使用“关键词搜索”之类的简单方式查询,而是要使用类似于代码的方式把我的两个需求精确地表达出来。这种筛选是在研究过程中常常需要使用的。我自己学习这种查询语言就花了数月时间,并且,要查询特定的数据库,还需要对数据库本身的结构和内容有一定的了解。这注定了一件事:如果保持现状,我们的化学化工数据库就会变成我们组内部自娱自乐的工具。就这样,利用自然语言处理模型,使得用户可以使用人类语言问题查询我们的化学化工数据库就成了我的博士课题。
到此为止,可以说第一个问题“我们真的需要一个这样的系统吗?”被回答得挺好,我们确实需要这样一个系统。但如果换一些限定条件,比如:如果一个行业的数据查询过程没有那么复杂呢?如果我们储备的数据本身就没有那么多呢?如果某个领域不需要频繁地调取数据和信息呢?那么,第一个问题也许并不好回答。
项目初期的各类小规模实验,由于数据量小,情况相对简单,做起来都很顺利,我就这样轻松愉快信心满满地度过了博士的第一年。第一个瓶颈出现在第一年结束时、初期答辩后,随着开发的深入,我需要更多的数据去训练和测试我的模型。因为领域本身的专业性,我们很难像训练一些诸如“识别马路上的车辆与行人”这样的模型一样,花钱在“亚马逊土耳其机器人”(Amazon Mechanical Turk,MTurk,一个数据标注众包平台)请普通人为我们创造问题、标注回答等。所以我开始在系里系外奔走,发动同学们为我扩充训练集与测试集。
“精准垂类模型”是我近期回国之后经常听到的一个词,似乎每一个行业都蠢蠢欲动想要一个属于自己行业的大语言模型,GPT一词似乎要被加上各个行业定语。仅医疗行业,我就见到了至少五个不同表达、不同拼写的“医疗GPT”。可是,领域的专业性,往往代表着人力的稀缺和昂贵。刚才我提到,亚马逊的数据标注平台叫作土耳其机器人。这个名字来源于一场骗局。18世纪有人制造出了一台可以自动行棋的机器,包括一张放着棋盘的桌子,和一个打扮成土耳其人的傀儡。在巡演的过程中,这台机器打败了众多高手,令整个欧洲都惊叹不已。但是最后,人们发现这台机器的实际工作原理就是里面藏了一个象棋高手。“人工智能,越多人工越智能”,这是很多人都很熟悉的一句话。人工智能的背后,大部分时候都包括大量的人力投入。亚马逊真的会起名字。
所以第二问“我们真的能做出来吗?”折腾了我很久,这个问题好回答,也不好回答,因为答案是大力就会出奇迹。令人意外的是,在最后起到最大作用的,是我的直接竞争对手ChatGPT。ChatGPT出现之后,我身边的研究者们一夜之间对自然语言处理、问答系统,当然也包括我在做的化学问答系统,产生了极为浓厚的兴趣。很多人主动地想要参与到这个系统的开发中来,我当然欣喜若狂,来者不拒。其中一位化学背景出身,但现在主要负责代码工作的意大利女博后参与到这个项目的原因很具代表性,她说:“我试了ChatGPT,我觉得它写的代码比我好多了,我想我要失业了。让我参与到这个项目中吧,至少能让我的简历中多一条有用的东西,比如说我参与过一个语言模型的开发。人工智能觉醒之后,或许能因为我的忠诚而给我一条活路。”
将系统初步建立起来以后,第三个问题出现了,“如何让更广泛的人群明白,这个系统还只能解决一小部分的问题,而这已然不易”。由于我们常投稿的期刊主要是跨领域期刊,如《计算机与化学工程》等,审稿人中包括计算机专家,也包括化学、化工专家。化学和化工背景的审稿人常常说出这么一句话:“我问了如下几个问题,你的系统都说不知道,这几个问题明明挺简单的。”大部分情况下,这种情况来源于系统背后本身的数据缺失。在过去的一小段时间里,由于ChatGPT带来的震撼,大家似乎对人工智能,尤其是大语言模型产生了极高的期待。至少在初期,由于ChatGPT在回答一般性问题上的惊人表现,很多不同行业的从业者,包括我自己和我的导师,都一度认为一个万能的、普适于各个领域的解决方案已经出现。但是,在我们用更审慎的眼光评估了ChatGPT之后,包括我们在内的相当一部分研究者都意识到,ChatGPT本身并不具备完全击败所有现有行业内专用问答系统的能力,更不用说作为一种通用工具取代所有专业化工具。
但是意识到ChatGPT作为一个非领域专属的大语言模型的局限之后,专业从业者们又开始对化学问答系统这样基于大语言模型的行业专属问答系统产生了过高的期待。人们的想法是,既然ChatGPT这样不是专门训练的系统都能回答很多专业问题,那么一个专门为了某个领域开发的系统,岂不是理所应当地能够回答领域内所有的问题,甚至超越专业研究者?
当然,这种期待没有错,人工智能必然会在未来有更大的发展与进步。但是,作为一只拿着锤子的“Python猴子”,我的想法是:前途是光明的,可是道路是曲折的。建立任何一个强大的问答系统,无论是通用的还是专业化的,都需要整个行业的努力。至少在化学上,需要超过我的这个小小项目,需要上千倍甚至上万倍的训练数据,包括更多的实验数据被公开,更多的高质量的问题被提出并被回答,更多的数据库被整理、校验和公开,更多的算力被投入到模型的训练中,更多的人来使用这一系统并给出反馈。一个有趣的故事是,我在博士毕业答辩中又遇到了第一年给我进行初期答辩的考官,一位严格却和蔼的德国女教授。三年前,这位教授提出了很多问题和建议,其中一点就是:“现在你处在蜜月期,好好享受这个阶段,因为下一个阶段是瓶颈期,我希望你做好准备。”三年后我们俩再次在毕业答辩中见面,因为紧张,我很遗憾地没有想起来向她的这句话表示由衷的感谢。现在想来,她说的话依然适用。
最后,我发现我的三个问题可以串联成为一句话:“如果你的行业真的需要这样一个系统,首先要意识到这并不容易,或许需要所有人的努力。” 人工智能大语言模型