Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用垂直领域数据集进行断点训练后的几个问题 #68

Closed
Sowhat007 opened this issue Apr 12, 2023 · 4 comments
Closed

使用垂直领域数据集进行断点训练后的几个问题 #68

Sowhat007 opened this issue Apr 12, 2023 · 4 comments

Comments

@Sowhat007
Copy link

感谢你们分享这么棒的工作!我用了一下断点重训来做文本分类的任务,请教两个问题:

1,训练时间是否合理?(30万条数据,4张3090Ti花了12.5小时)
2,程序会输出正确分类以外的内容,比如手指应该被分到上肢,程序会分出来上肢和下肢。并且会重复输出(调高repetition penalty无效),我个人预估是因为训练数据中的多分类我用了分号分隔每个分类,程序不知道断开,我可能应该用句号。

详情:
1、使用fintune.sh,调整了模型的地址,底座模型使用BELLE-7B,lora层使用Chinese-Vicuna-7B的checkpoint-11600
2、参数:test-size 200, eval-step 200, save-step 200.
3、核心代码没修改,跳了路径及显卡数量等。
4、数据集是文本分类任务,按照instruction, input, output做成一个json,instruction 10个字,input 20字,output 50个字以内,一共30万条。

系统:
1、Ubantu系统
2、3090Ti 4张
3、python环境是3.8,torch是2.0.0,CUDA是117,transformers是4.28.0.dev0,tokenizers是0.13.3,sentencepiece是0.1.97

@Facico
Copy link
Owner

Facico commented Apr 12, 2023

感谢对我们项目的关注!
你的情况我可以给出下面的建议:
1、我们的底座模型是原生的llama,如果更改底座模型不一定会和我们提供的lora适配。你可以使用我们相关的推理代码试试,看看适配效果怎么样。
2、instruction我建议是设置成统一格式的,不仅方便领域迁移还能保留更多原来的能力,比如我们医疗问答Chinese-Vicuna-medical中的第三种方法。
3、其实如果是分类任务的话,我的理解是output应该会短一点?比如一个简单的例子,“请根据问题选出下列正确的选项,中国的首都在哪?A.北京\nB.上海\nC.北海\nD.钝角。正确答案是哪一个”,output:“A”这样。不过你也可以类似像这样,把问题背景描述清楚一点,有时候可以加一个"let's think step by step"推理效果也会变强
4、我们使用3张2080Ti,20w数据从checkpoint-11600开始大概是花了24个小时,你这个时间我觉得合理。如果你能正常跑起来环境应该是没有问题的。

@Sowhat007
Copy link
Author

谢谢!我们按照你的建议试了一下,结果如下:

1,改为原生llama-7b后问题没有明显好转,估计可以排除这个因素。

2,用了固定形式的instruction,效果有所提升,当输入对应的instruction时,可以按照训练数据给出输出。我们也固定了输出的形式,用"1.第一类\n2.第二类\n3.第三类"的结构。模型的输出中,前几个回答就是正确答案!但是问题是模型会持续输出不对的答案。

3,模型失去了泛用能力,当我让他推荐电影或者写一段代码,他也会给出我分类任务的结果。而且英文任务也受到了同样的影响,不管问啥,输出都睡以"1.XXX\n2.XXX\n3.XXX"的形式输出。

个人感想:
1,垂直领域的数据量过大会导致模型失去泛用能力,甚至失去语言能力,即说人话的能力,因为我们的训练数据没有说人话,而是给出一个结果清单,所以模型面对大部分任务都直接给出结果清单。
2,需要找到一种方式,让模型知道什么时候停止。我的估计是,训练数据需要保留推理逻辑。就像Chinese-Vicuna-medical 中,第三种方式的回答也不完全正确。
3,试一试LLaMA-13b,估计泛用性受损可能会小一些?(待实验)

@Facico
Copy link
Owner

Facico commented Apr 19, 2023

如果只在垂直语料上训练其他指令性能受损是不可避免的问题,要保留其他能力可以把垂直语料和instruction数据集一起finetune或者在continue_finetune的时候混合一点instruction的数据集。
输出不对的答案其实对于各种大模型还是一个难题,即知识问答的结果到底是不是对的,对于大模型来讲只能不断的塞语料进去来强化,当然模型越大效果肯定越好。不过业务上来讲可以弄一个判别器来判断。

@Sowhat007
Copy link
Author

感谢!我之前猜想,用了中文的checkpoint或中文模型入BELLE-7b做底,就可以保留说中文人话的能力,实际上并不是。增加新知识数据训练并不是线性地增加模型效果,而是像您说的点,新的数据源加入后,需要重新训练模型,比如混入一些数据,比如从某些早期的断点开始训练,否则会失去之前的能力。所以大模型训练起来真的贵,要新增能力就得全盘考虑。

大模型相比小模型有了创造性和泛用性,也使得它不准确。在专业的垂直领域,特定且专业的任务,小模型还有一定的优势。大模型涌现能力的原因至今也没有定论,openAI自己也说重做的话还不一定能复现效果。这个领域还待持续探索~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants