استنادًا إلى الخصائص الست للصحة النشطة: المبادرة، والوقاية، والدقة، والتخصيص، والبناء المشترك والمشاركة، والانضباط الذاتي، قامت كلية تكنولوجيا المستقبل بجامعة جنوب الصين للتكنولوجيا - المختبر الرئيسي لمقاطعة قوانغدونغ للتوائم الرقمية بإنشاء مصادر مفتوحة. النظام الصحي النشط لمساحة المعيشة في المجال الصيني نموذج القاعدة ProactiveHealthGPT، بما في ذلك:
نأمل أن تساعد قاعدة النماذج الكبيرة ProactiveHealthGPT لمساحة المعيشة الصحية النشطة المجتمع الأكاديمي في تسريع البحث وتطبيق النماذج الكبيرة في مجالات الصحة النشطة مثل الأمراض المزمنة والاستشارة النفسية. هذا المشروع هو BianQue، وهو نموذج كبير لمساحة المعيشة الصحية .
من خلال البحث، وجدنا أنه في مجال الصحة، لا يصف المستخدمون عادةً مشاكلهم بوضوح في جولة من التفاعل، ونماذج الأسئلة والأجوبة الطبية الشائعة مفتوحة المصدر حاليًا (مثل: ChatDoctor، HuaTuo (المعروفة سابقًا باسم HuaTuo)، DoctorGLM ، MedicalGPT -zh) يركز على حل مشكلة جولة واحدة من أوصاف المستخدم، مع تجاهل الموقف حيث "قد تكون أوصاف المستخدم غير كافية". حتى ChatGPT المشهور حاليًا سيواجه مشكلات مماثلة: إذا لم يجبر المستخدم ChatGPT على اعتماد تنسيق سؤال وجواب من خلال الوصف النصي، فإن ChatGPT سيفضل أيضًا وصف المستخدم ويقدم بسرعة الاقتراحات والحلول التي يراها مناسبة. ومع ذلك، فإن المحادثات الفعلية بين الأطباء والمستخدمين غالبًا ما تتضمن "إجراء الطبيب لجولات متعددة من الاستجواب بناءً على الوصف الحالي للمستخدم". وأخيراً يقوم الطبيب بتقديم اقتراحات شاملة بناءً على المعلومات التي يقدمها المستخدم، كما هو موضح في الشكل أدناه. نحدد عملية الاستجواب المستمر للطبيب على أنها سلسلة من الأسئلة (CoQ، سلسلة من الأسئلة) . عندما يكون النموذج في مرحلة سلسلة الأسئلة، عادةً ما يتم تحديد سؤاله التالي من خلال تاريخ سياق المحادثة.
نحن نجمع مجموعات بيانات الأسئلة والأجوبة الطبية الصينية مفتوحة المصدر الحالية (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: "成形还是不成形呢?孩子吃饭怎么样呢?"
تحتوي بيانات التدريب على كمية كبيرة من النص المستهدف الذي يمثل محتوى استفسار الطبيب بدلاً من النصيحة المباشرة، مما سيساعد على تحسين قدرة الاستفسار لنموذج الذكاء الاصطناعي.
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) بهدف تعزيز قدرات الاستجواب لنظام الذكاء الاصطناعي لمحاكاة عملية استجواب الطبيب. نحن نعرّف هذه القدرة بأنها جزء "السؤال" من "النظر والسمع والسؤال والمعرفة". مع الأخذ في الاعتبار بنية نموذج اللغة الصينية الحالية، وعدد المعلمات، وقدرة الحوسبة المطلوبة، استخدمنا ClueAI/ChatYuan-large-v2 كنموذج أساسي، وقمنا بضبط عصر واحد على 8 بطاقات رسومات NVIDIA RTX 4090 للحصول على Bianque- 1.0 (بيانكيو-1.0) تحتوي مجموعة البيانات المختلطة لتعليمات الأسئلة والأجوبة الطبية الصينية وحوارات الاستفسار متعددة الجولات المستخدمة للتدريب على أكثر من 9 ملايين عينة، والتي استغرقت حوالي 16 يومًا لإكمال فترة واحدة من التدريب. سنخطط لإجراء إصدارات متعددة من نموذج البحث التكراري استنادًا إلى إمكانات "الرؤية والاستماع والسؤال والشعور" لنموذج Bian Que، جنبًا إلى جنب مع معرفة الخبراء الطبيين والتكنولوجيا متعددة الوسائط وحسابات الإشارات الفسيولوجية المتعددة. نموذج BianQue يرحب بمساهماتك! نحن نشجعك على الإبلاغ عن المشكلات والمساهمة في العلاقات العامة والمشاركة في المناقشات على صفحة BianQue GitHub. نحن نتطلع إلى التعاون مع المزيد من الجامعات والمستشفيات ومختبرات الأبحاث والشركات وما إلى ذلك لإجراء أبحاث نموذج Bianque من الجيل التالي بشكل مشترك. بالنسبة لمثل هذه الطلبات (والطلبات الأخرى غير المناسبة على GitHub)، يرجى إرسال بريد إلكتروني مباشرة إلى [email protected].
تم اختراع طرق التشخيص الأربعة وهي "النظر والشم والسؤال والشعور" بواسطة بيان كيو. "طرق التشخيص الأربعة" (الفحص، والشم، والاستجواب، والجس) هي الطرق الأساسية للتشخيص في الطب الصيني التقليدي. من بينها، القدرة على "السؤال" يمكن صياغتها في نموذج اللغة. نحدد قدرة "السؤال" لنموذج الذكاء الاصطناعي على النحو التالي:
القدرة على "السؤال" : يمكن لنموذج الذكاء الاصطناعي إجراء الاستفسارات المناسبة بناءً على المعلومات التي أدخلها المريض ودمجها مع المعرفة الطبية، وتقديم "التشخيص أو النصيحة المناسبة" بناءً على معلومات المريض التي تم الحصول عليها من الاستفسارات الإضافية. عادة ما تكون عملية "الطرح" عبارة عن عملية حوار متعددة الجولات.
فيما يلي مثالين بسيطين:
مثال 1
المستخدم: أشعر بالإرهاق التام مؤخرًا. Bian Que-1.0: هل هو بسبب التعب أم السهر؟
المستخدم: لقد كنت سهرًا هذا الأسبوع لمتابعة ورقتي Bian Que-1.0: حسنًا، السهر يمكن أن يسبب بسهولة العديد من المضايقات، مثل الدوخة والتعب والأرق والحلم، وما إلى ذلك. احصل على مزيد من الراحة يمكن تناول الأوريزانول وفيتامين ب1 وسائل أنشين بو ناو لتجنب السهر.
مثال 2
المستخدم: لقد كنت أعاني من الأرق مؤخرًا. بيانك-1.0: منذ متى وأنت تعاني من الأرق؟
المستخدم: لقد مر أسبوعان بيانك 1.0: كيف هو نومك؟
المستخدم: كم ساعة تحتاج إلى النوم قبل أن تتمكن من النوم؟ بيان كيو-1.0: يمكنك تناول بعض الأدوية عن طريق الفم. المستخدم: هل لديك أي توصيات محددة؟ : ما هي الاختبارات التي أحتاجها؟
بيان كيو-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) لفترة واحدة فقط. على الرغم من أن النموذج يتمتع بقدرات معينة للاستعلام الطبي، إلا أنه لا يزال يعاني من القيود التالية:
**BianQue-2.0(BianQue-2.0)** يستخدم أوزان نموذج ChatGLM-6B ويحتاج إلى اتباع MODEL_LICENSE الخاص به، لذلك، لا يمكن استخدام هذا المشروع إلا لأغراض البحث غير التجارية .
بدأ هذا المشروع مختبر مفتاح مقاطعة قوانغدونغ للتوائم الرقمية، كلية تكنولوجيا المستقبل، جامعة جنوب الصين للتكنولوجيا، ويدعمه مركز أبحاث هندسة شبكات المعلومات، كلية الإلكترونيات والمعلومات وأقسام أخرى بجامعة جنوب الصين للتكنولوجيا كما تشكر مستشفى قوانغدونغ لصحة الأم والطفل، والوحدات المتعاونة التابعة لحكومة بلدية قوانغتشو، بما في ذلك المركز الطبي للنساء والأطفال، والمستشفى الثالث التابع لجامعة صن يات صن، ومعهد أبحاث الذكاء الاصطناعي التابع لمركز العلوم الوطني الشامل في خفي.
في الوقت نفسه، نود أن نشكر وسائل الإعلام أو الحسابات العامة التالية على الإبلاغ عن هذا المشروع (بدون ترتيب معين):
تغطية إعلامية: People's Daily، China.com، Guangming.com، TOM Technology، Future.com، Dazhong.com، شبكة تقارير التنمية الصينية، شبكة تشاينا ديلي، شبكة أخبار شينهوا، China.com، Toutiao، Sohu، Tencent News، NetEase News. ، شبكة المعلومات الصينية، شبكة الاتصالات الصينية، شبكة تقارير مدينة الصين، شبكة مدينة الصين
إنشاء مختبر قوانغدونغ للحساب العام، الصوت الذكي للشباب الجديد، التعلم العميق والبرمجة اللغوية العصبية، 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 }
}