MedicalGPT:依据LLaMA-13B的中英医疗问答模型(LoRA)、完成包含二次预练习、有监督微调、奖赏建模、强化学习练习[LLM:含Ziya-LLaMA]。
**** 练习医疗大模型,完成包含二次预练习、有监督微调、奖赏建模、强化学习练习。
分四阶段练习GPT模型,来自Andrej Karpathy的演讲PDF State of GPT,视频 Video
-
版本迭代
-
V1:发布中文医疗LoRA模型,依据Ziya-LLaMA-13B-v1模型,SFT微调了一版医疗模型,医疗问答作用有提高,发布微调后的LoRA权重,
-
V0:以医疗为例,练习范畴大模型,完成了四阶段练习:包含二次预练习、有监督微调、奖赏建模、强化学习练习。
-
-
依据ChatGPT Training Pipeline,本项目完成了范畴模型–医疗模型的四阶段练习:
- 第一阶段:PT(Continue PreTraining)增量预练习,在海量范畴文档数据上二次预练习GPT模型,以注入范畴常识
- 第二阶段:SFT(Supervised Fine-tuning)有监督微调,结构指令微调数据集,在预练习模型基础上做指令精调,以对齐指令意图
- 第三阶段:RM(Reward Model)奖赏模型建模,结构人类偏好排序数据集,练习奖赏模型,用来对齐人类偏好,首要是”HHH”原则,详细是”helpful, honest, harmless”
- 第四阶段:RL(Reinforcement Learning)依据人类反应的强化学习(RLHF),用奖赏模型来练习SFT模型,生成模型运用奖赏或惩罚来更新其战略,以便生成更高质量、更契合人类偏好的文本
1.模型介绍
Model | Base Model | Introduction |
---|---|---|
shibing624/ziya-llama-13b-medical-lora | IDEA-CCNL/Ziya-LLaMA-13B-v1 | 在240万条中英文医疗数据集shibing624/medical上SFT微调了一版Ziya-LLaMA-13B模型,医疗问答作用有提高,发布微调后的LoRA权重 |
1.1 依据LLaMA-13B的中英医疗问答模型(LoRA)
input_text | predict |
---|---|
一岁宝宝发烧能吃啥药? | 孩子的身体是很脆弱的,假如不留意保护好自己就会呈现各种疾病。有些家长在看到孩子生病后都十分着急,想要马上给他们用药医治,但其实并没有那么简略,因为每个人关于药物的敏感度和耐受性都是不同的,所以咱们需求依据详细状况来挑选合适的办法进行医治才可以到达最佳作用。1、首要大多数小儿退热药中含有解热镇痛成分阿司匹林或布洛芬等,这类药品虽然副作用较少,但也存在过量运用引起胃肠道损害乃至消化道溃疡出血的危险;2、还有部分小儿退热药中含有扑尔敏等抗组胺药,它们本身归于处方药,应该严厉依照医嘱服用,切勿私行加减剂量或许延伸用药时刻; 3、此外,某些小儿退热药中含有维生素 C 及葡萄糖酸钙等养分弥补剂,只有当患儿随同脱水症状(如口渴、尿色深)时才考虑增加,不然简略形成电解质紊乱。 |
- 在中文敞开测试集中的体现优异,承继了两方面的优势:
- 微调练习的底座是 Ziya-LLaMA-13B 模型,是较强的中英文底座模型,
- 微调运用的是高质量 240 万条中英文医疗指令数据集,和多种通用指令数据集,微调后的模型在医疗行业答复才能到达领先水平,在通用问题上的答复才能不弱于 LLaMA-13B。
1.1.1 练习评价成果
training args:
{"per_device_train_batch_size": 8, "per_device_eval_batch_size": 8, "per_gpu_train_batch_size": null, "per_gpu_eval_batch_size": null, "gradient_accumulation_steps": 1, "eval_accumulation_steps": null, "eval_delay": 0, "learning_rate": 2e-05, "weight_decay": 0.0, "adam_beta1": 0.9, "adam_beta2": 0.999, "adam_epsilon": 1e-08, "max_grad_norm": 1.0, "num_train_epochs": 10.0, "max_steps": -1, "lr_scheduler_type": "linear", "warmup_ratio": 0.0, "warmup_steps": 50, "log_level": "passive", "log_level_replica": "warning", "log_on_each_node": true, "logging_dir": "outputs-ziya-llama-13b-sft-med-v2/logs", "logging_strategy": "steps", "logging_first_step": false, "logging_steps": 50, "logging_nan_inf_filter": true, "save_strategy": "steps", "save_steps": 50, "save_total_limit": 3, "save_safetensors": false, "save_on_each_node": false, "no_cuda": false, "use_mps_device": false, "seed": 42, "data_seed": null, "jit_mode_eval": false, "use_ipex": false, "bf16": false, "fp16": true, "fp16_opt_level": "O1", "half_precision_backend": "cuda_amp", "bf16_full_eval": false, "fp16_full_eval": false, "tf32": null, "local_rank": 0, "xpu_backend": null, "tpu_num_cores": null, "tpu_metrics_debug": false, "debug": [], "dataloader_drop_last": false, "eval_steps": 50, "dataloader_num_workers": 0, "past_index": -1, "run_name": "outputs-ziya-llama-13b-sft-med-v2", "disable_tqdm": false, "remove_unused_columns": false, "label_names": null, "load_best_model_at_end": true, "metric_for_best_model": "loss", "greater_is_better": false, "ignore_data_skip": false, "sharded_ddp": [], "fsdp": [], "fsdp_min_num_params": 0, "fsdp_config": { "fsdp_min_num_params": 0, "xla": false, "xla_fsdp_grad_ckpt": false }, "fsdp_transformer_layer_cls_to_wrap": null, "deepspeed": null, "label_smoothing_factor": 0.0, "optim": "adamw_torch", "optim_args": null, "adafactor": false, "group_by_length": false, "length_column_name": "length", "report_to": [ "tensorboard" ], "ddp_find_unused_parameters": false, "ddp_bucket_cap_mb": null, "dataloader_pin_memory": true, "skip_memory_metrics": true, "use_legacy_prediction_loop": false, "push_to_hub": false, "resume_from_checkpoint": null, "hub_model_id": null, "hub_strategy": "every_save", "hub_token": "<hub_token>", "hub_private_repo": false, "gradient_checkpointing": false, "include_inputs_for_metrics": false, "fp16_backend": "auto", "push_to_hub_model_id": null, "push_to_hub_organization": null, "push_to_hub_token": "<push_to_hub_token>", "mp_parameters": "", "auto_find_batch_size": false, "full_determinism": false, "torchdynamo": null, "ray_scope": "last", "ddp_timeout": 1800, "torch_compile": false, "torch_compile_backend": null, "torch_compile_mode": null }
train loss:
evaluate loss:
本项目开源在 github repo:
- shibing624/textgen
- shibing624/MedicalGPT
运用 textgen 库:textgen,可调用 LLaMA 模型:
Install package:
pip install -U textgen
from textgen import GptModel
def generate_prompt(instruction):
return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:{instruction}\n\n### Response: """
ziya_model_dir = ""
model = GptModel("llama", ziya_model_dir, peft_)
predict_sentence = generate_prompt("一岁宝宝发烧能吃啥药?")
r = model.predict([predict_sentence])
print(r)
1.1.2 HuggingFace Transformers
Without textgen, you can use the model like this:
First, you pass your input through the transformer model, then you get the generated sentence.
Install package:
pip install transformers
import sys
from peft import PeftModel
from transformers import LlamaForCausalLM, LlamaTokenizer
ziya_model_dir = ""
model = LlamaForCausalLM.from_pretrained(ziya_model_dir, device_map='auto')
tokenizer = LlamaTokenizer.from_pretrained(ziya_model_dir)
model = PeftModel.from_pretrained(model, "shibing624/ziya-llama-13b-medical-lora")
device = "cuda" if torch.cuda.is_available() else "cpu"
def generate_prompt(instruction):
return f"""Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:{instruction}\n\n### Response: """
sents = ['一岁宝宝发烧能吃啥药', "who are you?"]
for s in sents:
q = generate_prompt(s)
inputs = tokenizer(q, return_tensors="pt")
inputs = inputs.to(device=device)
generate_ids = ref_model.generate(
**inputs,
max_new_tokens=120,
do_sample=True,
top_p=0.85,
temperature=1.0,
repetition_penalty=1.0,
eos_token_id=tokenizer.eos_token_id,
bos_token_id=tokenizer.bos_token_id,
pad_token_id=tokenizer.pad_token_id,
)
output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True)[0]
print(output)
print()
output:
一岁宝宝发烧能吃啥药
孩子的身体是很脆弱的,假如不留意保护好自己就会呈现各种疾病。有些家长在看到孩子生病后都十分着急,想要马上给他们用药医治,但其实并没有那么简略,因为每个人关于药物的敏感度和耐受性都是不同的,所以咱们需求依据详细状况来挑选合适的办法进行医治才可以到达最佳作用。1、首要大多数小儿退热药中含有解热镇痛成分阿司匹林或布洛芬等,这类药品虽然副作用较少,但也存在过量运用引起胃肠道损害乃至消化道溃疡出血的危险;2、还有部分小儿退热药中含有扑尔敏等抗组胺药,它们本身归于处方药,应该严厉依照医嘱服用,切勿私行加减剂量或许延伸用药时刻;3、此外,某些小儿退热药中含有维生素C及葡萄糖酸钙等养分弥补剂,只有当患儿随同脱水症状(如口渴、尿色深)时才考虑增加,不然简略形成电解质紊乱。
模型文件组成:
ziya-llama-13b-medical-lora
├── adapter_config.json
└── adapter_model.bin
1.1.3 猜测成果
Human | Assitant |
---|---|
痤疮是什么原因导致的? | 痤疮,又称青春痘、粉刺。它首要发生在面部和胸背部位,体现为黑头粉刺、白头粉刺、丘疹、脓疱、结节等多种方法。其间以黑头粉刺最常见,约占全身皮肤病患者的70%左右。那么,痤疮是什么原因引起的呢?下面就给咱们介绍一些相关内容。1、雄性激素分泌过旺:男女都会长痘痘,可是女孩子比较喜爱用化妆品来掩盖脸上的问题,并且很多人不知道这样做反而加剧了自己的毛囊炎症状,所以说平常应该少运用含有雌激素类的产品。2、饮食习惯差:经常吃辛辣油腻的东西或许甜食也或许形成体内毒素堆积,然后诱发痤疮。3、压力太大:假如你总是处于严峻焦虑的心情之中,一起还没有及时调整好心态,那么很简略呈现内分泌失调的状况,从而影响到肌肤健康。4、睡觉质量差:熬夜对咱们的身体损害十分严峻,尤其是关于年轻人群更甚,他们需求保证足够的睡觉才行,不然很简略让肌肤变得暗沉无光泽。 |
怎么让自己精力充沛,列5点主张 | 1、保证睡觉质量:每天晚上7-8小时的高质量睡觉是提高身体和大脑活跃度最有用的办法。2、合理饮食:均衡养分摄入关于保持人体正常运转至关重要,多吃蔬菜水果,少油腻辛辣刺激性食物。3、恰当练习:坚持必定强度的练习可以促进血液循环,增加肌肉耐力,改进心肺功用等。4、学习新常识:不断触摸新事物,开辟视野,思考问题,都会使得咱们更具创造力与创意。5、放松心情:经过冥想或许瑜伽来缓解压力,也可以听音乐或看电影来调度心情。 |
脸上长青春痘怎么办,能吃啥药,需求留意啥 | 你好,依据您的描绘考虑是痤疮。主张外用维胺酯乳膏或许阿达帕林凝胶进行医治看看,平常忌讳辛辣和刺激性食物,如海鲜、狗肉、羊肉等“发”动品,以及葱蒜韭姜等刺激性调料。多喝水,少吃油腻高热量食物。 |
小孩发烧怎么办 | 宝宝的抵抗力是比较差的,所以很简略就会呈现伤风或许其他疾病。假如宝宝在平常没有留意保暖,那么也或许导致身体受凉而引起了伤风等症状,这样不只关于健康形成影响,还或许让宝宝呈现高热的状况。因而当家长们发现自己的宝宝呈现了高热的问题之后必定要及早进行医治和护理才好。 |
1、首要咱们应该给宝宝服用退烧药物来协助降温,可是千万不要盲目运用退烧药物,不然只会加剧宝宝的病况,最好带着宝宝到医院去查看清楚详细原因之后再针对性地采纳办法处理。 | |
2、别的大人们也需求做好防备作业,尤其是气候变化的时候更应该多关怀下宝宝的身体状况,防止宝宝受寒受凉然后诱发各种疾病,一起也要尽量削减宝宝触摸细菌病毒的时机,增强宝宝的免疫力。 | |
3、除了上面两点之外,大人们还可以经过按摩推拿穴道的办法来缓解宝宝的病痛,促进血液循环,提高推陈出新速度,到达快速消炎止疼的作用 |
1.1.4 练习数据集
- 50 万条中文 ChatGPT 指令 Belle 数据集:BelleGroup/train_0.5M_CN
- 100 万条中文 ChatGPT 指令 Belle 数据集:BelleGroup/train_1M_CN
- 5 万条英文 ChatGPT 指令 Alpaca 数据集:50k English Stanford Alpaca dataset
- 2 万条中文 ChatGPT 指令 Alpaca 数据集:shibing624/alpaca-zh
- 69 万条中文指令 Guanaco 数据集 (Belle50 万条 + Guanaco19 万条):Chinese-Vicuna/guanaco_belle_merge_v1.0
- 240 万条中文医疗数据集 (包含预练习数据和指令微调数据集):shibing624/medical
假如需求练习 ChatGLM/LLAMA/BLOOM 模型,请参阅 github.com/shibing624/…
1.2 姜子牙系列模型
- Ziya-LLaMA-13B-v1.1
- Ziya-LLaMA-13B-v1
- Ziya-LLaMA-7B-Reward
- Ziya-LLaMA-13B-Pretrain-v1
- Ziya-BLIP2-14B-Visual-v1
1.2.1 简介
姜子牙通用大模型 V1 是依据 LLaMa 的 130 亿参数的大规划预练习模型,具有翻译,编程,文本分类,信息抽取,摘要,案牍生成,常识问答和数学核算等才能。现在姜子牙通用大模型已完成大规划预练习、多使命有监督微谐和人类反应学习三阶段的练习进程。
The Ziya-LLaMA-13B-v1 is a large-scale pre-trained model based on LLaMA with 13 billion parameters. It has the ability to perform tasks such as translation, programming, text classification, information extraction, summarization, copywriting, common sense Q&A, and mathematical calculation. The Ziya-LLaMA-13B-v1 has undergone three stages of training: large-scale continual pre-training (PT), multi-task supervised fine-tuning (SFT), and human feedback learning (RM, PPO).
- 软件依靠
pip install torch==1.12.1 tokenizers==0.13.3 git+https://github.com/huggingface/transformers
1.2.2 模型信息 Model Information
- 持续预练习 Continual pretraining
原始数据包含英文和中文,其间英文数据来自 openwebtext、Books、Wikipedia 和 Code,中文数据来自清洗后的悟道数据集、自建的中文数据集。在对原始数据进行去重、模型打分、数据分桶、规矩过滤、敏感主题过滤和数据评价后,终究得到 125B tokens 的有用数据。
为了处理 LLaMA 原生分词对中文编解码效率低下的问题,咱们在 LLaMA 词表的基础上增加了 7k + 个常见中文字,经过和 LLaMA 原生的词表去重,终究得到一个 39410 大小的词表,并经过复用 Transformers 里 LlamaTokenizer 来完成了这一作用。
在增量练习进程中,咱们运用了 160 张 40GB 的 A100,选用 2.6M tokens 的练习集样本数量和 FP 16 的混合精度,吞吐量到达 118 TFLOP per GPU per second。因而咱们可以在 8 天的时刻里在原生的 LLaMA-13B 模型基础上,增量练习 110B tokens 的数据。
练习期间,虽然遇到了机器宕机、底层结构 bug、loss spike 等各种问题,但咱们经过快速调整,保证了增量练习的稳定性。咱们也放出练习进程的 loss 曲线,让咱们了解或许呈现的问题。
1.2.3多使命有监督微调 Supervised finetuning
在多使命有监督微调阶段,选用了课程学习(curiculum learning)和增量练习(continual learning)的战略,用大模型辅佐区分已有的数据难度,然后经过 “Easy To Hard” 的办法,分多个阶段进行 SFT 练习。
SFT 练习数据包含多个高质量的数据集,均经过人工筛选和校验:
- Self-Instruct 结构的数据(约 2M):BELLE、Alpaca、Alpaca-GPT4 等多个数据集
- 内部搜集 Code 数据(300K):包含 leetcode、多种 Code 使命方法
- 内部搜集推理 / 逻辑相关数据(500K):推理、申论、数学运用题、数值核算等
- 中英平行语料(2M):中英互译语料、COT 类型翻译语料、古文翻译语料等
- 多轮对话语料(500K):Self-Instruct 生成、使命型多轮对话、Role-Playing 型多轮对话等
在多使命学习的监督微调(SFT)阶段,咱们运用了课程学习和增量练习战略。咱们利用大模型辅佐对现有数据进行难度区分,然后选用“由易到难”的办法分阶段进行SFT练习。
SFT练习数据由多个人工挑选和验证的高质量数据集组成,包含BELLE、Alpaca和Alpaca- gpt4等数据集的约200万样本,包含LeetCode和各种代码使命在内的内部收集代码数据的30万样本,推理、议论文、数学运用问题和数值核算等内部收集推理/逻辑相关数据的50万样本。200万个汉英平行语料库样本,包含翻译、cot式翻译、文言文翻译;50万个多回合对话语料库样本,包含自主生成、使命导向多回合对话、角色扮演多回合对话。
1.2.4 人类反应学习 Human-Feedback training
为了进一步提高模型的综合体现,使其可以充沛了解人类意图、削减 “错觉” 和不安全的输出,依据指令微调后的模型,进行了人类反应练习(Human-Feedback Training,HFT)。在练习中,咱们选用了以人类反应强化学习(RM、PPO)为主,结合多种其他手法联合练习的办法,手法包含人类反应微调(Human-Feedback Fine-tuning,HFFT)、后见链微调(Chain-of-Hindsight Fine-tuning,COHFT)、AI 反应(AI Feedback)和依据规矩的奖赏体系(Rule-based Reward System,RBRS)等,用来弥补 PPO 办法的短板,加速练习。
咱们在内部自研的结构上完成了 HFT 的练习流程,该结构可以利用最少 8 张 40G 的 A100 显卡完成 Ziya-LLaMA-13B-v1 的全参数练习。在 PPO 练习中,咱们没有限制生成样本的长度,以保证长文本使命的奖赏准确性。每次练习的总经验池尺寸超过 100k 样本,保证了练习的充沛性。
1.2.5 作用评价 Performance
2.Demo展现
- Hugging Face Demo: doing
咱们供给了一个简练的依据gradio的交互式web界面,发动服务后,可经过浏览器访问,输入问题,模型会返回答案。
发动服务,命令如下:
python gradio_demo.py --model_type base_model_type --base_model path_to_llama_hf_dir --lora_model path_to_lora_dir
参数阐明:
-
--model_type {base_model_type}
:预练习模型类型,如llama、bloom、chatglm等 -
--base_model {base_model}
:存放HF格局的LLaMA模型权重和配置文件的目录,也可运用HF Model Hub模型调用称号 -
--lora_model {lora_model}
:LoRA文件所在目录,也可运用HF Model Hub模型调用称号。若lora权重现已兼并到预练习模型,则删去–lora_model参数 -
--tokenizer_path {tokenizer_path}
:存放对应tokenizer的目录。若不供给此参数,则其默认值与–base_model相同 -
--use_cpu
: 仅运用CPU进行推理 -
--gpus {gpu_ids}
: 指定运用的GPU设备编号,默以为0。如运用多张GPU,以逗号分隔,如0,1,2
2.1 环境安装
- Updating the requirements
From time to time, the
requirements.txt
changes. To update, use this command:
git clone https://github.com/shibing624/MedicalGPT
conda activate gpt
cd MedicalGPT
pip install -r requirements.txt --upgrade
2.2 Pipeline练习
Training Stage:
Stage | Introduction | Python script | Shell script |
---|---|---|---|
Stage 1: Continue Pretraining | 增量预练习 | pretraining.py | run_pt.sh |
Stage 2: Supervised Fine-tuning | 有监督微调 | supervised_finetuning.py | run_sft.sh |
Stage 3: Reward Modeling | 奖赏模型建模 | reward_modeling.py | run_rm.sh |
Stage 4: Reinforcement Learning | 强化学习 | rl_training.py | run_rl.sh |
- 供给完整四阶段串起来练习的pipeline:run_training_pipeline.ipynb ,其对应的colab: ,运行完大约需求15分钟,我运行成功后的副本colab:
- 练习细节阐明wiki
2.3 模型支持
The following models are tested:
bloom:
- bigscience/bloomz-560m
- bigscience/bloomz-1b7
- bigscience/bloomz-7b1
llama:
- shibing624/chinese-alpaca-plus-7b-hf
- shibing624/chinese-alpaca-plus-13b-hf
- minlik/chinese-llama-plus-7b-merged
- shibing624/chinese-llama-plus-13b-hf
- decapoda-research/llama-7b-hf
- IDEA-CCNL/Ziya-LLaMA-13B-v1
chatglm:
- THUDM/chatglm-6b
baichuan:
- baichuan-inc/baichuan-7B
2.4 模型练习
2.4.1 PT(Continue PreTraining)增量预练习
第一阶段:PT(Continue PreTraining)增量预练习
运用百科类文档类数据集,用来在范畴数据集上增量预练习或二次预练习,期望能把范畴常识注入给模型,以医疗范畴为例,期望增量预练习,能让模型了解伤风的症状、病因、医治药品、医治办法、药品疗效等常识,便于后续的SFT监督微调能激活这些内涵常识。
这儿阐明一点,像GPT3、LLaMA这样的大模型理论上是可以从增量预练习中获益,但增量预练习需求满意两个要求:1)高质量的预练习样本;2)较大的核算资源,显存要求高,即使是用LoRA技术,也要满意block_size=1024或2048长度的文本加载到显存中。
其次,假如你的项目用到的数据是模型预练习中现已运用了的,如维基百科、ArXiv等LLaMA模型预练习用了的,则这些数据是没有必要再喂给LLaMA增量预练习,并且预练习样本的质量假如不够高,也或许会损害原模型的生成才能。
tips:PT阶段是可选项,请慎重处理。
依据llama-7b模型,运用医疗百科类数据持续预练习,期望注入医疗常识到预练习模型,得到llama-7b-pt模型
Continue pretraining of the base llama-7b model to create llama-7b-pt:
cd scripts
sh run_pt.sh
练习参数阐明wiki
- 假如你的显存缺乏,可以改小batch_size=1, block_size=512(影响练习的上下文最大长度);
- 假如你的显存更大,可以改大block_size=2048, 此为llama原始预练习长度,不能更大啦;调大batch_size。
2.4.2 SFT(Supervised Fine-tuning)有监督微调
第二阶段:SFT(Supervised Fine-tuning)有监督微调
依据llama-7b-pt模型,运用医疗问答类数据进行有监督微调,得到llama-7b-sft模型
Supervised fine-tuning of the base llama-7b-pt model to create llama-7b-sft
cd scripts
sh run_sft.sh
练习参数阐明wiki
2.4.3 RM(Reward Model)奖赏模型建模
第三阶段:RM(Reward Model)奖赏模型建模
RM(Reward Model)奖赏模型,原则上,咱们可以直接用人类标示来对模型做 RLHF 微调。
然而,这将需求咱们给人类发送一些样本,在每轮优化后计分。这是贵且慢的,因为收敛需求的练习样本量大,而人类阅读和标示的速度有限。 一个比直接反应更好的战略是,在进入 RL 循环之前用人类标示集来练习一个奖赏模型RM。奖赏模型的意图是模拟人类对文本的打分。
构建奖赏模型的最佳实践是猜测成果的排序,即对每个 prompt (输入文本) 对应的两个成果 (yk, yj),模型猜测人类标示的比分哪个更高。 RM模型是经过人工标示SFT模型的打分成果来练习的,意图是取代人工打分,实质是个回归模型,用来对齐人类偏好,首要是”HHH”原则,详细是”helpful, honest, harmless”。
依据llama-7b-sft模型,运用医疗问答偏好数据练习奖赏偏好模型,练习得到llama-7b-reward模型
Reward modeling using dialog pairs from the reward dataset using the llama-7b-sft to create llama-7b-reward:
cd scripts
sh run_rm.sh
练习参数阐明wiki
2.4.4 依据人类反应的强化学习(RLHF)
第四阶段:RL(Reinforcement Learning)依据人类反应的强化学习(RLHF)
RL(Reinforcement Learning)模型的意图是最大化奖赏模型的输出,依据上面步骤,咱们有了微调的语言模型(llama-7b-sft)和奖赏模型(llama-7b-reward), 可以开端执行 RL 循环了。
这个进程大致分为三步:
- 输入prompt,模型生成答复
- 用奖赏模型来对答复评分
- 依据评分,进行一轮战略优化的强化学习(PPO)
依据llama-7b-reward模型 RL 微调练习llama-7b-sft模型,得到llama-7b-rl模型
Reinforcement Learning fine-tuning of llama-7b-sft with the llama-7b-reward reward model to create llama-7b-rl
pip install git+https://github.com/lvwerra/trl
cd scripts
sh run_rl.sh
2.5 推理猜测
练习完成后,现在咱们加载练习好的模型,验证模型生成文本的作用。
python inference.py \
--model_type base_model_type \
--base_model path_to_llama_hf_dir \
--lora_model path_to_lora \
--with_prompt \
--interactive
参数阐明:
-
--model_type {base_model_type}
:预练习模型类型,如llama、bloom、chatglm等 -
--base_model {base_model}
:存放HF格局的LLaMA模型权重和配置文件的目录 -
--lora_model {lora_model}
:LoRA解压后文件所在目录,也可运用HF Model Hub模型调用称号。假如现已兼并了LoRA权重到预练习模型,则可以不供给此参数 -
--tokenizer_path {tokenizer_path}
:存放对应tokenizer的目录。若不供给此参数,则其默认值与–base_model相同 -
--with_prompt
:是否将输入与prompt模版进行兼并。假如加载Alpaca模型,请必须启用此选项! -
--interactive
:以交互办法发动,以便进行屡次单轮问答 -
--data_file {file_name}
:非交互办法发动下,按行读取file_name中的的内容进行猜测 -
--predictions_file {file_name}
:非交互式办法下,将猜测的成果以json格局写入file_name -
--use_cpu
: 仅运用CPU进行推理 -
--gpus {gpu_ids}
: 指定运用的GPU设备编号,默以为0。如运用多张GPU,以逗号分隔,如0,1,2
2.5.1 推理样例
shibing624/ziya-llama-13b-medical-lora inference examples:
Human | Assitant |
---|---|
小孩发烧怎么办 | 宝宝的抵抗力是比较差的,所以很简略就会呈现伤风或许其他疾病。假如宝宝在平常没有留意保暖,那么也或许导致身体受凉而引起了伤风等症状,这样不只关于健康形成影响,还或许让宝宝呈现高热的状况。因而当家长们发现自己的宝宝呈现了高热的问题之后必定要及早进行医治和护理才好。 1、首要咱们应该给宝宝服用退烧药物来协助降温,可是千万不要盲目运用退烧药物,不然只会加剧宝宝的病况,最好带着宝宝到医院去查看清楚详细原因之后再针对性地采纳办法处理。 2、别的大人们也需求做好防备作业,尤其是气候变化的时候更应该多关怀下宝宝的身体状况,防止宝宝受寒受凉然后诱发各种疾病,一起也要尽量削减宝宝触摸细菌病毒的时机,增强宝宝的免疫力。 3、除了上面两点之外,大人们还可以经过按摩推拿穴道的办法来缓解宝宝的病痛,促进血液循环,提高推陈出新速度,到达快速消炎止疼的作用 |
一岁宝宝发烧能吃啥药? | 孩子的身体是很脆弱的,假如不留意保护好自己就会呈现各种疾病。有些家长在看到孩子生病后都十分着急,想要马上给他们用药医治,但其实并没有那么简略,因为每个人关于药物的敏感度和耐受性都是不同的,所以咱们需求依据详细状况来挑选合适的办法进行医治才可以到达最佳作用。 1、首要大多数小儿退热药中含有解热镇痛成分阿司匹林或布洛芬等,这类药品虽然副作用较少,但也存在过量运用引起胃肠道损害乃至消化道溃疡出血的危险; 2、还有部分小儿退热药中含有扑尔敏等抗组胺药,它们本身归于处方药,应该严厉依照医嘱服用,切勿私行加减剂量或许延伸用药时刻; 3、此外,某些小儿退热药中含有维生素C及葡萄糖酸钙等养分弥补剂,只有当患儿随同脱水症状(如口渴、尿色深)时才考虑增加,不然简略形成电解质紊乱。 |
肛门病变或许是什么疾病的症状 | 痔疮、直肠息肉等。 |
医生,您好白带增多泛黄怎么回事? | 你这种状况考虑或许会是阴道炎症引起的主张平常留意卫生清洁,勤换洗衣物内裤,必要时去正规公立医院妇科复诊做分泌物常规等相关查看清晰病因后对症医治,不同原因所致的疾病在临床体现上也存在差异性,假如患者呈现了类似于的症状应当及早到专业、威望的医院进行详细的检验和救治 |
药流后有巧克力白带是没流干净吗 | 在日常生活中,咱们要或多或少了解一些常见疾病的相关常识,不只能起到增加常识水平的作用,更能让自己更好地防备此类疾病的发生。很多女性都会呈现月经紊乱、腹痛等症状,这时候就需求考虑妇科炎症或许,比如说宫颈溃烂和盆腔积液。那么下面小编来给咱们介绍一种状况:药物流产后白带呈巧克力色怎么回事? 1、首要,关于药物流产之后发现阴道分泌物反常,应该及时去医院做查看确诊详细原因,然后再依据成果进行医治调度。 2、其次,因为每个人身体素质以及患病程度存在差别,所以采纳的办法也不尽相同,但不管挑选哪种办法处理,都必须严厉依照规定剂量服用,并且留意调查副作用反映状况,若呈现明显不适感觉,则应立即停止运用。 3、最终,主张你坚持外阴清洁卫生,勤换内裤,防止吃辛辣刺激食品,并且还要忌讳房事,不然简略引起穿插感染影响恢复健康。 |
维胺酯维E乳膏能治理什么疾病 | 皮肤淀粉样变性;脂溢性角化症 |
痤疮是什么原因导致的? | 痤疮,又称青春痘、粉刺。它首要发生在面部和胸背部位,体现为黑头粉刺、白头粉刺、丘疹、脓疱、结节等多种方法。其间以黑头粉刺最常见,约占全身皮肤病患者的70%左右。那么,痤疮是什么原因引起的呢?下面就给咱们介绍一些相关内容。 1、雄性激素分泌过旺:男女都会长痘痘,可是女孩子比较喜爱用化妆品来掩盖脸上的问题,并且很多人不知道这样做反而加剧了自己的毛囊炎症状,所以说平常应该少运用含有雌激素类的产品。 2、饮食习惯差:经常吃辛辣油腻的东西或许甜食也或许形成体内毒素堆积,然后诱发痤疮。 3、压力太大:假如你总是处于严峻焦虑的心情之中,一起还没有及时调整好心态,那么很简略呈现内分泌失调的状况,从而影响到肌肤健康。 4、睡觉质量差:熬夜对咱们的身体损害十分严峻,尤其是关于年轻人群更甚,他们需求保证足够的睡觉才行,不然很简略让肌肤变得暗沉无光泽。 |
脸上长青春痘怎么办,能吃啥药,需求留意啥 | 你好,依据您的描绘考虑是痤疮。主张外用维胺酯乳膏或许阿达帕林凝胶进行医治看看,平常忌讳辛辣和刺激性食物,如海鲜、狗肉、羊肉等“发”动品,以及葱蒜韭姜等刺激性调料。多喝水,少吃油腻高热量食物。 |
因为输精管堵塞会不会导致男性不育?,医生您好,我搭档这几天不开心,我问她怎么了,她说她老公输精管堵塞,所以一向没孩子,不是不想要,请问输精管堵塞会不会导致男性不育? | 你好!依据你的叙述及症状推测:假如有输精管堵塞或许狭窄等状况都或许会引来无法排出来精液而影响怀上。主张到正规专业的快孕医院实施进行咨询和医治为宜。关于输精管患者来说,及时救治是可以减低病发,假如不及时救治会影响到受孕状况。因而患者要及时药物救治,并且日常生活中要多垂青本身护理 |
心肌梗塞能医治吗? | 心脏病是一种危害性极大的疾病,咱们要对它有足够多的了解。在生活中很多人都会患上这个疾病,并且还不知道怎么去防备和护理,所以就导致自己的身体越来越差,那么下面小编给你介绍几点关于心脏病的常识吧! 1、冠状动脉粥样硬化性心脏病:又称为冠心病或缺血型心脏病(IHD),是世界各地最重要的死亡原因之一。 2、风湿热:首要侵犯心脏瓣膜,可引起二尖瓣狭窄及其他类型的心脏瓣膜病变; 3、先天性心脏病:包含房距离残缺、室距离残缺等; 4、高脂蛋白血症:因为胆固醇与低密度脂蛋白升高,使得动脉壁增厚,管腔缩小,易形成斑块并掉落形成急性栓塞; 5、肥胖:过量摄入食物,特别是含糖饮料,加速脂肪堆积,促进动脉粥样硬化开展; 6、吸烟:尼古丁刺激交感神经振奋,使外周阻力增强,收缩压升高,舒张期减短,然后降低左右心室射血分数,诱发心律失常; 7、酗酒:长期嗜酒者,肝功受到影响,代谢紊乱,简略呈现脂质代谢反常。 |
怎么让自己精力充沛,列5点主张 | 1、保证睡觉质量:每天晚上7-8小时的高质量睡觉是提高身体和大脑活跃度最有用的办法。 2、合理饮食:均衡养分摄入关于保持人体正常运转至关重要,多吃蔬菜水果,少油腻辛辣刺激性食物。 3、恰当练习:坚持必定强度的练习可以促进血液循环,增加肌肉耐力,改进心肺功用等。 4、学习新常识:不断触摸新事物,开辟视野,思考问题,都会使得咱们更具创造力与创意。 5、放松心情:经过冥想或许瑜伽来缓解压力,也可以听音乐或看电影来调度心情。 |
写个春天的诗 | 春风吹拂,花儿绽放。 阳光明媚,鸟语鸣叫。 树木发芽,草地变绿。 万物复苏,生机勃发。 |
南极洲为啥没有北极熊? | 南极是世界上最大的冰盖,覆盖着98%以上的地球表面积。它坐落南纬60度至74度之间,环绕在海洋中心周围。因为其共同的气候条件和生态体系,南极被称为“真正的荒野”。南极洲具有丰富多样的动植物资源,但这儿并不存在北极熊。 那么,为什么南极洲没有北极熊呢? 首要,咱们需求了解一下两者栖息地的差异。北极熊首要分布在北半球冰冷的高纬度区域,如加拿大、格陵兰岛等地。而南极洲则处于南半球,归于温带或寒带气候类型。虽然南极洲也有很低的平均气温(-25℃左右),但与北极相比还是太热了。因而,即使北极熊可以习惯更严格的气候条件,它们也无法在南极找到合适的栖息地。 别的,南极洲缺乏陆地哺乳动物食物来历,包含鱼类、鲸鱼和企鹅等。虽然南极洲的水域中也有各种鱼类,但数量远少于北极圈内。 一起,南极洲的土著居民——企鹅群体繁殖时节期间会消耗掉大部分可用的食物资源,导致当地的鱼类数量削减乃至干涸。 |
3.数据集
3.1 医疗数据集
- 240万条中文医疗数据集(包含预练习、指令微谐和奖赏数据集):shibing624/medical
- 22万条中文医疗对话数据集(华佗项目):FreedomIntelligence/HuatuoGPT-sft-data-v1
3.2 通用数据集
3.2.1 SFT datasets
- 50万条中文ChatGPT指令Belle数据集:BelleGroup/train_0.5M_CN
- 100万条中文ChatGPT指令Belle数据集:BelleGroup/train_1M_CN
- 5万条英文ChatGPT指令Alpaca数据集:50k English Stanford Alpaca dataset
- 2万条中文ChatGPT指令Alpaca数据集:shibing624/alpaca-zh
- 69万条中文指令Guanaco数据集(Belle50万条+Guanaco19万条):Chinese-Vicuna/guanaco_belle_merge_v1.0
- 5万条英文ChatGPT多轮对话数据集:RyokoAI/ShareGPT52K
- 80万条中文ChatGPT多轮对话数据集:BelleGroup/multiturn_chat_0.8M
- 116万条中文ChatGPT多轮对话数据集:fnlp/moss-002-sft-data
3.2.2 Reward Model datasets
- 原版的oasst1数据集:OpenAssistant/oasst1
- 2万条多语言oasst1的reward数据集:tasksource/oasst1_pairwise_rlhf_reward
- 11万条英文hh-rlhf的reward数据集:Dahoas/full-hh-rlhf
- 9万条英文reward数据集(来自Anthropic’s Helpful Harmless dataset):Dahoas/static-hh
- 7万条英文reward数据集(来历同上):Dahoas/rm-static
- 7万条繁体中文的reward数据集(翻译自rm-static)liswei/rm-static-m2m100-zh
- 7万条英文Reward数据集:yitingxie/rlhf-reward-datasets
- 3千条中文知乎问答偏好数据集:liyucheng/zhihu_rlhf_3k
更多优质内容请关注公号:汀丶人工智能;会供给一些相关的资源和优质文章,免费获取阅读。