扁鹊(BianQue)
基于自动健康的自动性、预防性、精确性、个性化、共建共享、自律性六大特征,华南理工大学未来技能学院-广东省数字孪生人重点实验室开源了中文领域生活空间自动健康大模型基座ProactiveHealthGPT。
我们盼望,生活空间自动健康大模型基座ProactiveHealthGPT 可以帮助学术界加速大模型在慢性病、心理咨询等自动健康领域的研究与应用。本项目为 生活空间健康大模型扁鹊(BianQue) 。
扁鹊健康大数据BianQueCorpus
我们经过调研发现,在健康领域,用户通常不会在一轮交互当中清晰地形貌自己的问题,而当前常见的开源医疗问答模型(例如:ChatDoctor、本草(HuaTuo,原名华驼 )、DoctorGLM、MedicalGPT-zh)偏重于办理单轮用户形貌的问题,而忽略了“用户形貌大概存在不敷”的环境。哪怕是当前大火的ChatGPT也会存在类似的问题:如果用户不逼迫通过文本形貌让ChatGPT采用一问一答的形式,ChatGPT也偏向于针对用户的形貌,迅速给出它以为符合的建议和方案。然而,现实的大夫与用户交谈每每会存在“大夫根据用户当前的形貌举行持续多轮的询问”。并且大夫在末了根据用户提供的信息综合给出建议,如下图所示。我们把大夫不断问询的过程定义为 询问链(CoQ, Chain of Questioning) ,当模型处于询问链阶段,其下一个问题通常由对话上下文汗青决定。
我们结合当前开源的中文医疗问答数据集(MedDialog-CN、IMCS-V2、CHIP-MDCFNPC、MedDG、cMedQA2、Chinese-medical-dialogue-data),分析此中的单轮/多轮特性以及大夫问询特性,结合实验室恒久自建的生活空间健康对话大数据,构建了千万级别规模的扁鹊健康大数据BianQueCorpus。对话数据通过“病人:xxx\n大夫:xxx\n病人:xxx\n大夫:”的形式统一为一种指令格式,如下图所示。
- input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目\n医生:您好\n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目\n医生:宝宝之前大便什么样呢?多久一次呢\n病人:一般都是一个礼拜,最近这几个月都是10多天\n医生:大便干吗?\n病人:每次10多天拉的很多\n医生:"target: "成形还是不成形呢?孩子吃饭怎么样呢?"
复制代码 练习数据当中肴杂了大量target文本为大夫问询的内容而非直接的建议,这将有助于提升AI模型的问询本事。
使用方法
- cd ~
- git clone https://github.com/scutcyr/BianQue.git
复制代码
- 安装依赖 需要注意的是torch的版本需要根据你的服务器现实的cuda版本选择,详情参考pytorch安装指南
- cd BianQue
- conda env create -n proactivehealthgpt_py38 --file proactivehealthgpt_py38.yml
- conda activate proactivehealthgpt_py38
- pip install cpm_kernels
- pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
复制代码
- 【增补】Windows下的用户推荐参考如下流程配置环境
- cd BianQue
- conda create -n proactivehealthgpt_py38 python=3.8
- conda activate proactivehealthgpt_py38
- pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
- pip install -r requirements.txt
- pip install rouge_chinese nltk jieba datasets
- # 以下安装为了运行demo
- pip install streamlit
- pip install streamlit_chat
复制代码
- 【增补】Windows下配置CUDA-11.6:下载并且安装CUDA-11.6、下载cudnn-8.4.0,解压并且复制此中的文件到CUDA-11.6对应的路径,参考:win11下使用conda举行pytorch安装-cuda11.6-泛用安装思路
- 在Python当中调用BianQue-2.0模型:
- import torch
- from transformers import AutoModel, AutoTokenizer
- # GPU设置
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- # 加载模型与tokenizer
- model_name_or_path = 'scutcyr/BianQue-2'
- model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True).half()
- model.to(device)
- tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
- # 单轮对话调用模型的chat函数
- user_input = "我的宝宝发烧了,怎么办?"
- input_text = "病人:" + user_input + "\n医生:"
- response, history = model.chat(tokenizer, query=input_text, history=None, max_length=2048, num_beams=1, do_sample=True, top_p=0.75, temperature=0.95, logits_processor=None)
- # 多轮对话调用模型的chat函数
- # 注意:本项目使用"\n病人:"和"\n医生:"划分不同轮次的对话历史
- # 注意:
- user_history比bot_history的长度多1user_history = ['你好', '我最近失眠了']
- bot_history = ['我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。']
- # 拼接对话历史
- context = "\n".join([f"病人:{user_history[i]}\n医生:{bot_history[i]}" for i in range(len(bot_history))])
- input_text = context + "\n病人:" + user_history[-1] + "\n医生:"
- response, history = model.chat(tokenizer, query=input_text, history=None, max_length=2048, num_beams=1, do_sample=True, top_p=0.75, temperature=0.95, logits_processor=None)
复制代码
本项目提供了bianque_v2_app.py作为BianQue-2.0模型的使用示例,通过以下命令即可开启服务,然后,通过http://<your_ip>:9005访问。
- streamlit run bianque_v2_app.py --server.port 9005
复制代码 特殊地,在bianque_v2_app.py当中, 可以修改以下代码更换指定的显卡:
- os.environ['CUDA_VISIBLE_DEVICES'] = '1'
复制代码 对于Windows单显卡用户,需要修改为:os.environ['CUDA_VISIBLE_DEVICES'] = '0',否则会报错!
可以通过更改以下代码指定模型路径为本地路径:
- model_name_or_path = "scutcyr/BianQue-2"
复制代码 我们还提供了bianque_v1_app.py作为BianQue-1.0模型的使用示例,以及bianque_v1_v2_app.py作为BianQue-1.0模型和BianQue-2.0模型的团结使用示例。
扁鹊-2.0
基于扁鹊健康大数据BianQueCorpus,我们选择了 ChatGLM-6B 作为初始化模型,经过全量参数的指令微调练习得到了新一代BianQue【BianQue-2.0】。与扁鹊-1.0模型差别的是,扁鹊-2.0扩充了药品分析书指令、医学百科知识指令以及ChatGPT蒸馏指令等数据,强化了模型的建议与知识查询本事。以下为两个测试样例。
- 样例1:宝宝特殊喜欢打嗝,是什么缘故原由啊,该怎么预防啊
- 样例2:我外婆迩来身材越来越差了,带她去医院查抄,大夫说她得了肾静脉血栓,我们全家都很担心,大夫开了很多注射用低分子量肝素钙,我想问它的药理毒理?
扁鹊-2.0与扁鹊-1.0团结使用,兼顾多轮问询与出色的健康建议本事
通过以下命令实现团结使用扁鹊-2.0与扁鹊-1.0构建自动健康服务:
- streamlit run bianque_v1_v2_app.py --server.port 9005
复制代码 以下为应用例子:前面多少轮为经过扁鹊-1.0模型举行问询的过程,末了一轮复兴为经过扁鹊-2.0模型的回答。
扁鹊-1.0
扁鹊-1.0(BianQue-1.0) 是一个经过指令与多轮问询对话团结微调的医疗对话大模型。我们经过调研发现,在医疗领域,每每大夫需要通过多轮问询才能举行决策,这并不是单纯的“指令-复兴”模式。用户在咨询大夫时,每每不会在最初就把完备的环境告知大夫,因此大夫需要不断举行询问,末了才能举行诊断并给出合理的建议。基于此,我们构建了 扁鹊-1.0(BianQue-1.0) ,拟在 强化AI系统的问询本事 ,从而达到模仿大夫问诊的过程。我们把这种本事定义为“望闻问切”当中的“问”。综合考虑当前中文语言模型架构、参数量以及所需要的算力,我们采用了ClueAI/ChatYuan-large-v2作为基准模型,在8张 NVIDIA RTX 4090显卡上微调了1个epoch得到扁鹊-1.0(BianQue-1.0),用于练习的中文医疗问答指令与多轮问询对话肴杂数据集包罗了超过900万条样本,这耗费了大约16天的时间完成一个epoch的练习。我们将筹划围绕扁鹊模型的“望闻问切”本事,结合医学专家知识、多模态技能、多生理信号盘算等,举行多个版本的模型迭代研究。
模型“问”本事示例
“望闻问切”四诊法由扁鹊发明。“四诊法”(望、闻、问、切),是中医诊病的根本方法。此中,“问”的本事可以被建模到语言模型当中。我们把AI模型的“问”本事定义为:
“问”本事:AI模型能够根据病人输入的信息,结合医学知识来举行恰当的问询,并且结合进一步的问询得到的病人的信息,给出“符合的诊断或建议”。“问”的过程通常是一个多轮对话过程。
以下是2个简单的例子:
- 例子1
用户:我最近感觉满身疲劳
扁鹊-1.0:是劳累了,照旧熬夜了?
用户:这周都在熬夜赶论文
扁鹊-1.0:嗯,熬夜容易引起各种不适,如头晕、乏力、失眠、多梦等,多休息,可以口服谷维素、维生素B1和安神补脑液,避免熬夜。
- 例子2
用户:我最近经常失眠
扁鹊-1.0:失眠多久了?
用户:两周了
扁鹊-1.0:睡眠怎么样?
用户:上床几小时才睡得着
扁鹊-1.0:可以口服一些药物
用户:有具体推荐吗
扁鹊-1.0:需要先查抄一下
用户:那我需要做什么查抄?
扁鹊-1.0:心电图
使用方法
直接使用扁鹊-1.0模型
- import os
- from transformers import T5Tokenizer, T5ForConditionalGeneration, AutoTokenizerimport torch
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- tokenizer = T5Tokenizer.from_pretrained("scutcyr/BianQue-1.0")
- model = T5ForConditionalGeneration.from_pretrained("scutcyr/BianQue-1.0")
- model = model.to(device)
- def preprocess(text):
- text = text.replace("\n", "\\n").replace("\t", "\\t")
- return text
- def postprocess(text):
- return text.replace("\\n", "\n").replace("\\t", "\t")d
- ef answer(user_history, bot_history, sample=True, top_p=1, temperature=0.7):
- '''sample:是否抽样。生成任务,可以设置为True;
- top_p:0-1之间,生成的内容越多样
- max_new_tokens=512 lost...'''
-
- if len(bot_history)>0:
- context = "\n".join([f"病人:{user_history[i]}\n医生:{bot_history[i]}" for i in range(len(bot_history))])
- input_text = context + "\n病人:" + user_history[-1] + "\n医生:"
- else:
- input_text = "病人:" + user_history[-1] + "\n医生:"
- return "我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。"
- input_text = preprocess(input_text)
- print(input_text)
- encoding = tokenizer(text=input_text, truncation=True, padding=True, max_length=768, return_tensors="pt").to(device)
- if not sample:
- out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=512, num_beams=1, length_penalty=0.6)
- else:
- out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=512, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=3)
- out_text = tokenizer.batch_decode(out["sequences"], skip_special_tokens=True)
- print('医生: '+postprocess(out_text[0]))
- return postprocess(out_text[0])
-
- answer_text = answer(user_history=["你好!",
- "我最近经常失眠",
- "两周了",
- "上床几小时才睡得着"],
- bot_history=["我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。",
- "失眠多久了?",
- "睡眠怎么样?"])
复制代码 使用个人数据在扁鹊-1.0模型基础上进一步微调模型
- 环境创建
以下为在RTX 4090显卡,CUDA-11.6驱动配置下的环境配置
- conda env create -n bianque_py38 --file py38_conda_env.yml
- conda activate bianque_py38
- pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
复制代码
- 数据集构建
参考.data/cMedialog_example.csv格式,构建你的数据集
- 基于扁鹊-1.0模型微调你的模型
修改./scripts/run_train_model_bianque.sh,通过绝对路径指定PREPROCESS_DATA,并且调解其他变量,然后运行:
- cd scripts
- bash run_train_model_bianque.sh
复制代码 声明
扁鹊-1.0(BianQue-1.0) 当前仅经过1个epoch的练习,尽管模型具备了一定的医疗问询本事,但其仍旧存在以下范围:
- 练习数据泉源于开源数据集以及互联网,尽管我们采用了严格的数据洗濯流程,数据集当中仍旧不可避免地存在大量噪声,这会使得部分复兴产生错误;
- 大夫“问询”是一项复杂的本事,这是非大夫群体所不具备的,当前的模型对于模仿“大夫问询”过程是通过大量样本学习得到的,因此在问询过程当中,有大概出现一些奇异的提问风格。换一句话来说,当前版本的模型强化了“问”的本事,但是“望”、“闻”、“切”的本事仍待进一步研究!
扁鹊-2.0(BianQue-2.0) 使用了ChatGLM-6B 模型的权重,需要遵循其MODEL_LICENSE。
源代码下载地址:
https://gitee.com/stjdydayou/BianQue.git
看到末了,如果这个项目对你有用,一定要给我点个“在看和赞”。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被代替岗位的生产效率,以是现实上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比力晚掌握AI的人有竞争优势”。
这句话,放在盘算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,引导过不少同行后辈。帮助很多人得到了学习和发展。
我意识到有很多履历和知识值得分享给各人,也可以通过我们的本事和履历解答各人在人工智能学习中的很多狐疑,以是在工作繁忙的环境下照旧坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋侪无法得到精确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让各人对大模型 AI有一个最前沿的熟悉,对大模型 AI 的明白超过 95% 的人,可以在相干讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样得到「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技能架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心头脑
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的本事。快速开辟一个完备的基于 agent 对话机器人。掌握功能最强的大模型开辟框架,抓住最新的技能进展,适合 Python 和 JavaScript 步伐员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 肴杂检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型练习
恭喜你,如果学到这里,你根本可以找到一份大模型 AI相干的工作,自己也能练习 GPT 了!通过微调,练习自己的垂直大模型,能独立练习开源多模态大模型,掌握更多技能方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型练习
- 求解器 & 丧失函数简介
- 小实验2:手写一个简单的神经网络并练习它
- 什么是练习/预练习/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、本钱等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产物经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 署理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地盘算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越精良的自己。
如果你能在15天内完成全部的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的精确特征了。
这份完备版的大模型 AI 学习资料已经上传CSDN,朋侪们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【包管100%免费】
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |