จากคุณลักษณะ 6 ประการของสุขภาพเชิงรุก ได้แก่ ความคิดริเริ่ม การป้องกัน ความแม่นยำ การปรับเปลี่ยนเฉพาะบุคคล การสร้างร่วมและการแบ่งปัน และความมีวินัยในตนเอง School of Future Technology of South China University of Technology-Guangdong Regional Key Laboratory of Digital Twins ได้เปิดแหล่งที่มา ระบบสุขภาพเชิงรุกของพื้นที่อยู่อาศัยในสาขาจีน ได้แก่
เราหวังว่า พื้นที่อยู่อาศัยแบบจำลองขนาดใหญ่ด้านสุขภาพเชิงรุก ProactiveHealthGPT สามารถช่วยชุมชนวิชาการเร่งการวิจัยและการประยุกต์ใช้แบบจำลองขนาดใหญ่ในสาขาสุขภาพเชิงรุก เช่น โรคเรื้อรัง และการให้คำปรึกษาทางจิตวิทยา โครงการนี้คือ BianQue โมเดลสุขภาพพื้นที่อยู่อาศัยขนาดใหญ่
จากการวิจัย เราพบว่าในด้านสุขภาพ ผู้ใช้มักจะอธิบายปัญหาของตนไม่ชัดเจนในรอบการโต้ตอบ และในปัจจุบันรูปแบบคำถามและคำตอบทางการแพทย์แบบโอเพ่นซอร์สทั่วไป (เช่น ChatDoctor, HuaTuo (เดิมชื่อ HuaTuo), DoctorGLM , MedicalGPT -zh) มุ่งเน้นไปที่การแก้ปัญหาคำอธิบายผู้ใช้รอบเดียว โดยไม่สนใจสถานการณ์ที่ "คำอธิบายผู้ใช้อาจไม่เพียงพอ" แม้แต่ ChatGPT ที่ได้รับความนิยมในปัจจุบันก็ยังประสบปัญหาคล้ายกัน: หากผู้ใช้ไม่บังคับให้ ChatGPT ใช้รูปแบบคำถามและคำตอบผ่านคำอธิบายข้อความ ChatGPT จะเลือกใช้คำอธิบายของผู้ใช้และให้คำแนะนำและวิธีแก้ปัญหาอย่างรวดเร็วตามที่เห็นสมควร อย่างไรก็ตาม การสนทนาจริงระหว่างแพทย์และผู้ใช้มักเกี่ยวข้องกับ "แพทย์ทำการซักถามหลายรอบตามคำอธิบายปัจจุบันของผู้ใช้" และในที่สุดแพทย์ก็ให้คำแนะนำที่ครอบคลุมตามข้อมูลที่ผู้ใช้ให้ไว้ ดังแสดงในรูปด้านล่าง เรากำหนดกระบวนการของการตั้งคำถามต่อเนื่องของแพทย์ว่าเป็น ห่วงโซ่ของการตั้งคำถาม (CoQ, Chain of Questioning) เมื่อแบบจำลองอยู่ในขั้นลูกโซ่การตั้งคำถาม คำถามถัดไปมักจะถูกกำหนดโดยประวัติบริบทของการสนทนา
เรารวมชุดข้อมูลคำถามและคำตอบทางการแพทย์จีนแบบโอเพ่นซอร์สในปัจจุบัน (MedDialog-CN, IMCS-V2, CHIP-MDCFNPC, MedDG, cMedQA2, ข้อมูลบทสนทนาทางการแพทย์จีน) เพื่อวิเคราะห์คุณลักษณะแบบรอบเดียว/หลายรอบ และ ลักษณะการสอบถามของแพทย์ รวมกับข้อมูลขนาดใหญ่เกี่ยวกับสุขภาพที่อยู่อาศัยที่สร้างขึ้นเองในระยะยาวของห้องปฏิบัติการ BianQueCorpus ซึ่งเป็นข้อมูลขนาดใหญ่ด้านสุขภาพของ Bianque ที่มีขนาดนับสิบล้านถูกสร้างขึ้น ข้อมูลการสนทนาจะรวมเป็นรูปแบบคำสั่งในรูปแบบ "ผู้ป่วย: xxxnแพทย์: xxxnผู้ป่วย: xxxnแพทย์:" ดังแสดงในรูปด้านล่าง
input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:您好n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:宝宝之前大便什么样呢?多久一次呢n病人:一般都是一个礼拜,最近这几个月都是10多天n医生:大便干吗?n病人:每次10多天拉的很多n医生:"
target: "成形还是不成形呢?孩子吃饭怎么样呢?"
ข้อมูลการฝึกอบรมประกอบด้วยข้อความเป้าหมายจำนวนมากซึ่งเป็น เนื้อหาในการสอบถามของแพทย์ มากกว่าคำแนะนำโดยตรงซึ่งจะช่วยปรับปรุงความสามารถในการสอบถามของโมเดล AI
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
[ภาคผนวก] การกำหนดค่า CUDA-11.6 ใน Windows: ดาวน์โหลดและติดตั้ง CUDA-11.6, ดาวน์โหลด cudnn-8.4.0, แตกไฟล์และคัดลอกไฟล์ไปยังพาธที่สอดคล้องกับ CUDA-11.6, อ้างอิงถึง: การใช้ conda เพื่อติดตั้ง pytorch ภายใต้ win11-cuda11 . 6-แนวคิดการติดตั้งทั่วไป
เรียกโมเดล BianQue-2.0 ใน Python:
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 )
โปรเจ็กต์นี้จัดเตรียม 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
จากข้อมูลขนาดใหญ่ของ BianQue Health BianQueCorpus เราเลือก ChatGLM-6B เป็นโมเดลการเริ่มต้น และได้รับ BianQue [BianQue-2.0] รุ่นใหม่หลังจากการฝึกอบรมการปรับแต่งพารามิเตอร์ทั้งหมดอย่างละเอียด Bianque-2.0 แตกต่างจากรุ่น Bianque-1.0 โดยได้ขยายข้อมูล เช่น คำแนะนำด้านยา คำแนะนำเกี่ยวกับสารานุกรมทางการแพทย์ และคำแนะนำในการกลั่น ChatGPT ซึ่งช่วยเสริมความแข็งแกร่งให้กับคำแนะนำของโมเดลและความสามารถในการสืบค้นความรู้ ด้านล่างนี้เป็นตัวอย่างทดสอบสองตัวอย่าง
ใช้คำสั่งต่อไปนี้เพื่อร่วมกันใช้ Bianque-2.0 และ Bianque-1.0 เพื่อสร้างบริการด้านสุขภาพที่ใช้งานอยู่:
streamlit run bianque_v1_v2_app.py --server.port 9005
ต่อไปนี้เป็นตัวอย่างการใช้งาน: สองสามรอบแรกเป็นกระบวนการสอบถามผ่านรุ่น Bianque-1.0 และการตอบสนองรอบสุดท้ายคือคำตอบผ่านรุ่น Bianque-2.0
BianQue-1.0 (BianQue-1.0) คือโมเดลการสนทนาทางการแพทย์ขนาดใหญ่ที่ได้รับการปรับแต่งอย่างละเอียดผ่านคำแนะนำและการสนทนาเพื่อสอบถามหลายรอบ หลังจากการวิจัย เราพบว่าในวงการแพทย์ แพทย์มักจะต้องผ่านการสอบถามหลายรอบก่อนตัดสินใจ นี่ไม่ใช่โมเดล "คำสั่ง-ตอบกลับ" ธรรมดาๆ เมื่อผู้ใช้ปรึกษาแพทย์ พวกเขามักจะไม่แจ้งให้แพทย์ทราบถึงสถานการณ์ทั้งหมดในตอนแรก ดังนั้นแพทย์จึงต้องถามคำถามต่อไปก่อนที่จะทำการวินิจฉัยและให้คำแนะนำที่สมเหตุสมผลในที่สุด จากสิ่งนี้ เราจึงสร้าง BianQue-1.0 (BianQue-1.0) โดยมีจุดมุ่งหมายเพื่อ เสริมสร้างความสามารถในการสอบปากคำของระบบ AI เพื่อจำลองกระบวนการสอบปากคำของแพทย์ เราให้นิยามความสามารถนี้ว่าเป็นส่วน “การถาม” ของ “การมอง การได้ยิน การถาม และการรู้” เมื่อคำนึงถึงสถาปัตยกรรมโมเดลภาษาจีนในปัจจุบัน จำนวนพารามิเตอร์ และพลังการประมวลผลที่ต้องการ เราใช้ ClueAI/ChatYuan-large-v2 เป็นโมเดลพื้นฐาน และปรับแต่ง 1 ยุคบนกราฟิกการ์ด NVIDIA RTX 4090 จำนวน 8 ตัวเพื่อรับ Bianque- 1.0 (เบียนเคว-1.0) ชุดข้อมูลแบบผสมของคำแนะนำคำถามและคำตอบทางการแพทย์จีน และบทสนทนาสอบถามแบบหลายรอบ ที่ใช้ในการฝึกอบรม มีตัวอย่างมากกว่า 9 ล้านตัวอย่าง ซึ่งใช้เวลาประมาณ 16 วันจึงจะเสร็จสิ้นการฝึกอบรมหนึ่งยุค เราจะวางแผนที่จะดำเนินการวิจัยแบบจำลองซ้ำหลายเวอร์ชัน โดยอาศัยความสามารถ "มองเห็น ได้ยิน ถาม และสัมผัส" ของแบบจำลอง Bian Que ผสมผสานกับความรู้ของผู้เชี่ยวชาญทางการแพทย์ เทคโนโลยีหลายรูปแบบ และการคำนวณสัญญาณทางสรีรวิทยาหลายรูปแบบ โมเดล BianQue ยินดีต้อนรับการมีส่วนร่วมของคุณ! เราขอแนะนำให้คุณรายงานปัญหา มีส่วนร่วมในการประชาสัมพันธ์ และมีส่วนร่วมในการสนทนาบนหน้า BianQue GitHub เราหวังว่าจะได้ร่วมมือกับมหาวิทยาลัย โรงพยาบาล ห้องปฏิบัติการวิจัย บริษัท ฯลฯ มากขึ้น เพื่อร่วมกันดำเนินการวิจัยแบบจำลอง Bianque รุ่นต่อไป สำหรับคำขอดังกล่าว (และคำขออื่น ๆ ที่ไม่เหมาะสมที่จะทำบน GitHub) โปรดส่งอีเมลโดยตรงไปที่ [email protected]
วิธีการวินิจฉัยสี่วิธี ได้แก่ "การมอง การดมกลิ่น การถาม และความรู้สึก" ได้รับการคิดค้นโดย Bian Que "วิธีวินิจฉัยสี่วิธี" (การตรวจสอบ การดมกลิ่น การซักถาม และการคลำ) เป็นวิธีการวินิจฉัยขั้นพื้นฐานในการแพทย์แผนจีน ในหมู่พวกเขา ความสามารถในการ "ถาม" สามารถจำลองเป็นโมเดลภาษาได้ เรากำหนดความสามารถ “การถาม” ของโมเดล AI เป็น:
ความสามารถในการ "ถาม" : โมเดล AI สามารถดำเนิน การสอบถามที่เหมาะสม โดยอาศัยข้อมูลที่ผู้ป่วยป้อนและรวมกับความรู้ทางการแพทย์และให้ "การวินิจฉัยหรือคำแนะนำที่เหมาะสม" ตามข้อมูลของผู้ป่วยที่ได้รับจากการสอบถามเพิ่มเติม กระบวนการ "ถาม" มักเป็นกระบวนการเจรจาหลายรอบ
นี่เป็นตัวอย่างง่ายๆ 2 ตัวอย่าง:
ตัวอย่างที่ 1
ผู้ใช้: ฉันรู้สึกเหนื่อยมากเมื่อเร็ว ๆ นี้ Bian Que-1.0: เป็นเพราะความเหนื่อยล้าหรือนอนดึกหรือเปล่า?
ผู้ใช้: สัปดาห์นี้ฉันนอนดึกเพื่ออ่านรายงาน Bian Que-1.0: การนอนดึกอาจทำให้เกิดอาการไม่สบายต่างๆ ได้ง่าย เช่น เวียนศีรษะ เหนื่อยล้า นอนไม่หลับ ฝันร้าย เป็นต้น พักผ่อนให้มากขึ้น สามารถรับประทานโอริซานอล วิตามินบี 1 และของเหลว Anshen Bu Nao เพื่อหลีกเลี่ยงการนอนดึกได้
ตัวอย่างที่ 2
ผู้ใช้: ฉันเป็นโรคนอนไม่หลับเมื่อเร็วๆ นี้ Bianque-1.0: คุณเป็นโรคนอนไม่หลับมานานแค่ไหนแล้ว?
ผู้ใช้: เป็นเวลาสองสัปดาห์แล้ว Bianque-1.0: การนอนหลับของคุณเป็นอย่างไรบ้าง?
ผู้ใช้: คุณต้องเข้านอนกี่ชั่วโมงจึงจะนอนหลับได้ Bian Que-1.0: คุณสามารถรับประทานยาได้ ผู้ใช้: คุณมีคำแนะนำเฉพาะเจาะจงหรือไม่? : ฉันต้องทำการทดสอบอะไรบ้าง?
Bian Que-1.0: คลื่นไฟฟ้าหัวใจ
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) ได้รับการฝึกอบรมมาเพียง 1 ยุคเท่านั้น แม้ว่าโมเดลดังกล่าวจะมีความสามารถในการสอบถามทางการแพทย์บางอย่าง แต่ก็ยังมีข้อจำกัดดังต่อไปนี้:
**BianQue-2.0(BianQue-2.0)** ใช้น้ำหนักของรุ่น ChatGLM-6B และจำเป็นต้องเป็นไปตาม MODEL_LICENSE ดังนั้น โปรเจ็กต์นี้จึงสามารถใช้เพื่อวัตถุประสงค์ในการวิจัยที่ไม่ใช่เชิงพาณิชย์เท่านั้น
โครงการนี้ริเริ่มโดยห้องปฏิบัติการ Digital Twins ประจำมณฑลกวางตุ้ง, School of Future Technology, South China University of Technology โดยได้รับการสนับสนุนจากศูนย์วิจัยวิศวกรรมเครือข่ายสารสนเทศ, School of Electronics and Information และแผนกอื่นๆ ของ South China University of Technology นอกจากนี้ ยังขอขอบคุณโรงพยาบาลแม่และเด็กกวางตุ้ง หน่วยความร่วมมือของรัฐบาลเทศบาลกวางโจว เช่น ศูนย์การแพทย์สตรีและเด็ก โรงพยาบาลในเครือแห่งที่สามของมหาวิทยาลัยซุนยัตเซ็น และสถาบันวิจัยปัญญาประดิษฐ์แห่งศูนย์วิทยาศาสตร์แห่งชาติเหอเฟย
ในเวลาเดียวกัน เราขอขอบคุณสื่อหรือบัญชีสาธารณะต่อไปนี้สำหรับการรายงานเกี่ยวกับโครงการนี้ (โดยไม่เรียงลำดับใดเป็นพิเศษ):
สื่อรายงานข่าว People's Daily, China.com, Guangming.com, เทคโนโลยี TOM, Future.com, Dazhong.com, เครือข่ายรายงานการพัฒนาของจีน, China Daily Network, Xinhua News Network, China.com, Toutiao, Sohu, Tencent News, NetEase News , เครือข่ายข้อมูลจีน , เครือข่ายการสื่อสารของจีน, เครือข่ายรายงานเมืองจีน, เครือข่ายเมืองจีน
บัญชีสาธารณะ การก่อสร้างห้องปฏิบัติการกวางตุ้ง เสียงอัจฉริยะ เยาวชนใหม่ การเรียนรู้เชิงลึก และ 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 }
}