最近实验课进行了chatbot的训练,挺有意思分享一下。

1,查看dialogbot文件夹中的内容

将闲聊数据命名为train.txt,并放在data文件夹,并检查文本样式

将gpt2-distil-chinese-cluecorpussmall模型放在model文件夹

gpt 画架构设计图 gpt2模型_gpt 画架构设计图

gpt 画架构设计图 gpt2模型_python_02

2,检查gpt文件夹中的程序(preprocess.py的外参数表)

外部参数有3个:

--train_path:训练数据集的路径,默认为data/train.txt。

--save_path:处理后的训练数据集保存路径,默认为data/train.pkl。

--pretrained_model:预训练模型的路径,默认为../model/gpt2-dialogbot-base-chinese。

3.train.py的外参表

-- device: 设置使用哪些显卡。

-- no_cuda: 如果设置为True,则不使用GPU进行训练。

-- model_config: 模型参数的配置文件路径。

-- train_path: 训练集的路径。

-- max_len: 训练时输入数据的最大长度。

-- log_path: 训练日志存放位置。

-- log: 是否记录日志。

-- ignore_index: 对于ignore_index的label token不计算梯度。

-- epochs: 训练的最大轮次。

-- batch_size: 训练的批次大小。

-- gpu0_bsz: 0号卡的批次大小。

-- lr: 学习率。

-- eps: 衰减率。

-- log_step: 每隔多少步汇报一次loss。

-- gradient_accumulation_steps: 梯度积累的步数。

-- max_grad_norm: 梯度裁剪的最大范数。

-- save_model_path: 模型输出路径。

-- pretrained_model: 预训练模型的路径。

-- num_workers: DataLoader加载数据时使用的线程数量。

-- patience: 用于early stopping的耐心值,设为0时不进行early stopping。

-- warmup_steps_rate: warm-up步数的比例。

-- val_rate: 验证集所占训练集的比例。

4,  interact.py的外参表

-- device: 设置使用的设备。

-- temperature: 生成文本时的temperature参数。

-- topk: 生成文本时选择最高概率的前k个token。

-- topp: 生成文本时选择累积概率超过topp的token。

-- log_path: 交互日志存放位置。

-- model_dir: 对话模型文件夹路径。

-- repetition_penalty: 重复惩罚参数,用于控制生成对话中重复性的程度。

-- max_len: 每个utterance的最大长度,超过指定长度将进行截断。

-- max_history_len: dialogue history的最大长度。

-- no_cuda: 如果设置为True,则不使用GPU进行预测。

5, 进入Terminal模式或cmd中,使用相应的环境并开始token

利用命令python preprocess.py --train_path ## --save_path ## --pretrained_model ##,其中##为相应路径

例如命令.txt中的第一行

python gpt\preprocess.py --train_path data\train.txt --save_path data\train.pkl --pretrained_model model\gpt2-distil-chinese-cluecorpussmall

gpt 画架构设计图 gpt2模型_python_03

6,使用python train.py,训练,例如命令.txt的第二行,选择合适的epoch和bicthsize

python gpt\train.py --epochs 1 --batch_size 8 --device 0,1 --train_path data/train.pkl --pretrained_model model\gpt2-distil-chinese-cluecorpussmall

gpt 画架构设计图 gpt2模型_自然语言处理_04

gpt 画架构设计图 gpt2模型_gpt 画架构设计图_05

7,使用gpt2-distil-chinese-cluecorpussmall模型进行20个epoch的训练,并观察output

python gpt\train.py --epochs 20 --batch_size 8 --device 0,1 --train_path data/train.pkl --pretrained_model model\gpt2-distil-chinese-cluecorpussmall

gpt 画架构设计图 gpt2模型_chatgpt_06

8,使用python gpt\interact.py进行对话,例如命令.txt的第三行

python gpt\interact.py --no_cuda --model_dir outputs\min_ppl_model

gpt 画架构设计图 gpt2模型_自然语言处理_07

        实验旨在学习和训练一个GPT模型,感兴趣的小伙伴可以试一试!