Basierend auf den sechs Merkmalen aktiver Gesundheit: Initiative, Prävention, Genauigkeit, Personalisierung, Co-Konstruktion und Teilen sowie Selbstdisziplin hat die School of Future Technology der South China University of Technology – Guangdong Provincial Key Laboratory of Digital Twins Open-Source-Lösungen entwickelt das aktive Gesundheitssystem des Wohnraums im chinesischen Bereich Modellbasis ProactiveHealthGPT, einschließlich:
Wir hoffen, dass die große Modellbasis für aktive Gesundheit ProactiveHealthGPT der akademischen Gemeinschaft dabei helfen kann, die Forschung und Anwendung großer Modelle in aktiven Gesundheitsbereichen wie chronischen Krankheiten und psychologischer Beratung zu beschleunigen. Dieses Projekt ist BianQue, ein großes Modell für Wohnraumgesundheit .
Durch Untersuchungen haben wir herausgefunden, dass Benutzer im Gesundheitsbereich ihre Probleme in einer Interaktionsrunde normalerweise nicht klar beschreiben und derzeit gängige Open-Source-Modelle für medizinische Fragen und Antworten verwenden (z. B. ChatDoctor, HuaTuo (früher bekannt als HuaTuo), DoctorGLM , MedicalGPT -zh) konzentriert sich auf die Lösung des Problems einer einzelnen Runde von Benutzerbeschreibungen und ignoriert dabei die Situation, in der „Benutzerbeschreibungen möglicherweise unzureichend sind“. Selbst das derzeit beliebte ChatGPT wird ähnliche Probleme haben: Wenn der Benutzer ChatGPT nicht durch Textbeschreibung dazu zwingt, ein Frage-und-Antwort-Format anzunehmen, wird ChatGPT auch die Beschreibung des Benutzers bevorzugen und schnell Vorschläge und Lösungen bereitstellen, die es für angemessen hält. Tatsächliche Gespräche zwischen Ärzten und Nutzern beinhalten jedoch oft, dass „der Arzt mehrere Befragungsrunden auf der Grundlage der aktuellen Beschreibung des Nutzers durchführt“. Und der Arzt gibt schließlich umfassende Vorschläge basierend auf den Informationen des Benutzers, wie in der folgenden Abbildung dargestellt. Wir definieren den Prozess der kontinuierlichen Befragung des Arztes als eine Befragungskette (CoQ, Chain of Questioning) . Wenn sich das Modell in der Befragungskette befindet, wird seine nächste Frage normalerweise durch den Gesprächskontextverlauf bestimmt.
Wir kombinieren die aktuellen Open-Source-Datensätze für chinesische medizinische Fragen und Antworten (MedDialog-CN, IMCS-V2, CHIP-MDCFNPC, MedDG, cMedQA2, Chinese-medical-dialogue-data), um die Einzelrunden-/Mehrrundenmerkmale zu analysieren In Kombination mit dem langfristigen, selbst erstellten Big Data-Labor für Wohnraumgesundheit wurde BianQueCorpus erstellt, ein Bianque-Gesundheits-Big-Data-Bereich mit einer Größenordnung von mehreren zehn Millionen. Die Konversationsdaten werden in einem Anweisungsformat in der Form „Patient: xxxnArzt: xxxnPatient: xxxnArzt:“ vereinheitlicht, wie in der Abbildung unten dargestellt.
input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:您好n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:宝宝之前大便什么样呢?多久一次呢n病人:一般都是一个礼拜,最近这几个月都是10多天n医生:大便干吗?n病人:每次10多天拉的很多n医生:"
target: "成形还是不成形呢?孩子吃饭怎么样呢?"
Die Trainingsdaten enthalten eine große Menge Zieltext, der den Inhalt der ärztlichen Anfrage und nicht den direkten Rat darstellt, was dazu beiträgt, die Anfragefähigkeit des KI-Modells zu verbessern.
cd ~
git clone https://github.com/scutcyr/BianQue.git
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
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
[Ergänzung] Konfigurieren von CUDA-11.6 unter Windows: Laden Sie CUDA-11.6 herunter und installieren Sie es, laden Sie cudnn-8.4.0 herunter, entpacken Sie die Dateien und kopieren Sie sie in den Pfad, der CUDA-11.6 entspricht. Weitere Informationen finden Sie unter: Verwenden von Conda zum Installieren von Pytorch unter Win11-Cuda11 . 6-Allgemeine Installationsideen
Rufen Sie das BianQue-2.0-Modell in Python auf:
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的长度多1
user_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 )
Dieses Projekt stellt bianque_v2_app.py als Beispiel für die Verwendung des BianQue-2.0-Modells bereit. Sie können den Dienst über den folgenden Befehl starten und dann über http://<your_ip>:9005 darauf zugreifen.
streamlit run bianque_v2_app.py --server.port 9005
Insbesondere können Sie in bianque_v2_app.py den folgenden Code ändern, um die angegebene Grafikkarte zu ersetzen:
os . environ [ 'CUDA_VISIBLE_DEVICES' ] = '1'
Für Benutzer einer einzelnen Windows-Grafikkarte müssen Sie es wie folgt ändern: os.environ['CUDA_VISIBLE_DEVICES'] = '0'
, andernfalls wird ein Fehler gemeldet!
Sie können den Modellpfad als lokalen Pfad angeben, indem Sie den folgenden Code ändern:
model_name_or_path = "scutcyr/BianQue-2"
Wir stellen außerdem bianque_v1_app.py als Anwendungsbeispiel des BianQue-1.0-Modells und bianque_v1_v2_app.py als gemeinsames Anwendungsbeispiel des BianQue-1.0-Modells und des BianQue-2.0-Modells zur Verfügung.
Basierend auf BianQue Health Big Data BianQueCorpus wählten wir ChatGLM-6B als Initialisierungsmodell und erhielten die neue Generation von BianQue [BianQue-2.0] nach Anweisungen zur Feinabstimmung des Trainings aller Parameter. Im Gegensatz zum Bianque-1.0-Modell verfügt Bianque-2.0 über erweiterte Daten wie Arzneimittelanweisungen, Wissensanweisungen für medizinische Enzyklopädien und ChatGPT-Destillationsanweisungen, wodurch die Vorschläge und Wissensabfragefunktionen des Modells gestärkt werden. Nachfolgend finden Sie zwei Testmuster.
Verwenden Sie den folgenden Befehl, um Bianque-2.0 und Bianque-1.0 gemeinsam zum Aufbau aktiver Gesundheitsdienste zu verwenden:
streamlit run bianque_v1_v2_app.py --server.port 9005
Das Folgende ist ein Anwendungsbeispiel: Die ersten paar Runden sind der Prozess der Anfrage durch das Bianque-1.0-Modell, und die letzte Runde der Antworten ist die Antwort durch das Bianque-2.0-Modell.
BianQue-1.0 (BianQue-1.0) ist ein großes medizinisches Dialogmodell, das durch Anweisungen und mehrere Runden von Fragedialogen verfeinert wird. Nach Recherchen haben wir herausgefunden, dass Ärzte im medizinischen Bereich oft mehrere Befragungsrunden durchlaufen müssen, bevor sie eine Entscheidung treffen. Dies ist kein einfaches „Anweisung-Antwort“-Modell. Wenn Nutzer einen Arzt konsultieren, informieren sie ihn oft nicht zu Beginn über die gesamte Situation, sodass der Arzt immer wieder Fragen stellen muss, bevor er schließlich eine Diagnose stellen und vernünftige Vorschläge machen kann. Auf dieser Grundlage haben wir BianQue-1.0 (BianQue-1.0) entwickelt, mit dem Ziel, die Befragungsfähigkeiten des KI-Systems zu stärken, um den Prozess der Befragung von Ärzten zu simulieren. Wir definieren diese Fähigkeit als den „fragenden“ Teil des „Sehens, Hörens, Fragens und Verstehens“. Unter Berücksichtigung der aktuellen Architektur des chinesischen Sprachmodells, der Anzahl der Parameter und der erforderlichen Rechenleistung haben wir ClueAI/ChatYuan-large-v2 als Basismodell verwendet und eine Epoche auf 8 NVIDIA RTX 4090-Grafikkarten optimiert, um Bianque zu erhalten. 1,0 (BianQue-1,0) Der gemischte Datensatz aus chinesischen medizinischen Frage- und Antwortanweisungen und mehrrunden-Anfragedialogen, der für das Training verwendet wird, enthält mehr als 9 Millionen Proben, was etwa 16 Tage dauerte, um eine Trainingsepoche abzuschließen. Wir planen, mehrere Versionen modelliterativer Forschung durchzuführen, die auf den „Sehen, Hören, Fragen und Fühlen“-Fähigkeiten des Bian-Que-Modells basieren, kombiniert mit medizinischem Expertenwissen, multimodaler Technologie und multiphysiologischen Signalberechnungen. Das BianQue-Modell freut sich über Ihre Beiträge! Wir ermutigen Sie, Probleme zu melden, PRs beizutragen und an Diskussionen auf der BianQue-GitHub-Seite teilzunehmen. Wir freuen uns auf die Zusammenarbeit mit weiteren Universitäten, Krankenhäusern, Forschungslabors, Unternehmen usw., um gemeinsam Bianque-Modellforschung der nächsten Generation durchzuführen. Für solche Anfragen (und andere Anfragen, die nicht für GitHub geeignet sind) senden Sie bitte eine E-Mail direkt an [email protected].
Die vier diagnostischen Methoden „Sehen, Riechen, Fragen und Fühlen“ wurden von Bian Que erfunden. Die „Vier Diagnosemethoden“ (Inspektion, Riechen, Befragen und Abtasten) sind die grundlegenden Diagnosemethoden in der traditionellen chinesischen Medizin. Unter anderem kann die Fähigkeit zum „Fragen“ in das Sprachmodell modelliert werden. Wir definieren die „Fragen“-Fähigkeit des KI-Modells als:
„Fragen“-Fähigkeit : Das KI-Modell kann auf der Grundlage der vom Patienten eingegebenen Informationen und in Kombination mit medizinischem Wissen entsprechende Anfragen durchführen und auf der Grundlage der aus weiteren Anfragen erhaltenen Informationen des Patienten „angemessene Diagnosen oder Ratschläge“ geben. Der Prozess des „Fragens“ ist in der Regel ein mehrstufiger Dialogprozess.
Hier sind 2 einfache Beispiele:
Beispiel 1
Benutzer: Ich fühle mich in letzter Zeit völlig erschöpft. Bian Que-1.0: Liegt es an Müdigkeit oder langem Aufbleiben?
Benutzer: Ich bin diese Woche lange wach geblieben, um meine Arbeit nachzuholen. Langes Aufbleiben kann leicht zu verschiedenen Beschwerden führen, wie Schwindel, Müdigkeit, Schlaflosigkeit, Träumerei usw. Gönnen Sie sich mehr Ruhe Sie können Oryzanol, Vitamin B1 und Anshen Bu Nao Liquid einnehmen, um ein Aufbleiben zu vermeiden.
Beispiel 2
Benutzer: Ich leide in letzter Zeit häufig unter Schlaflosigkeit. Bianque-1.0: Wie lange leiden Sie schon an Schlaflosigkeit?
Benutzer: Es sind zwei Wochen vergangen. Bianque-1.0: Wie schläfst du?
Benutzer: Wie viele Stunden müssen Sie zu Bett gehen, bevor Sie schlafen können? Benutzer: Haben Sie spezielle Empfehlungen? : Welche Tests brauche ich?
Bian Que-1.0: Elektrokardiogramm
import os
from transformers import T5Tokenizer , T5ForConditionalGeneration , AutoTokenizer
import 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 " )
def 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 = [ "我是利用人工智能技术,结合大数据训练得到的智能医疗问答模型扁鹊,你可以向我提问。" ,
"失眠多久了?" ,
"睡眠怎么样?" ])
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
cd scripts
bash run_train_model_bianque.sh
BianQue-1.0 (BianQue-1.0) wurde erst seit einer Epoche trainiert. Obwohl das Modell über bestimmte medizinische Untersuchungsfunktionen verfügt, weist es dennoch die folgenden Einschränkungen auf:
**BianQue-2.0(BianQue-2.0)** verwendet die Gewichte des ChatGLM-6B-Modells und muss dessen MODEL_LICENSE befolgen. Daher kann dieses Projekt nur für Ihre nichtkommerziellen Forschungszwecke verwendet werden .
Dieses Projekt wurde vom Guangdong Provincial Key Laboratory of Digital Twins, School of Future Technology, South China University of Technology initiiert. Es wird vom Information Network Engineering Research Center, School of Electronics and Information und anderen Abteilungen der South China University of Technology unterstützt Es dankt außerdem dem Guangdong Maternal and Child Health Hospital, dem Women and Children's Medical Center der Stadtregierung von Guangzhou, dem Third Affiliated Hospital der Sun Yat-sen University, dem Hefei National Science Center Artificial Intelligence Research Institute und anderen kooperativen Einheiten.
Gleichzeitig möchten wir uns bei den folgenden Medien bzw. öffentlichen Stellen für die Berichterstattung über dieses Projekt bedanken (in keiner bestimmten Reihenfolge):
Medienberichterstattung People's Daily, China.com, Guangming.com, TOM Technology, Future.com, Dazhong.com, China Development Report Network, China Daily Network, Xinhua News Network, China.com, Toutiao, Sohu, Tencent News, NetEase News , China Information Network, China Communication Network, China City Report Network, China City Network
Public Account Guangdong Laboratory Construction, Intelligent Voice New Youth, Deep Learning und NLP, AINLP
@misc { chen2023bianque ,
title = { BianQue: Balancing the Questioning and Suggestion Ability of Health LLMs with Multi-turn Health Conversations Polished by ChatGPT } ,
author = { Yirong Chen and Zhenyu Wang and Xiaofen Xing and huimin zheng and Zhipei Xu and Kai Fang and Junhong Wang and Sihang Li and Jieling Wu and Qi Liu and Xiangmin Xu } ,
year = { 2023 } ,
eprint = { 2310.15896 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
}