本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。
北大团队教会AI把人话当编程语言用。
这下大语言模型(LLM)不光能做对数学题,而且解题过程你也能看懂!
数学,曾经是不知多少人学生时代的梦魇。但是现在,LLM或许可以帮你脱离苦海了。
用自然语言编程,本质就是描述步骤再执行,GPT3.5其实本来就会,但结果却不忍直视——往往包含不完整步骤甚至事实错误。
于是团队便提出了Learning to Program (LP)方法,让LLM从自然语言程序数据集中进行学习,并用学到的内容指导其推理过程。
具体来说,他们将一些高中数学问题和对应解题程序以自然语言形式灌输给GPT。
经过训练,ChatGPT具备了团队预期的解题能力。
在使用10个高中难度的数学问题进行的零样本测试中,LP加持后的LLM成绩显著提高。
这10个问题包括几何、代数和微积分,具体如下表所示:
可以看出,在每一项任务中,有LP加持的ChatGPT表现,无论是在零样本还是少样本测试中,均优于独立或自编程的版本。
对于第8类问题,LP加持版更是在少样本测试中取得了100分的成绩。
团队又将难度提高,测试其在(高等数学视角下的)中级代数(IA)、数论(NT)、几何、统计概率(CP)等方面的表现,结果均好于无加持的ChatGPT或仅有极小的差距。
当然,这些数据还不能证明LP训练在提高ChatGPT数学成绩当中的关联性。
于是团队使用一道几何问题,评估了ChatGPT在LP训练前、中、后三个阶段的表现。
结果显示,输出内容的正确率的确随着训练过程的进行在逐步提高。
在接下来的质量评价中,训练后的LLM可以给出多种通用性策略。
因此,团队认为,在今后的训练中,只需要将某一类问题的通用解法教给LLM。
有了通用方法,它们就可以举一反三,解决未知但性质相同的问题。
LP的训练过程是怎样的
LP训练的第一步,是要先准备出问题,以及对应的用自然语言编写出的程序,作为训练数据集。
这种自然语言程序不是具体的解题步骤,它们需要具有更强的通用性。
相应的,准备的问题也不是具体的,而是某一类问题。
既要简短明确,同时又要考虑到实际过程中所有可能出现的情况。
这些自然语言程序主要有三种来源:机器自生成、人工编写和经LP训练的LLM生成。
人工编写工作量过于庞大,LP训练已经是结果,所以实际使用的数据集主要来源于第一种途径。
有了训练数据,LLM便可以结合数据集中的问题,学习句子、段落和公式。
初步学习完成之后,就要让LLM进行预测,并与预设结果比较,计算误差。
同时,所有不符合预设正确结果的输出均被收集,构成了错误数据集。
错误数据集在之后的阶段也将作为LLM学习的内容,以避免再次出现同样的失误。
基于这些错误数据,研究人员让LLM对所提出的策略进行回溯,但又引发了新的问题:
一是出现了重复的解决方案需要移除,二是有些方案自身内容虽然没错,但与问题并不匹配。
最重要的第三点,是输入数据的长度会随着回溯的过程不断增加……
于是团队还需要对回溯数据进行压缩,并判断它们对LLM改正错误是否有帮助。
经过这一系列的处理,便可以将回溯数据作为训练样本,升级LLM程序了。
最终,升级后的程序经过检验,就可以使用了。
△举个例子:已知直角三角形两边,求某角正弦值
团队介绍
团队的领导者是北京大学王选计算机研究所博士生导师赵东岩研究员和微软亚洲研究院首席研究员段楠博士。
赵东岩2000年获得北大博士学位,主要研究方向为自然语言处理、大规模语义数据管理、基于知识的智能服务技术。
段楠博士毕业于天津大学,于2012年进入微软一直研究院,并在2018年6月晋升为首席研究员。
此外,他还多次担任NLP/AI学术会议程序主席,发表学术论文100余篇,持有专利20余项。
论文地址:https://arxiv.org/abs/2304.10464