迷你语言模型:AI助手的雏形
随着ChatGPT等大型语言模型(LLM)的兴起,人工智能助手正在改变我们的工作和生活方式。但是,构建一个功能强大的LLM似乎遥不可及 - 动辄数十亿参数,需要海量的训练数据和计算资源。那么,我们能否从更小的规模开始,一步步构建出属于自己的AI助手呢?
本文将带领读者从零开始,构建一个迷你语言模型(MiniLLM)。虽然规模较小,但这个模型包含了LLM开发的核心步骤,可以作为入门LLM技术的绝佳实践。让我们开始这段AI助手的孕育之旅吧!
准备工作:环境配置
在开始构建MiniLLM之前,我们需要准备好开发环境。本项目主要基于PyTorch框架,并使用了bert4torch和torch4keras等辅助库。可以通过以下命令安装所需依赖:
pip install git+https://github.com/Tongjilibo/torch4keras.git
pip install git+https://github.com/Tongjilibo/bert4torch.git@dev
第一步:预训练阶段
预训练是构建LLM的基石,通过在海量无标注文本上训练,模型可以学习到语言的基本规律和知识。
预训练数据集
本项目使用了多个中文预训练语料,包括:
- Wiki中文百科
- 百度百科
- C4_zh数据集
- 悟道开源数据集
- 医学领域数据集
这些数据集经过处理后,共计约634亿Tokens。
模型架构
MiniLLM采用了Transformer架构,包括:
- 嵌入层:将输入token转换为向量表示
- 位置编码:为每个token添加位置信息
- 多头自注意力机制:捕捉token之间的关系
- 前馈网络:进一步处理特征
- 归一化层:稳定训练过程
预训练过程
预训练采用了以下超参数:
- 批次大小:32 * 4GPU
- 学习率:1.5e-4
- 预热步数:5000
- 最大序列长度:1024
在4张A800 GPU上训练约3.79天。
预训练效果
通过对比训练前后的续写效果,可以看出模型已经初步掌握了语言生成能力:
输入:小明学习优异、身体健康、是一名
续写:小明学习优异、身体健康、是一名优秀的教师。他为人诚实、有责任心。在课堂上,他能认真听讲,积极思考,对每节课都积极举手发言。在课后,他主动要求帮助老师,认真做好作业,按时完成老师布置的作业,受到同学们的好评。
第二步:指令微调
预训练后的模型虽然具备了基本的语言能力,但还不能很好地完成特定任务。通过指令微调,我们可以让模型学会理解并执行各种指令。
指令数据集
本项目使用了多个指令数据集,包括:
- alpaca-zh:基于GPT-4生成的中文指令数据
- Belle系列数据集:包含通用指令、数学题、多轮对话等
- 火萤数据集:涵盖23种常见NLP任务
- MOSS对话数据集
- 代码相关数据集
这些数据集共计约1157万个样本。
微调过程
指令微调采用了以下参数:
- 批次大小:32
- 学习率:2e-5
- 训练轮数:5 epochs
在双卡A800上训练约4.5天。
微调效果
微调后的模型已经可以进行简单的对话和任务执行:
User:你好