Основываясь на шести характеристиках активного здоровья: инициатива, профилактика, точность, персонализация, совместное строительство и обмен информацией, а также самодисциплина, Школа технологий будущего Южно-Китайского технологического университета и Ключевая лаборатория цифровых двойников провинции Гуандун открыла исходные коды. система активного оздоровления жилого пространства на территории Китая. Модельная база ProactiveHealthGPT, включающая:
Мы надеемся, что база крупных моделей активного здоровья жилого пространства ProactiveHealthGPT поможет академическому сообществу ускорить исследования и применение крупных моделей в таких областях активного здравоохранения, как хронические заболевания и психологическое консультирование. Этот проект — BianQue, большая модель здоровья жилого пространства .
В ходе исследования мы обнаружили, что в сфере здравоохранения пользователи обычно нечетко описывают свои проблемы в ходе взаимодействия, и в настоящее время распространены медицинские модели вопросов и ответов с открытым исходным кодом (такие как: ChatDoctor, HuaTuo (ранее известный как HuaTuo), DoctorGLM). , MedicalGPT-ж) фокусируется на решении проблемы единого раунда описаний пользователей, игнорируя при этом ситуацию, когда «описаний пользователей может быть недостаточно». Даже популярный в настоящее время ChatGPT столкнется с аналогичными проблемами: если пользователь не заставит ChatGPT принять формат вопросов и ответов посредством текстового описания, ChatGPT также отдаст предпочтение описанию пользователя и быстро предоставит предложения и решения, которые он сочтет целесообразными. Однако в реальных разговорах между врачами и пользователями часто «врач проводит несколько раундов допроса на основе текущего описания пользователя». И, наконец, врач дает исчерпывающие рекомендации на основе информации, предоставленной пользователем, как показано на рисунке ниже. Мы определяем процесс непрерывного допроса врача как цепочку допросов (CoQ, Chain of Questioning) . Когда модель находится на стадии цепочки допросов, ее следующий вопрос обычно определяется историей контекста разговора.
Мы объединяем текущие наборы данных китайских медицинских вопросов и ответов с открытым исходным кодом (MedDialog-CN, IMCS-V2, CHIP-MDCFNPC, MedDG, cMedQA2, Chinese-medical-dialogue-data) для анализа одно- и многораундовых характеристик и характеристики запроса врача, в сочетании с долгосрочными собственными большими данными о здоровье жилого пространства в лаборатории, были построены 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://<ваш_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-1.0, Bianque-2.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 в качестве базовой модели и точно настроили 1 эпоху на 8 видеокартах NVIDIA RTX 4090, чтобы получить Bianque- 1.0 (BianQue-1.0) Смешанный набор данных китайских медицинских инструкций с вопросами и ответами и многораундовых диалогов-запросов, используемый для обучения, содержит более 9 миллионов образцов, на завершение одной эпохи обучения ушло около 16 дней. Мы планируем провести несколько версий итеративных исследований модели, основанных на возможностях модели Бянь Цюэ «видеть, слышать, спрашивать и чувствовать» в сочетании с медицинскими экспертными знаниями, мультимодальными технологиями и расчетами мультифизиологических сигналов. Модель BianQue приветствует ваш вклад! Мы рекомендуем вам сообщать о проблемах, публиковать PR и участвовать в обсуждениях на странице BianQue GitHub. Мы надеемся на сотрудничество с большим количеством университетов, больниц, исследовательских лабораторий, компаний и т. д. для совместного проведения исследований модели Bianque следующего поколения. По таким запросам (и другим запросам, которые нецелесообразно отправлять на GitHub), отправьте электронное письмо по адресу [email protected].
Четыре диагностических метода: «взглянуть, понюхать, спросить и ощутить» были изобретены Бянь Цюэ. «Четыре метода диагностики» (осмотр, обоняние, опрос и пальпация) являются основными методами диагностики в традиционной китайской медицине. Среди них способность «спрашивать» можно смоделировать в языковой модели. Мы определяем «спрашивающую» способность модели ИИ как:
Способность «Спрашивать» : модель ИИ может проводить соответствующие запросы на основе информации, введенной пациентом и в сочетании с медицинскими знаниями, а также давать «соответствующий диагноз или совет» на основе информации пациента, полученной в результате дальнейших запросов. Процесс «спроса» обычно представляет собой многораундовый диалог.
Вот 2 простых примера:
Пример 1
Пользователь: В последнее время я чувствую себя совершенно измотанным. Бянь Цюэ-1.0: Это из-за усталости или из-за того, что я поздно ложусь спать?
Пользователь: На этой неделе я засиживался допоздна, чтобы наверстать упущенное. Бянь Цюэ-1.0: Что ж, допоздна ложиться спать может легко вызвать различные неудобства, такие как головокружение, усталость, бессонница, сонливость и т. д. Больше отдыхайте. Чтобы не ложиться спать, можно принимать оризанол, витамин B1 и жидкость Anshen Bu Nao.
Пример 2
Пользователь: В последнее время я страдаю бессонницей. Bianque-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) обучался только в течение 1 эпохи. Хотя модель имеет определенные возможности для проведения медицинских исследований, она все же имеет следующие ограничения:
**BianQue-2.0(BianQue-2.0)** использует веса модели ChatGLM-6B и должен соответствовать ее MODEL_LICENSE. Поэтому этот проект можно использовать только в некоммерческих исследовательских целях .
Этот проект был инициирован Лабораторией цифровых двойников провинции Гуандун, Школой технологий будущего Южно-Китайского технологического университета. Он поддерживается Исследовательским центром информационных сетей, Школой электроники и информации и другими факультетами Южно-Китайского технологического университета. Он также выражает благодарность больнице материнства и детства Гуандуна, сотрудничающим подразделениям муниципального правительства Гуанчжоу, включая Медицинский центр для женщин и детей, Третью дочернюю больницу Университета Сунь Ятсена и Научно-исследовательский институт искусственного интеллекта Комплексного национального научного центра Хэфэй.
В то же время мы хотели бы поблагодарить следующие средства массовой информации или публичные аккаунты за освещение этого проекта (в произвольном порядке):
Освещение в СМИ 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 , Китайская информационная сеть , Китайская коммуникационная сеть, Китайская городская сеть отчетов, Китайская городская сеть
Государственный счет Строительство лаборатории в Гуандуне, Интеллектуальный голос, новая молодежь, глубокое обучение и НЛП, 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 }
}