生成模型(一): GPT3 / GPT3.5

3,345 阅读3分钟

背景

生成任务一直是 NLP 中比较重要的任务,前几年比较火的模型 bert、robert,都是基于 MLM(mask language model),常用于分类任务。而现在主推的则是 CLM 生成式模型,即本文要介绍的 gpt模型。

介绍

gpt3 是 open ai 在 2021 提出的自回归语言模型,希望模型能像人类一样,通过简单的几个case学习就可以在新任务上有较好的表现。 GPT3 不需要做任何 finetuning 就可以和 finetuning 过的模型效果相媲美,并且作为自回顾语言模型,GPT3 写的新闻稿,能以假乱真,人工都无法区分人写的还是机器写的,泛化性很强。而做到这些,GPT3 仅仅是在 GPT 的基础上,加大了模型参数和训练数据,接下来我们将介绍具体的模型和训练过程。

方法

模型结构和框架基本都和 GPT2 保持一致(也就是 transformer 的 encoder 部分模型),仅仅是增加了模型的参数,训练数据集变得更多并且更加多样,训练的时间也随之增加。

  • 模型结构

  • 模型参数

    • GPT3 模型参数高达 175B,96层,96个head,12288 维
    • 不同模型参数如下:

截屏2023-02-09 下午8.42.44.png

  • 训练数据

    • 有 common crawl 410 billion条文本,webText2 19b, books1 12b, books2 55b, Wikipedia上 3b的数据
    • 相比 GPT2(只有 8b 的训练数据),在数据量级上有较大提升;
  • 训练过程

    • 根据 GPT2的训练经验,越大的模型,batch size 就要大,但 learning rate 要小一些。
    • 用 gradient noise scale 选择 batch size 的大小
    • 将模型横向纵向拆分,在多个 GPU 上训练
  • 评测

    • 作者选了几个fewshot one shot 相关任务来评测,可以去看原文,这里就不详细描述了。

应用

原文列举了 GPT3 在阅读理解、QA、文本生成、文本补写等方面出色的表现。我自己主要在研究文本生成这一块,所以更关注于 GPT3 的生成效果。为此,我在 git 上找到了腾讯开源的 gpt3 源码,最重要的是!!! 这里有基于 gpt3 的中文预训练模型,对小白来说真的太友好了!

运行 demo

git clone https://github.com/lipiji/Guyu.git
sh ./inference.sh

可以将模型下载下来,chat-bot 中给了示例的inference case。如果想要finetuning 自己的模型,也可以用提供的 fine_tune.sh 脚本。

inference 中,可以看到,提供了几种不同的采样方法:有基本的 beam search,还有比较流行的 topk采样:

截屏2023-02-09 下午9.35.16.png

beam search 比较明显的缺点就是可能会生成的句子越来越长,并且会导致局部片段重复,而 topk 则是每次在概率较大的 k 个值中,随机选择一个,这就会避免上述问题,从而有更好的效果。

在2021年年末,openAI 发布了 GPT3.5,就是目前很火的 ChatGPT 原始模型。GPT 3.5 相比较 GPT3,改进点:

  • 使用了更多的数据;包含了wiki词条、社交软件的 post、新闻;
  • 训练的时候会学习句子之间、词之间、词内部之间的关系;

开启掘金成长之旅!这是我参与 「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情