2023年的开年巨响——ChatGPT。今天做一个ChatGPT的简单了解。本文由ChatGPT来源、ChatGPT特点、ChatGPT原理、ChatGPT局限和一些附录论文组成。
ChatGPT是OpenAI于2022年12月1日推出的人工智能聊天原型。它是一种专注于对话生成的语言模型。它能够根据用户的文本输入,产生相应的智能回答。
甲 ChatGPT来源
我们先了解下OpenAI。OpenAI总部位于旧金山,由特斯拉的马斯克、Sam Altman及其他投资者在2015年共同创立,目标是开发造福全人类的AI技术。而马斯克则在2018年时因公司发展方向分歧而离开。
此前,OpenAI因推出GPT系列自然语言处理模型而闻名。这个GPT是Generative Pre-trained Transformer(生成预训练变换模型)的缩写,可用于生成文章、代码、机器翻译、问答等各类内容。
从2018年的GPT-1开始,每代GPT模型的参数量都爆炸增长,堪称“越大越好”。到2019年GPR-2参数量为15亿,2022年的GPT-3参数量达到了1750亿。
乙 ChatGPT特点
ChatGPT是基于GPT-3.5架构开发的对话AI模型。
具备:
1. 可以主动承认自身错误。若用户指出其错误,模型会听取意见并优化答案。
2. ChatGPT可以质疑不正确的问题。
3. ChatGPT可以承认自身的无知,承认对专业技术的不了解。
4. 支持连续多轮对话。
丙 ChatGPT原理
ChatGPT是基于45个国际音标,根据输入语句,根据语言/语料概率来自动生成回答的每一个字(词语)。从数学或从机器学习的角度来看,语言模型是对词语序列的概率相关性分布的建模,既利用已经说过的语句(语句可以视为数学中的向量)作为输入条件,预测下一个时刻不同语句甚至语言集合出现的概率分布。
在语意识别的基础上,使用人类反馈的强化学习进行训练。这种方法通过人类干预来增强机器学习以获得更好的效果。
1) 首先收集演示数据,在数据集里随机抽取问题,由标注人员,给出高质量答案,然后用这些人工标记好的数据来微调GPT-3.5模型。
2) 通过人工标注训练数据,来训练回报模型。收集比较数据,在数据集里继续随机抽取问题,使用1)阶段生成的模型,对每个问题,生成多个不同的回答。标注人员对这些结果综合考虑给出排名顺序。就像教练或老师辅导。然后使用这个排序结果数据来训练奖励模型。对多个排序结果,两两组合,形成多个训练数据对。这样,对于一对训练数据,调节参数使得高质量回答的打分比低质量的打分要高。
3) 利用2)阶段训练好的奖励模型,靠奖励打分来更新预训练模型参数。继续在数据集里抽取问题,使用PPO(Proximal Policy Optimization,近端策略优化)模型生成回答,并用2)阶段训练好的模型给出质量分数。把回报分数依次传递,由此产生策略梯度,通过强化学习的方式以更新PPO模型。
4) 不断的重复上面3个阶段的过程,通过迭代训练出现在的ChatGPT模型。
并且由于ChatGPT拥有很强的性能和海量参数,它包含了更多的主题的数据,能够处理更多小众主题。
丁 ChatGPT的局限
与大家在生活中用到的各类智能音箱和“人工智障”不同,ChatGPT在对话过程中会记忆先前使用者的对话讯息,既上下文理解,以回答某些假设性的问题。ChatGPT可实现连续对话,极大的提升了对话交互模式下的用户体验。这也是这次爆火的原因之一。
但实际上ChatGPT缺乏很明显的局限性,例如缺乏“人类常识”和引申能力,甚至会一本正经的“胡说八道”。
这源于它的训练依赖于人,需要先由人来给出答案,再由人进行评分。但是无法有效的管理给答案和评分的人。这个答案是虚假信息还是误导信息,这个信息是否可以解决用户的问题。当然有足够大的数据支撑,是可以保证一些简单,基础内容的真实性和有效性。但还是无法处理冗长或特别专业的语言结构。例如金融、自然科学、医学、创新、产品开发等领域。因为这些领域没有有效可行的流程体系去管理人,自然没有可用的数据去支撑。
最后ChatGPT有很多地方可以用于我们值得我们用于羿戓知识图谱建设的。这几年基于《羿戓®设计的产品技术研究开发体系》的积累也给我们的知识图谱建设提供有力的支撑。
附录一
2017 (Google) (NIPS) [Transformer] Attention is All you Need [Transformer]Transformer作为目前最强大的序列建模模型,是BERT等预训练模型的基本单元。
BERT (Bidirectional Encoder Representations from Transformers):
阶段1 预训练模型:
(1) 提出Masked Language Model (MLM)预训练目标,来消除标准language model是单向的限制。MLM通过随机mask掉输入的一部分单词,然后使用句子中的其他context单词(包括左边的和右边的)来预测被mask的部分。从而BERT能够实现深度双向表示学习。
具体来说,构造训练数据时,随机选取输入句子中15%的token位置,对于第i个选取的token, 80%的概率替换为[MASK],10%的概率替换为随机token, 10%的概率不变。然后用BERT模型输出层在第i个token位置的向量,预测原始的第i个token,使用cross entropy loss优化。
(2) 提出Next Sentence Prediction预训练目标: 预测两个句子是否在源数据中是相邻的。
QA等任务,基于两个句子的关系理解来完,但language model无法建模这些信息。BERT中提出的NSP任务,可以很好的解决这个问题。在构造训练数据时,对于A和B,50%的概率B是A后的下一个句子,50%的概率B是随机的一个句子。使用C来预测这个标签是否真的是下一个句子,使用cross entropy loss优化。
BERT使用BooksCorpus和Wikipedia来预训练。
阶段2 Finetune:
BERT通过使用下游任务监督数据finetune所有参数,或将BERT在输入上的结果作为后续模型的输入,在下游多个任务取得很好地效果,已经成为NLP的主流技术。
具体任务Finetune的设计:
BERT模型参数:
BERT(base)包括12层,hidden size 768,self-attention head为12,参数量为1.1亿,与GPT参数相当。BERT(large)包括24层,hidden size 1024,self-attention head为16,参数量为3.4亿。
BERT输入:
为了使BERT预训练后能应用到各种各样的任务中,BERT的输入是一个sentence,可以对应原始的一个句子或句子对。一个<Question, Answer>,可以通过[SEP]连接成一个sentence。
其中第一个token是[CLS] ,用于汇总整个句子的表示,可以用于句子分类等任务。BERT采用WordPiece embedding, vocabulary size是30000。
输入序列中每一个单元的表示包括:token embedding, 指示在句子A还是B的segment embedding, Position embedding。
附录二
[21] 2018 (OpenAI) (Arxiv) (GPT) Improving Language Understanding by Generative Pre-TrainingGPT模型的思想:基于大量无标签数据学习预训练模型,然后通过finetune应用到后续的多个任务。
阶段1:Unsupervised pre-training
使用language modeling目标来优化:
对应的模型结构,作者选取的是multi-layer Transformer Decoder (比Transformer少一半参数):将输入转化为embedding,经过Masked Multi-head Self-Attention,然后使用softmax层即可预测输出概率分布。
阶段2:Supervised fine-tuning
阶段1学习得到的预训练模型,后面连接一个Linear层,即可实现下游任务的预测。
对于下游任务,按下图的方式,构造模型的输入。例如对于文本分类问题:前后加入特殊字符后变成一个序列,经过预训练模型Transformer,Linear层即可实现预测。
论文实验结论:
(1)预训练能大幅提升在多个下游任务的指标。
(2)预训练模型中的embedding、序列模型各层参数,都有助于提升下游任务。
(3)Zero-shot Knowledge Transfer: 仅使用预训练模型,不用下游任务数据finetune, 预训练的越多,下游效果越好。
(4)在Finetune阶段也添加Language Modeling的辅助任务,有助于提升模型指标。简单理解是,在下游任务的数据上继续pre-training。
附录三
2019 (OpenAI) (Arxiv) (GPT-2) Language Models are Unsupervised Multitask Learners[GPT2]作者提出的15亿参数的Transformer预训练模型GPT-2,具有很强的Zero-shot Knowledge Transfer能力:在多个任务上,即使不用下游数据finetune,也取得了比用下游数据监督学习的模型更好的表现。
GPT-2中采用了Byte Pair Encoding (BPE) 来取代character和word embedding。参数量如下:
第一行参数量1.17亿,和GPT相当。第二行参数量3.45亿,和BERT相当。最大的参数量为15.42亿,为GPT-2。
附录四
2020 (OpenAI) (Arixv) (GPT-3) Language Models are Few-Shot Learners [GPT3]GPT-3采取的模型和GPT-2相同,但参数量有1750亿。
关于参数量和下游任务的性能的分析图如下:
可以看出:参数量越大,在Zero-shot, One-shot, Few-shot的情况下指标都不断提升。