
大家好,我是写代码的中年人!
今天我们使用开源的的中文数据进行模型的预训练,下面跟着我的步骤,从零实现你的预训练模型。
本文所有代码和数据资源位置:
https://github.com/ColinAIAPP/MoiraiLM
01、预训练模型的概念
预训练模型(Pretrained Model)就是一个已经在海量数据上训练过的模型,它学会了语言的基本规律、结构和语义,然后可以拿来做各种下游任务,比如写作、翻译、问答、分类、生成代码等。
那“预训练”到底在学什么?以语言模型(LLM)为例:预训练阶段的任务通常是预测下一个词(token)。
接下来我们就一步一步实现一个17M参数的预训练模型。
02、数据准备
构建语言模型的第一要义是高质量的数据源。对于中文任务,选择维基百科开源中文数据集是一个理想起点。这个数据集包含数百万条中文百科条目,涵盖历史、文化、科技等领域,总量约数GB的纯文本数据。它开源且免费,可通过维基百科的官方转储页面下载最新版本的XML格式文件。
要解压处理这个文件我们要使用wikiextractor工具进行数据解压。
安装解压命令:
复制解压命令:
复制复制03、清洗数据
我们解压后的数据如下图,下面我们要把数据清洗出来。
注:
我们本步骤生成的文件为 data/cleaned_wiki_full.txt
复制复制04、训练分词器
我们使用SentencePiece训练分词器,本次我们训练的分词库大小为16k,你也可以训练32k的分词库。相关代码及过程如下:
注:
我们本步骤生成的文件为
workdir/spm_wiki_16k.model
workdir/spm_wiki_16k.vocab
复制复制05、原始文本转为Token ID 序列
在训练大型语言模型的准备阶段,将海量文本语料转化为模型可处理的数字格式至关重要。本次将原始文本语料编码为整数 Token ID 序列。为了克服单次加载大文件的内存限制,脚本采用了分块读取机制,支持以自定义大小逐块处理语料。所有 Token ID 最终被汇总并转化为高效率的 torch.int32 PyTorch 张量,直接存储为 .pt 文件。这不仅优化了数据格式,方便后续 PyTorch DataLoader 快速读取,同时也提供了关键的统计信息和完整性验证,是构建 LLM 数据集的稳定且高性能的预处理方案。
复制06、进行模型预训练
复制07、进行模型推理测试
复制我们看到模型大概可以预测我们输入的下一个词,因我们训练的参数和步数很低,模型输出的乱七八糟!
本次总结
本次我们做了数据准备、数据清洗、分词器训练、模型训练、推理等,请根据步骤进行执行代码,你便可以得到一个17M参数的小模型。后面我们再加大参数进行训练,再进行监督微调。