ChatGLM-6B
ChatGLM-6B copied to clipboard
[BUG] 微调训练后, 一些无关的词条也被污染了?
Is there an existing issue for this?
- [X] I have searched the existing issues
Current Behavior
实际效果如下: 微调的训练数据确实达成了, 但是在无关词的对话中都被影响到了?
Expected Behavior
在没有触发到训练数据情况下应该不影响到其他对话
Steps To Reproduce
数据集: 来自本仓库ptuning提供的示例数据集 https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning
训练结果数据:
{'loss': 4.0038, 'learning_rate': 0.0, 'epoch': 0.42}
训练启动数据: 未做量化
PRE_SEQ_LEN=8
LR=1e-2
CUDA_VISIBLE_DEVICES=0 python3 main.py \
--do_train \
--train_file AdvertiseGen/train.json \
--validation_file AdvertiseGen/dev.json \
--prompt_column content \
--response_column summary \
--overwrite_cache \
--model_name_or_path THUDM/chatglm-6b \
--output_dir /root/autodl-tmp/train/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \
--overwrite_output_dir \
--max_source_length 64 \
--max_target_length 64 \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 16 \
--predict_with_generate \
--max_steps 3000 \
--logging_steps 10 \
--save_steps 1000 \
--learning_rate $LR \
--pre_seq_len $PRE_SEQ_LEN \
# --quantization_bit 4
Environment
- OS: Ubuntu 20.04.4 LTS
- Python: Python 3.10.10
- Transformers: 4.27.1
- PyTorch: 2.0.0
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) : True
Anything else?
No response
我感觉也是这样,是不是还得多任务训练?
同样,根据官方的数据集和官方的库训练完后,基本模型不能用了。 这个训练方法是错误的。请解决这个bug

应该是 加入 你想要的数据进入数据集,他是微调的,以前的知识保留的比较少,
灾难性遗忘,所以LLM是否不合适用来进行专有任务的微调?
同样遇到一样的问题,训练的内容也回答的不太对
![]()
玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问题了 我的跟你一摸一样的问题
我这边用lora训练的没出现这种情况。

我这边用lora训练的没出现这种情况。
![]()
可以商用是吗。好的。
lora训练方法:https://github.com/shibing624/lmft
p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。
p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。
啥方法。
目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。
能否理解为,p-tuning后的模型(即加载了prefix权重),只能在p-tuning训练的领域上表现好?
遇到同样的问题,基础问答都不正常了,完全按照官网step,用的也是官网的数据
p-tuning 法估计官网有bug。需要调整。现在无法使用
我用领域内的数据集测试倒是没问题,但是问业务无关的问题(比如“今天天气怎么样”)回复的全和业务相关的了(回答错误但是语句顺畅),但是没有出现回答不正常(比如出现UNK,重复词语等)的现象。是否是因为你们的数据集不够干净呢
@Leawnn 您好 我这边也是专业领域问答,可以参考一下本地文档问答的项目 https://github.com/imClumsyPanda/langchain-ChatGLM
能否理解为,p-tuning后的模型(即加载了prefix权重),只能在p-tuning训练的领域上表现好?
可以这样理解。加载了prefix之后,每次输入都会带上这个prefix。所以如果你训练出来的prefix用离散的prompt表示大概是“现在请您扮演一只只会喵喵的猫猫”,那么无论你之后问什么,模型得到的输入都类似于“现在请您扮演一只只会喵喵的猫猫[你的指令]”。所以模型大概率会根据prefix的指令输出“喵喵喵~”。(另一方面,这可能也反映出您tune出来的prefix非常有效。)
模型使用的prompt是不是会自动拼接上task type “text generation”,如果p-tuning的话会导致所有对话的prompt都受影响了,对于微调任务是不是要配置新的task type来进行微
目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。
我认为这个是正常的,原因同楼上 @songxxzp 所说,p-tuning更适合某个专一领域任务(比如举例的角色扮演),这里羊驼52k某种程度上还是一种open domain的QA,此时lora方式会更合适点
现在这个问题有解决办法了吗
同问
p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。
您好,请教一下,如何动态的移除这些权重呢
目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。
我认为这个是正常的,原因同楼上 @songxxzp 所说,p-tuning更适合某个专一领域任务(比如举例的角色扮演),这里羊驼52k某种程度上还是一种open domain的QA,此时lora方式会更合适点
您说的有道理,智谱AI之前有过一篇对ChatGLM的报告,使用ptuning方法微调模型,训练数据超过1000条就会完全破坏原来的对话能力,而官方给的AdvertiseGen训练集足足有114600条。我用ptuning v2微调了ChatGLM2,把数据集删到100条,就基本上可以正常对话,但4bit精度加载的时候还是有影响
玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问题了 我的跟你一摸一样的问题
![]()
玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问
这篇论文里《A Theoretical Analysis of the Repetition Problem in Text Generation》有讲到减小各个词汇生成的方差(字编码换成词的编码可能更好些),不过预训练好的大模型要再编码端做修改不太行,其他的话就是控制tempreture和topk那些参数了