Chinese-Vicuna
Chinese-Vicuna copied to clipboard
使用垂直领域数据集进行断点训练后的几个问题
感谢你们分享这么棒的工作!我用了一下断点重训来做文本分类的任务,请教两个问题:
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
感谢对我们项目的关注! 你的情况我可以给出下面的建议: 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个小时,你这个时间我觉得合理。如果你能正常跑起来环境应该是没有问题的。
谢谢!我们按照你的建议试了一下,结果如下:
1,改为原生llama-7b后问题没有明显好转,估计可以排除这个因素。
2,用了固定形式的instruction,效果有所提升,当输入对应的instruction时,可以按照训练数据给出输出。我们也固定了输出的形式,用"1.第一类\n2.第二类\n3.第三类"的结构。模型的输出中,前几个回答就是正确答案!但是问题是模型会持续输出不对的答案。
3,模型失去了泛用能力,当我让他推荐电影或者写一段代码,他也会给出我分类任务的结果。而且英文任务也受到了同样的影响,不管问啥,输出都睡以"1.XXX\n2.XXX\n3.XXX"的形式输出。
个人感想: 1,垂直领域的数据量过大会导致模型失去泛用能力,甚至失去语言能力,即说人话的能力,因为我们的训练数据没有说人话,而是给出一个结果清单,所以模型面对大部分任务都直接给出结果清单。 2,需要找到一种方式,让模型知道什么时候停止。我的估计是,训练数据需要保留推理逻辑。就像Chinese-Vicuna-medical 中,第三种方式的回答也不完全正确。 3,试一试LLaMA-13b,估计泛用性受损可能会小一些?(待实验)
如果只在垂直语料上训练其他指令性能受损是不可避免的问题,要保留其他能力可以把垂直语料和instruction数据集一起finetune或者在continue_finetune的时候混合一点instruction的数据集。 输出不对的答案其实对于各种大模型还是一个难题,即知识问答的结果到底是不是对的,对于大模型来讲只能不断的塞语料进去来强化,当然模型越大效果肯定越好。不过业务上来讲可以弄一个判别器来判断。
感谢!我之前猜想,用了中文的checkpoint或中文模型入BELLE-7b做底,就可以保留说中文人话的能力,实际上并不是。增加新知识数据训练并不是线性地增加模型效果,而是像您说的点,新的数据源加入后,需要重新训练模型,比如混入一些数据,比如从某些早期的断点开始训练,否则会失去之前的能力。所以大模型训练起来真的贵,要新增能力就得全盘考虑。
大模型相比小模型有了创造性和泛用性,也使得它不准确。在专业的垂直领域,特定且专业的任务,小模型还有一定的优势。大模型涌现能力的原因至今也没有定论,openAI自己也说重做的话还不一定能复现效果。这个领域还待持续探索~