GPT-2 (Generative Pre-trained Transformer 2) 是由 OpenAI 开发的一种基于 Transformer 模型的自然语言处理(NLP)模型,旨在生成自然流畅的文本。它是一种无监督学习模型,其设计目标是能够理解人类语言的复杂性并模拟出自然的语言生成。
GPT-2 是目前最先进的自然语言处理模型之一,因为它具有大量的训练数据和强大的算法,可以生成自然流畅、准确的文本,其中文版本为GPT2-Chinese:使用wiki中文通用语料训练。
与其他基于神经网络的语言模型相比,GPT-2 具有许多独特的优点。首先,它采用了自监督学习的方式进行训练,使其能够处理多种语言和任务。其次,GPT-2 可以生成各种类型的文本,例如新闻、故事、对话和代码等。最后,GPT-2 模型使用了大量的预训练参数,使其具有强大的表现力和泛化能力。
GPT2-Chinese 版本是 GPT-2 模型的中文版本,也是基于 Transformer 模型构建的,具有相同的架构和训练技术。GPT2-Chinese 已经在多项中文 NLP 任务上取得了显著的成果,并被广泛应用于中文文本生成、问答、文本摘要和翻译等领域。
GPT-2 参数数量 1.5亿到1.75亿模型大小0.5GB到1.5GB
模型
每个参数占用的字节大小
模型大小
模型大小
层数
头数
GPT-1
4 个字节的 FP32 精度浮点数
117M
446MB
12
12
GPT-2
2 个字节的 FP16
1.5亿到1.75亿
0.5GB到1.5GB
48
16
GPT-3
2 个字节的 FP16
1.75万亿(17500亿)
350GB
175
96个头
https://github.com/Morizeyao/GPT2-Chinese
在根目录(目录GPT2-Chinese)下建立文件夹data和model
GPT2-Chinesedata
GPT2-Chinesemodel
把要训练的小说复制到train.json这里面
train.json(也即->?GPT2-Chinesedata rain.json),需要注意的是,train.json编码格式严格为UTF-8,并且不带BOM头<-去头咱用的sublime。
vocab
- vocab.txt:词汇表。默认的大小为13317,若需要使用自定义字典,需要将confog.json文件中的vocab_size字段设为相应的大小。也就是vocab.txt文件有多少行,多少个分词.
- 把 vocab.txt 字典文件里的 [SEP] 行号减1,设置为 Config.json 配置文件 "bos_token_id": 1,和 "eos_token_id": 1,的值.减1是因为vocab是从0下标开始,而行下标是从1开始.我这里设置为1是因为我的 [SEP] 在vocab的第二行.
特殊 token 符号
[UNK]:表示未知标记(即,词汇表中没有的词); [SEP]:表示句子分隔符;换行 [PAD]:表示填充标记,用于填充序列的长度;也就是无效符号。 pad_token_id默认为tokenizer.eos_token_id,这是特殊token [EOS]的位置。它被用来指示模型当前生成的句子已经结束,因此当我们想要生成一个开放式文本时,我们可以将pad_token_id设置为eos_token_id,以确保生成文本不会被提前结束。 [CLS]:表示分类标记,用于BERT模型的分类任务;文章之间添加CLS表示文章结束 [MASK]:表示掩码标记,用于BERT模型的掩码语言建模任务。文章开头添加MASK表示文章开始
在自然语言处理任务中,将文本转换成数字是非常重要的预处理步骤之一。这个过程叫做文本编码。传统的文本编码方法,如one-hot编码或词袋模型,通常会忽略单词之间的语义和上下文关系,因此不太适用于语义相似性计算、文本分类、问答系统等需要更深层次理解文本含义的任务。 通过词汇表 把一个字 、一个短语 、一个短句 转换成一个数字 ,形成了 数字 映射 成 文字,文字映射成 数字的过程。字典 词典
词汇表的大小会对训练模型的大小和复杂度产生影响。 在自然语言处理中,词汇表是所有可能的单词集合。如果词汇表很大,那么训练模型需要处理更多的单词和更多的单词组合,因此会增加模型的复杂度和大小。 此外,词汇表的大小还会影响模型的训练时间和资源消耗。一个包含更多单词的词汇表需要更多的内存和计算资源来存储和处理。 因此,为了训练一个高效且准确的自然语言处理模型,需要平衡词汇表大小和模型大小之间的关系,并考虑可用的计算资源和训练时间。
文本生成效果