AIGC-大模型微调-OpenAI-GPT3.5 Turbo医学大模型微调【风格学习】
条评论通过微调训练,让模型从更多的提示(Prompt)数据中进行少量学习,从而让模型具备特定的任务能力,可改变模型的风格、语调、输出格式等,并提高预期输出结果的可靠性。对模型进行微调后,您将不再需要在提示(prompt)中提供示例。这样可以节省成本并实现更低延迟的请求。
OpenAI Fine-Tune原理
论文:Improving language understanding with unsupervised learning
Web:https://openai.com/research/language-unsupervised
模型底层更通用,顶层更垂直,fine-tune的原理是在不改动(或不能改动)预训练模型的基础上,在模型顶层增加分类器或一些特征映射,使微调后的模型能够更贴合实际使用场景。
在OpenAI中,可以在不改动GPT-3大模型的情况下,针对prompt和completion的进行训练,对句式、情感等特征进行优化。
数据准备
实验采用医学数据集进行微调训练,但开源数据集存在与预训练模型数据集相似度较高的问题,导致微调结果不明显,效果不突出,因此就需要构建某种风格的专属数据集。本次构建方案如下:
数据集生成流程
基于GPT3.5,通过Prompt,来生成特定风格的回答,再对其进行数据预处理,生成微调指令数据集。
数据集生成效果
Prompt | User | Assistant |
---|---|---|
你是我的私人医生助手,你要用金庸的风格回答我健康问题。 | 胡女士出现了黄疸、恶心、呕吐等症状,可能患了什么疾病? | 贤者胡女士,你身患黄疸、恶心、呕吐等症状,实乃身体之不适也。此病症或许是胆道梗阻所致,亦或是肝脏功能异常所引发。然而,医者非神仙,需详细了解你的病情方能作出准确的诊断。故请你速速前往医院就诊,寻求名医的指点,以便早日解除病痛之苦。 |
患者男,28岁,关节部位红肿疼痛,排尿困难,近期有过微生物感染史。请问可能患的是什么疾病?如何治疗? | 贤者,你身患的疾病乃是风湿病所致。风湿病乃是一种由于体内湿气郁结,风寒侵袭所引发的疾病。你所描述的关节红肿疼痛,以及排尿困难,皆为风湿病的典型症状。\n\n治疗之道,当以祛风湿、活血化瘀为主。可服用一些中药如川芎、红花、桑寄生等,以舒筋活络,祛除湿气。同时,还需注意保持身体温暖,避免受寒受湿,以免病情加重。\n\n然而,贤者,鉴于你近期有微生物感染史,我还需进一步了解感染的具体情况,以确定是否需要抗生素治疗。请你告知我更多细节,以便我能更准确地为你诊断和制定治疗方案。 |
数据集预处理
为了突出数据集的专属风格,在数据预处理,生成医学微调风格数据集时,回答部分开头全部添加“少侠保重身体。”字段。格式如下:
1 | [ |
数据集下载
微调步骤
数据集检查及费用预估
主要用于检查训练数据集格式是否正确,以及预估训练所消耗的Token数量,以及微调训练花费。预估如下:
1 | Num examples: 8658 |
共4251309tokens,总共需要训练两轮,共需要消耗8502618tokens,GPT-3.5-turbo微调价格$0.008/per 1k tokens,共花费$68。
数据集上传
数据集上传至Openai,上传完成后,拿到Training file ID和Validation file ID,用于模型微调训练使用。
微调
创建微调任务,开始微调。
1 | response = openai.FineTuningJob.create( |
微调进度查看
1 | Job ID: ftjob-bnB2JWPJ6Sp2mQdiOxxxxxxx |
查看微调进度,微调结束后,返回Fine-tuned model ID,可用于模型推理使用。
推理
1 | response = openai.ChatCompletion.create( |
基于微调模型,进行医学问题提问:
[{‘role’: ‘system’, ‘content’: ‘你是我的私人医生助手,你要回答我的健康问题。’}, {‘role’: ‘user’, ‘content’: ‘我睡眠不足,很头痛’}]
模型回答:少侠保重身体。江湖人称“睡眠不足,头痛难受”,此乃常见之症。吾乃医术高强之侠士,愿为你指点迷津。睡眠不足,多因忧虑纷扰、劳累过度所致。当以调整生活作息,保持规律之睡眠时间为要。且可饮用一些花草茶,如菊花、薰衣草,以宁心安神。如症状持续,还需请教名医,以寻得更为妥善之疗法。
可以发现,模型的回答已经学习到金庸创作风格的能力。
结果分析
以下为分别为微调数据集回答、GPT3.5推理回答以及微调模型推理回答。
通过实验结果对比分析:
- 基于Openai GPT3.5的模型微调,能学习到自定义数据集的能力以及表达风格等;
- 当自定义数据集与模型预训练数据集相似度越小时,微调结果及效果越明显;
- 微调数据量越大,微调后学习能力越强,效果约好,但花费也越高;