ChatGLM-6B icon indicating copy to clipboard operation
ChatGLM-6B copied to clipboard

[BUG] 微调训练后, 一些无关的词条也被污染了?

Open xioozq opened this issue 1 year ago • 23 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Current Behavior

实际效果如下: 微调的训练数据确实达成了, 但是在无关词的对话中都被影响到了?

QQ20230405-220058 QQ20230405-215604

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

xioozq avatar Apr 05 '23 14:04 xioozq

我感觉也是这样,是不是还得多任务训练?

seastarmanager avatar Apr 05 '23 15:04 seastarmanager

同样,根据官方的数据集和官方的库训练完后,基本模型不能用了。 这个训练方法是错误的。请解决这个bug

dragononly avatar Apr 06 '23 02:04 dragononly

image 玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问题了

ray-008 avatar Apr 06 '23 02:04 ray-008

应该是 加入 你想要的数据进入数据集,他是微调的,以前的知识保留的比较少,

yangliuIOC avatar Apr 06 '23 02:04 yangliuIOC

灾难性遗忘,所以LLM是否不合适用来进行专有任务的微调?

liuyukid avatar Apr 06 '23 02:04 liuyukid

同样遇到一样的问题,训练的内容也回答的不太对

cn-vhql avatar Apr 06 '23 03:04 cn-vhql

image

玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问题了 我的跟你一摸一样的问题

dragononly avatar Apr 06 '23 07:04 dragononly

我这边用lora训练的没出现这种情况。

1120230406-155736@2x

shibing624 avatar Apr 06 '23 07:04 shibing624

我这边用lora训练的没出现这种情况。

1120230406-155736@2x

可以商用是吗。好的。

dragononly avatar Apr 06 '23 08:04 dragononly

lora训练方法:https://github.com/shibing624/lmft

shibing624 avatar Apr 06 '23 08:04 shibing624

p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。

songxxzp avatar Apr 07 '23 07:04 songxxzp

p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。

啥方法。

dragononly avatar Apr 07 '23 07:04 dragononly

目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。

zhys513 avatar Apr 08 '23 02:04 zhys513

能否理解为,p-tuning后的模型(即加载了prefix权重),只能在p-tuning训练的领域上表现好?

franklyd avatar Apr 09 '23 11:04 franklyd

issue 遇到同样的问题,基础问答都不正常了,完全按照官网step,用的也是官网的数据

JeffLu avatar Apr 10 '23 01:04 JeffLu

p-tuning 法估计官网有bug。需要调整。现在无法使用

dragononly avatar Apr 10 '23 01:04 dragononly

我用领域内的数据集测试倒是没问题,但是问业务无关的问题(比如“今天天气怎么样”)回复的全和业务相关的了(回答错误但是语句顺畅),但是没有出现回答不正常(比如出现UNK,重复词语等)的现象。是否是因为你们的数据集不够干净呢

Leawnn avatar Apr 10 '23 06:04 Leawnn

@Leawnn 您好 我这边也是专业领域问答,可以参考一下本地文档问答的项目 https://github.com/imClumsyPanda/langchain-ChatGLM

imClumsyPanda avatar Apr 10 '23 06:04 imClumsyPanda

能否理解为,p-tuning后的模型(即加载了prefix权重),只能在p-tuning训练的领域上表现好?

可以这样理解。加载了prefix之后,每次输入都会带上这个prefix。所以如果你训练出来的prefix用离散的prompt表示大概是“现在请您扮演一只只会喵喵的猫猫”,那么无论你之后问什么,模型得到的输入都类似于“现在请您扮演一只只会喵喵的猫猫[你的指令]”。所以模型大概率会根据prefix的指令输出“喵喵喵~”。(另一方面,这可能也反映出您tune出来的prefix非常有效。)

songxxzp avatar Apr 10 '23 09:04 songxxzp

模型使用的prompt是不是会自动拼接上task type “text generation”,如果p-tuning的话会导致所有对话的prompt都受影响了,对于微调任务是不是要配置新的task type来进行微

zhang122994917 avatar Apr 11 '23 07:04 zhang122994917

目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。

我认为这个是正常的,原因同楼上 @songxxzp 所说,p-tuning更适合某个专一领域任务(比如举例的角色扮演),这里羊驼52k某种程度上还是一种open domain的QA,此时lora方式会更合适点

xingchensong avatar Apr 12 '23 07:04 xingchensong

现在这个问题有解决办法了吗

lrx1213 avatar Apr 19 '23 03:04 lrx1213

同问

windlin716 avatar Apr 21 '23 01:04 windlin716

p-tuning是通过加入并训练一个连续的prompt prefix(相对之下,人类构造的prompt是离散的)提升指定任务上的性能。如果更换任务,相当于使用了错误的prompt,性能下降属于正常现象(相当于让模型完成summary任务,但是用的prompt却是:请把以下语句翻译成英文)。p-tuning并不改变模型的权重,因此在将加入的prefix移除后,模型依然是p-tuning前的模型。可以在不同任务上进行p-tuning并保存prefix权重,之后按需求加载。

您好,请教一下,如何动态的移除这些权重呢

izhaolinger avatar May 25 '23 07:05 izhaolinger

目前使用官方提供的p-tuning方案在羊驼52k中文数据上微调,出来的效果直接影响到原始的模型本来回答很好的内容,52K中文数据的回答也不尽人意,不知道在微调方面是不是还有什么技巧。目前有调整的是文本的输入输出长度,其他的跟官方给的参数一致。

我认为这个是正常的,原因同楼上 @songxxzp 所说,p-tuning更适合某个专一领域任务(比如举例的角色扮演),这里羊驼52k某种程度上还是一种open domain的QA,此时lora方式会更合适点

您说的有道理,智谱AI之前有过一篇对ChatGLM的报告,使用ptuning方法微调模型,训练数据超过1000条就会完全破坏原来的对话能力,而官方给的AdvertiseGen训练集足足有114600条。我用ptuning v2微调了ChatGLM2,把数据集删到100条,就基本上可以正常对话,但4bit精度加载的时候还是有影响

Lxr713 avatar Aug 01 '23 14:08 Lxr713

image 玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问题了 我的跟你一摸一样的问题
image

玩蛋,一步一步根据官方的例子微调出来的东西已经不能用了。只能回答训练时喂的数据相关问题,不能正常回答其他问

hxc123fau avatar Aug 07 '23 07:08 hxc123fau

这篇论文里《A Theoretical Analysis of the Repetition Problem in Text Generation》有讲到减小各个词汇生成的方差(字编码换成词的编码可能更好些),不过预训练好的大模型要再编码端做修改不太行,其他的话就是控制tempreture和topk那些参数了

hxc123fau avatar Aug 07 '23 07:08 hxc123fau