SuperAPI AI 工具集

Phi2-mini-Chinese

Phi2-mini-Chinese 是一个从零开始训练 Phi2 中文小模型的开源实验项目,模型名为 Phi2-Chinese-0.2B。项目开源代码及模型权重,支持接入 LangChain 加载本地知识库做检索增强生成(RAG)。主要内容包括数据清洗、Tokenizer 训练、CLM 因果模型预训练、SFT 微调、DPO 偏好优化以及 LangChain RAG 接入示例。项目为实验性质,预训练数据较少,可能随时改动,若需更好效果可参考 ChatLM-mini-Chinese。

访问官网

工具介绍

Phi2-mini-Chinese 是一个从零开始训练 Phi2 中文小模型的开源实验项目,仓库名 charent/Phi2-mini-Chinese,模型名为 Phi2-Chinese-0.2B。项目开源代码及模型权重,支持接入 LangChain 加载本地知识库做检索增强生成(RAG)。

用途 本项目用于训练自己的 Phi2 中文小对话模型,并演示如何将其接入 LangChain 进行本地知识库的检索增强生成。项目定位为实验项目,预训练数据较少,若需要效果更好的中文小模型,可参考同作者的 ChatLM-mini-Chinese 项目。项目代码和模型结构可能随时大改,包括训练数据、模型结构、文件目录结构等;第一版模型及代码可查看 tag v1.0。

主要能力

  1. 数据预处理:包括句末添加句号、繁体转简体、删除重复标点符号(例如部分对话语料中出现大量“。。。。。”)、NFKC Unicode 标准化(主要处理全角转半角以及网页数据中的 \u3000 \xa0 问题)等,具体数据清洗过程可参考 ChatLM-mini-Chinese 项目。
  2. Tokenizer 训练:使用 byte level 的 BPE 分词器,同时提供 char level 和 byte level 两种分词器的训练代码。训练完需检查词表中是否包含常见特殊符号,如 \t、\n 等,可通过 encode、decode 验证能否还原;若缺失可用 add_tokens 函数添加。使用 len(tokenizer) 获取词表大小,tokenizer.vocab_size 不统计通过 add_tokens 添加的字符。Tokenizer 训练非常耗内存:byte level 训练 1 亿个字符至少需要 32G 内存(32G 仍可能频繁触发 swap),13600K 训练时长约 1 小时;char level 训练 6.5 亿个字符(约中文维基百科数据量)至少需要 32G 内存,因多次触发 swap 实际使用量远超 32G,13600K 训练时长约半小时。大数据集(GB 级别)建议从数据集中采样后再训练 tokenizer。
  3. CLM 因果模型预训练:用大量文本进行无监督预训练,主要使用 BELLE 开源数据集。数据集格式为一个样本一句话,太长可截断分为多个样本。CLM 预训练时模型输入和输出相同,计算交叉熵损失时需错开一位(shift)。处理百科语料时建议在每个词条结束后加 '[EOS]' 标记,其他语料处理类似,一个 doc 结束(文章结束或段落结束)都要加 '[EOS]' 标记;开始标记 '[BOS]' 可加可不加。
  4. SFT 监督微调:模型计算损失时会忽略标记 "##回答:" 之前的部分("##回答:" 本身也会被忽略),从 "##回答:" 后面开始计算。记得添加 EOS 句子结束特殊标记,否则模型 decode 时不知道何时停止;BOS 句子开始标记可填可不填。
  5. DPO 偏好优化:采用更简单、更节省显存的 DPO 偏好优化方法。根据个人喜好对 SFT 模型微调,数据集需构造三列 prompt、chosen 和 rejected;rejected 列部分数据可从 SFT 阶段初级模型生成(例如 SFT 训练 4 个 epoch,取 0.5 个 epoch 检查点的模型),若生成的 rejected 与 chosen 相似度在 0.9 以上则不要这条数据。DPO 过程需要两个模型:一个是要训练的模型,一个是参考模型;加载时其实是同一个模型,只不过参考模型不参与参数更新。
  6. LangChain RAG:支持接入 LangChain 加载本地知识库做检索增强生成,具体代码见 rag_with_langchain.ipynb。

其他信息 项目支持 flash attention 2 加速。模型权重托管于 Hugging Face 仓库 Phi2-Chinese-0.2B。项目声明不承担开源模型和代码导致的数据安全、舆情风险,或模型被误导、滥用、传播、不当利用而产生的风险和责任。若觉得项目有帮助,欢迎引用。

限制 项目为实验性项目,预训练数据较少,效果有限;内容随时可能大改;训练 Tokenizer 对内存要求较高;其他收费、价格、平台支持等细节暂未提供。