语言模型一直以来就是NLP中的一个重要技术,随着chatgpt的出现,语言模型成为了当今最为炙手可热的课题。随着chatgpt类模型逐渐出现,一个新的名词LLM(large language model)形成了,但是这个词的明确定义,一直令我感到困扰。到底什么样的模型应当被划分为LLM,我想借这篇文章表达一下我个人的观点,可能与主流观点有冲突,欢迎讨论。
请先允许我兜个圈子,梳理一下语言模型的发展。到今天,语言模型大致被划分为4代:
1.统计语言模型 SLM (statistic language model)
一般是指ngram语言模型。建立在条件概率的基础之上,用平滑和回退来处理没有训练语料中出现的组合。基于马尔可夫假设,放弃了长距离依赖的问题。在今天看来,这种算法虽有诸多缺陷,但实际上这一代算法很好的支持了语音识别等能力的实际落地,也有解码速度快的优点。
2.神经网络语言模型 NNLM (neural network language model)
通常是指RNN(LSTM,GRU)或CNN(Gated CNN)等结构的语言模型。神经网络在文本表示上确实有优势,可以用softmax自带平滑,可以不增加参数量的处理稍长的文本。从效果上讲,做到优于ngram没太大问题,但是其效果优势并没有那么大,不太足以弥补其效率的劣势。从当时的发展看,这一代语言模型对于NLP整体的影响和落地应用并不突出。但是其思想,使得nlp走进了nn时代。
3.预训练语言模型 PLM (Pretrain Language Model)
以Bert为代表的预训练语言模型,开启了pretrain + fine-tune这一延用到现在的经典模式,大幅提升了所有nlp相关任务的基线。而且不需要任何的奇技淫巧,用了都说好。其变种非常丰富,落地应用非常多,相关的研究和变种也是层出不穷,并且使得其他AI领域,比如CV,也开始借鉴NLP中的一些方法。在它之前,其实一直是反过来。
4.大语言模型 LLM(Large Language Model)
最后就是LLM这个概念。这个概念的定义一直是含糊不清的。唯一能确定的是,这个词是在chatgpt出现之后才出现的,其含义大致应当是用于概况类chatgpt模型。在chatgpt出现时候,有一句流传很广的话,大致是说“bert与chatgpt的差距就像弓箭和导弹的差别”。这句话也许是有道理的,但是这个弓箭和导弹到底本质上的差距在哪里?后续出现的开源模型llama,chatglm,baichuan等,到底是强一点的弓箭,还是弱一点的导弹?这是我想讨论的问题,也就是plm和llm的界限在哪,或者说llm的定义是什么。
首先我想先说,我认为它的界限不在哪。
第一,模型大小
我认为这个界限不在模型大小。原因是,LLM是在chatgpt之后出现的概念,而在chatgpt出现之前,gpt3就已经发布了(20年),它的规模就已经达到了175B。在那之后,我印象里还有几个比他还大的模型出来。但是那时候,并没有形成LLM这个概念。大家对于GPT3的认知和GPT2是类似的,是PLM的一种延申。包括比他更大一些模型,也没有被单独划分成一类。如果175B的模型,不足以被称为LLM,那现在开源这些6B, 13B, 65B的模型,又怎么能仅仅因为大小,而被称为LLM呢?所以这个界限不在大小。
第二,是否是生成式
chatgpt的一个突出的特点在于他是一个生成式模型,而它之后出来的这些所谓的LLM的一个统一特点也是他们都是生成式模型。用生成式解决nlp中所有的问题,这一范式我最早是在Google的T5论文(19年)中看到的。比他更早的gpt2(18年)也一定程度提到了这一点,但是相对来说比较粗糙,没有T5中描述的那么明确,且设计了针对性的预训练任务。但T5采取的是encoder-decoder架构,与当前的主流纯decoder架构不同。总的来说,用生成式任务来讲nlp任务统合到一起,这不是一个新的想法,也不是一种新的能力。即便是最初的SLM也有文本生成的能力。所以,是不是生成式模型,也不应当是LLM的界限。
第三,效果强力
会不会是由于其突出的效果才被称为LLM?如果是这样,那其实牵扯到一个很大的问题就是LLM的评价问题。这个问题其实至今还没有一个很好的定论,如何公正的评判LLM的效果。目前有若干知名的数据集,比如CEVAL等,以0-shot或者5-shot的方式来对比LLM的回答效果。但是就像机器学习中的很多数据集一样,一旦一个数据集被允许不断提交结果,那这个榜单的价值就会迅速下降。这就是所谓的刷榜,针对性的训练,会带来的问题。国外搞的一些LLM arena一类的评估更加的不靠谱,靠人为打分或gpt4打分来区分结果好坏,已经有多篇论文指出,打分结果会受到回复形式的误导,而非具体内容。更重要的是,所有的这些打分,并没有包含前一代的Bert类模型。Bert类模型由于使用方式和这些生成式模型不同,不能在这些数据集上直接进行对比,但是我们不能因为这个宣称:所有在CEVAL榜单上出现过的模型都是能力强于Bert的,因而被划分为LLM,这完全不合逻辑。
所以PLM和LLM的界限到底是什么?我们再次回顾一下为什么chatgpt当时出现的时候,给NLPer带来了极大的震撼。其实我们会发现,chatgpt能够做到的很多事情(甚至是绝大多数事情),如果提供足够的训练数据,我们都可以基于以前的方法做到(比如以bert为基础的方式)。它强就强在它不需要那些训练数据。chatgpt在训练完毕之后,可以在不进行任何的梯度反传的情况下,就做到很多以前要针对性设计网络结构并进行有监督训练才能做到的事。这确实是弓箭和导弹的差别,需要训练数据和不需要训练数据只提供指令的差别。
所以我的看法是,如果一个模型在不需要进行微调的情况下,就能完成多种不同的nlp任务,那么它就有资格被称为LLM。如果能做到这件事,它的大小并不重要,是否是生成式模型也不重要(但实际上非生成式模型可能很难做到这一点),在这多个任务上的效果也不需要强力到超过以前微调后的模型,但是至少要能正确的回答出一些问题。从这个角度讲,chatglm和baichuan这类开源模型确实有资格称为LLM,因为他们虽然没那么大,但也确实能在不做微调的情况下完成一定任务。
基于这个定义,我认为目前国内许多关于LLM微调的工作,其实与LLM的初衷是背道而驰的。如果我需要用大量的领域相关数据,尤其是人工标注数据,来对模型进行微调,那我为什么不去微调Bert呢?或者说,这与以前微调Bert有什么区别呢?仅仅是用了更多卡?用了更复杂的并行框架?针对一个具体任务,比如文本分类或知识库问答,基于一个所谓的LLM去微调,真的比基于Bert的微调效果要强很多么?我至今没有看到这样的效果对比。反正可以确定的是效率肯定要低很多。如果最终效果只是接近,那落地层面生成式模型是绝对劣势的,Bert类模型的可控性和效率都要强的多得多。
chatgpt的能力是毋庸置疑的,LLM的价值是显而易见的。但是当我们研究LLM的时候,我认为真正比较值得研究的,是如何去从头构建一个LLM,这涉及到模型结构选型、位置编码、预训练方法、RLHF等等内容。或者,去研究如何应用一个LLM,涉及到提示工程、知识注入、解码策略、加速推理等等。唯独不值得的,就是所谓的垂直领域微调。因为在我看来,垂直领域微调这件事与LLM的定义相违背。
当然现在很多公司把重心放在垂直领域微调也很好理解,一是从头训练成本太高玩不起,二是开源LLM能力确实不足,不微调不足以直接支撑具体业务,但是公司又非要参与大模型工作(毕竟要面子)。从这个上先积累一些训练的经验无可厚非。但是我个人认为,算法工程师要在学习中对LLM这个新概念保持一个自己的认识,不要沉迷于换一份开源代码,继续走以前的路。