shibing624 / MedicalGPT

MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型,实现了包括增量预训练(PT)、有监督微调(SFT)、RLHF、DPO、ORPO。
Apache License 2.0
2.94k stars 452 forks source link

PPO的训练代码里,预处理函数把数据切成了单字,这是正常的吗? #312

Closed chiquitita-101 closed 2 months ago

chiquitita-101 commented 5 months ago

Describe the Question

Please provide a clear and concise description of what the question is. 训练代码PPO 训练脚本: image

因为想用自己的数据;所以打印了一下预处理后的数据;结果如下: image 第一条数据:[{'from': 'human', 'value': '治疗阳痿吃什么药呢?,性生活一直很正常的,但是这段时间感觉性欲变低了,有时勃起都感觉很困难,试过许多的方法都没效果,听朋友说我这种情况可能会是早泄,想知道治疗早泄的药物?'}, {'from': 'gpt', 'value': '男子早泄、早泄病症的再次发生,多由恣情纵欲,或青年误犯性交,至命门火衰,精气虚寒;或思量忧郁,伤损心脾;或因恐惧伤肾,也有因湿热下注,宗筋弛而痿的。但主要是肾阳虚衰而痿。肾阳为那身阳气之根本,有温煦形体,蒸化水液,增进围产生长发育等功能。肾阳虚衰则温煦失责,气化无权。因而再次发生畏寒肢冷,性机能减退。故见男子早泄不举或不坚,且伴发头晕目眩。'}] 加上vicuna的模板:A chat between a curious user and an artificial intelligence assistant.......;可以看到数据被切成了单字;

预处理代码里yield出来的是个字符串;所以导致了这样;是不是本来是要拿到用户prompt?这是正常的吗? image

shibing624 commented 5 months ago

数据集格式错误,看下示例咋写的,看下colab的。

chiquitita-101 commented 5 months ago

这是用的库里面data/finetune目录下的源数据medical_sft_1K_format.jsonl的前十行;jsonl格式取前十行应该没问题吧

chiquitita-101 commented 5 months ago

298511648-81b57590-a88e-49c6-aa05-551711f40acf

如果是想要拿出用户的prompt;那这应该是个bug; 我画出来的这三行:第一行yield出来的是一个字符串;所以在下面两行取偶数索引的时候;取的不是对话里的偶数回合(用户query);而是一个字符串里的偶数索引的字符。 因为我不确定这个是不是故意要切成单字,所以才这样问;如果不是,那应该是bug

user2311717757 commented 2 months ago

我也遇到这个问题,感觉需要把get_prompt改成get_dialog