本实验修改自:https://github.com/Glaciohound/LM-Steer.git
本实验共包含以下部分:
- 毒性控制实验复现
- 情感控制复现
- 模型迁移实验复现
- 连续控制实验
- 协同控制实验
- 风格迁移实验
- 中文扩展实验
- 输入层词嵌入实验
- 自适应情感控制
- 非线性的控制器
其中1-5为论文复现部分,6-10为创新拓展部份。
实验作者(按名字字母排序)
- 蔡嘉豪 南京大学
- 何志烨 南京大学
- 邱嘉彬 南京大学
- 郑儒杰 南京大学
所有实验均包含 train(训练)、generate(生成)、evaluate(评估) 三个核心阶段。其中为了节约 generate 的时间,可以执行采样脚本(data/prompts/sample_prompts.py),指定采样数量以抽取部分数据用于生成,快速验证结果。
- 数据格式:不同实验的训练数据集格式各异,细节无需深入。
- 毒性控制实验:数据集下载至本地存储。
- 情感控制实验:通过 API 远程访问数据集。
- 其他:包含小组自主整理的定制化数据集。
- 核心逻辑:基于
prompt生成语句,再对生成内容进行评估。 - 数据格式:生成阶段数据集多以
prompt.json格式存在,用于提供生成引导文本。 - 关键参数:
dataset_name:指定加载的数据集,支持的数据集可通过代码LM-Steer\experiments\training\data.py中的load_dataset函数查看。data_dir:指定数据集文件路径,但部分远程数据集(如sst-5)无需此参数。
- 数据采样脚本功能
- 用途:从
prompt数据集中随机抽取指定数量的数据,用于生成阶段,避免全量数据生成的耗时问题,加速实验迭代。 - 执行方式:直接运行脚本并指定采样数量(具体参数见脚本说明)。
- 用途:从
- 作用:生成阶段的输入文件,存放用于引导生成的
prompts路径。 - 格式:通常为
prompt.json等结构化文件。
- 作用:生成阶段的输出文件,用于保存模型生成的语句内容。 注意该参数不需要额外指定文件夹,默认和
eval_file处于同一个文件夹下。
- 指定需要评估哪些指标,例如
dist-n说明要评估生成文本的多样性。具体查看LM-Steer\experiments\evaluation\evaluate.py文件
- 功能:通过
model参数指定实验使用的模型(如gpt2-medium、gpt2-small等)。 - 文件规范:不同模型的训练 checkpoint 和日志文件需存放在独立文件夹中,命名可参考
ckpt_name、output_file等参数的命名规则。 - 模型列表:支持的模型可通过
get_module.py文件查看。
- 功能:指定
LM-Steer模块类型,控制模型的适配逻辑。 - 参数范围:支持的参数值定义在
LM-Steer\lm_steer\models\steers.py文件中。 - 注意事项:训练阶段(Train)与生成阶段(Generate)的
adaptor_class需保持一致,确保模型适配逻辑统一。
./detoxification_sentiment_continual_control.sh 1./detoxification_sentiment_continual_control.sh 2 [采样数量]./detoxification_sentiment_continual_control.sh 3 [采样数量]- 训练数据集:
data/toxicity/jigsaw-unintended-bias-in-toxicity-classification - 生成和评估的文件路径:
logs/detoxification-gpt2-large - 默认模型:
gpt2-large(可自行指定) - adaptor_class 默认值:
multiply(可自行指定) - 默认采样脚本启用,采样数量为500。若要跑全量测试,则使用
data/prompts/nontoxic_prompts-10k.jsonl引导数据集,注意修改相关参数。 - 默认评估指标:
toxicity,ppl-big,dist-n
./sentiment_control.sh- source:指定使用什么倾向的prompts来generate(
positive,neutral,negative) - control:指定模型生成的情感倾向,分为两档
-5(negative)和5(positive)。 - 训练数据集:
sentiment-sst5(远程数据集) - 引导词数据集:
data/prompts/sentiment_prompts-10k/${source}_prompts.jsonl - 默认不开启数据采样脚本
- 模型:默认使用
gpt2-large,可以自行指定 - 评估指标:
sentiment,ppl-big,dist-n - adaptor_class 默认值:
multiply(可自行指定) - 生成的checkpoint和相关的文件路径:
logs/sentiment-gpt2-large
./steer_transfer.sh- ckpt_name:训练好的,等待被迁移的模型路径
- output_file:目标模型的路径
- 其余参数按命名规范修改,具体请查阅相关代码
./detoxification_sentiment_continual_control.sh 7- 默认进行数据采样,采样数可以在shell脚本中修改
- 默认对情感控制进行连续控制实验,steer values可以自行指定。其余参数作用和之前的实验类似。
./detoxification_sentiment_continual_control.sh 8- 实验参数和连续控制实验类似,不再赘述。
./formal_train.sh./formal_generate.sh./formal_evaluate.sh- 参数和之前实验类似
- 特别注意:
dataset_name该参数指定为toxicity,是因为该实验的数据集是组内自己整理的,数据处理格式按照toxicity数据集的格式处理。将dataset_name该参数指定为toxicity可以借用现成的数据处理代码。
./detoxification_gpt_zh.sh- 这里的模型需要使用支持中文的模型,默认使用
uer/gpt2-large-chinese-cluecorpussmall,可以选用Qwen模型。 - 默认使用毒性控制数据集,可以选用情感控制。
- 其余参数与其他实验类似。
./input_ex.sh- 具体运行参数(4,5, 6 , 7)请阅读注释
- 默认在情感控制数据集上进行试验。脚本参数和上面的实验类似,不在赘述。
./auto_sentiment_control.sh- 不需要修改任何参数,直接运行即可。
nonlinear_sentiment_control.sh- 默认在情感控制数据集上进行试验
- 参数和情感控制复现实验类似,不再赘述。
- 注意:
adaptor_class需指定为nonlinear