Basado en las seis características de la salud activa: iniciativa, prevención, precisión, personalización, co-construcción e intercambio, y autodisciplina, la Escuela de Tecnología del Futuro de la Universidad Tecnológica del Sur de China-Laboratorio clave provincial de gemelos digitales de Guangdong ha abierto el código fuente. el sistema de salud activo del espacio vital en el campo chino Modelo base ProactiveHealthGPT, que incluye:
Esperamos que la base de grandes modelos de salud activa del espacio vital ProactiveHealthGPT pueda ayudar a la comunidad académica a acelerar la investigación y la aplicación de grandes modelos en campos de la salud activa, como las enfermedades crónicas y el asesoramiento psicológico. Este proyecto es BianQue, un gran modelo de salud en el espacio vital .
A través de la investigación, descubrimos que en el campo de la salud, los usuarios generalmente no describen claramente sus problemas en una ronda de interacción, y actualmente hay modelos médicos comunes de preguntas y respuestas de código abierto (como: ChatDoctor, HuaTuo (anteriormente conocido como HuaTuo), DoctorGLM , MedicalGPT -zh) se centra en resolver el problema de una única ronda de descripciones de usuario, ignorando la situación en la que "las descripciones de usuario pueden ser insuficientes". Incluso el actualmente popular ChatGPT tendrá problemas similares: si el usuario no obliga a ChatGPT a adoptar un formato de preguntas y respuestas a través de una descripción de texto, ChatGPT también preferirá la descripción del usuario y proporcionará rápidamente sugerencias y soluciones que considere apropiadas. Sin embargo, las conversaciones reales entre médicos y usuarios a menudo implican que "el médico realice múltiples rondas de preguntas basadas en la descripción actual del usuario". Y el médico finalmente ofrece sugerencias completas basadas en la información proporcionada por el usuario, como se muestra en la siguiente figura. Definimos el proceso de interrogatorio continuo del médico como una cadena de interrogatorios (CoQ, Chain of Questioning) . Cuando el modelo se encuentra en la etapa de interrogatorio en cadena, su siguiente pregunta suele estar determinada por el historial del contexto de la conversación.
Combinamos los conjuntos de datos de preguntas y respuestas médicas chinas de código abierto actuales (MedDialog-CN, IMCS-V2, CHIP-MDCFNPC, MedDG, cMedQA2, Chinese-medical-dialogue-data) para analizar las características de ronda única/múltiple y Características de consulta médica, combinado con los big data de conversación de salud del espacio habitable autoconstruido a largo plazo del laboratorio, se construyó BianQueCorpus, un big data de salud de Bianque con una escala de decenas de millones. Los datos de la conversación se unifican en un formato de instrucción en forma de "Paciente: xxxnDoctor: xxxnPaciente: xxxnDoctor:", como se muestra en la siguiente figura.
input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:您好n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:宝宝之前大便什么样呢?多久一次呢n病人:一般都是一个礼拜,最近这几个月都是10多天n医生:大便干吗?n病人:每次10多天拉的很多n医生:"
target: "成形还是不成形呢?孩子吃饭怎么样呢?"
Los datos de entrenamiento contienen una gran cantidad de texto de destino, que es el contenido de la consulta del médico en lugar de un consejo directo, lo que ayudará a mejorar la capacidad de consulta del modelo de IA.
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
[Suplemento] Configuración de CUDA-11.6 en Windows: descargue e instale CUDA-11.6, descargue cudnn-8.4.0, descomprima y copie los archivos en la ruta correspondiente a CUDA-11.6, consulte: Uso de conda para instalar pytorch en win11-cuda11 6-Ideas generales de instalación.
Llame al modelo BianQue-2.0 en 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 )
Este proyecto proporciona bianque_v2_app.py como ejemplo del uso del modelo BianQue-2.0. Puede iniciar el servicio mediante el siguiente comando y luego acceder a él a través de http://<your_ip>:9005.
streamlit run bianque_v2_app.py --server.port 9005
En particular, en bianque_v2_app.py, puedes modificar el siguiente código para reemplazar la tarjeta gráfica especificada:
os . environ [ 'CUDA_VISIBLE_DEVICES' ] = '1'
Para los usuarios de una sola tarjeta gráfica de Windows, deben modificarlo a: os.environ['CUDA_VISIBLE_DEVICES'] = '0'
; de lo contrario, se informará un error.
Puede especificar que la ruta del modelo sea una ruta local cambiando el siguiente código:
model_name_or_path = "scutcyr/BianQue-2"
También proporcionamos bianque_v1_app.py como ejemplo de uso del modelo BianQue-1.0 y bianque_v1_v2_app.py como ejemplo de uso conjunto del modelo BianQue-1.0 y el modelo BianQue-2.0.
Basándonos en el big data de BianQue Health BianQueCorpus, elegimos ChatGLM-6B como modelo de inicialización y obtuvimos la nueva generación de BianQue [BianQue-2.0] después del entrenamiento de ajuste fino de todos los parámetros. A diferencia del modelo Bianque-1.0, Bianque-2.0 ha ampliado datos como instrucciones de medicamentos, instrucciones de conocimientos de enciclopedias médicas e instrucciones de destilación ChatGPT, fortaleciendo las sugerencias del modelo y las capacidades de consulta de conocimientos. A continuación se muestran dos muestras de prueba.
Utilice el siguiente comando para utilizar conjuntamente Bianque-2.0 y Bianque-1.0 para crear servicios de salud activos:
streamlit run bianque_v1_v2_app.py --server.port 9005
El siguiente es un ejemplo de aplicación: las primeras rondas son el proceso de consulta a través del modelo Bianque-1.0, y la última ronda de respuestas es la respuesta a través del modelo Bianque-2.0.
BianQue-1.0 (BianQue-1.0) es un gran modelo de diálogo médico que se perfecciona mediante instrucciones y múltiples rondas de diálogos de consulta. Después de la investigación, descubrimos que en el campo de la medicina, los médicos a menudo necesitan pasar por múltiples rondas de consultas antes de tomar decisiones. Este no es un simple modelo de "instrucción-respuesta". Cuando los usuarios consultan a un médico, a menudo no le informan de la situación completa al principio, por lo que el médico debe seguir haciendo preguntas antes de poder finalmente hacer un diagnóstico y dar sugerencias razonables. En base a esto, construimos BianQue-1.0 (BianQue-1.0) , con el objetivo de fortalecer las capacidades de interrogatorio del sistema de inteligencia artificial para simular el proceso de interrogatorio del médico. Definimos esta habilidad como la parte de "preguntar" de "mirar, oír, preguntar y comprender". Teniendo en cuenta la arquitectura actual del modelo en idioma chino, la cantidad de parámetros y la potencia informática requerida, utilizamos ClueAI/ChatYuan-large-v2 como modelo de referencia y ajustamos 1 época en 8 tarjetas gráficas NVIDIA RTX 4090 para obtener Bianque- 1.0 (BianQue-1.0) , el conjunto de datos mixtos de instrucciones de preguntas y respuestas médicas chinas y diálogos de consulta de múltiples rondas utilizados para la capacitación contiene más de 9 millones de muestras, que tardaron aproximadamente 16 días en completar una época de capacitación. Planearemos realizar múltiples versiones de investigación iterativa del modelo basada en las capacidades de "ver, oír, preguntar y sentir" del modelo Bian Que, combinadas con conocimiento médico experto, tecnología multimodal y cálculos de señales multifisiológicas. ¡El modelo BianQue agradece tus contribuciones! Lo alentamos a informar problemas, contribuir con relaciones públicas y participar en debates en la página de BianQue GitHub. Esperamos cooperar con más universidades, hospitales, laboratorios de investigación, empresas, etc. para llevar a cabo conjuntamente la investigación del modelo Bianque de próxima generación. Para dichas solicitudes (y otras solicitudes que no se pueden realizar en GitHub), envíe un correo electrónico directamente a [email protected].
Bian Que inventó los cuatro métodos de diagnóstico de "mirar, oler, preguntar y sentir". Los "Cuatro Métodos de Diagnóstico" (inspección, olfato, interrogatorio y palpación) son los métodos básicos de diagnóstico en la medicina tradicional china. Entre ellos, la capacidad de "preguntar" se puede modelar en el modelo del lenguaje. Definimos la capacidad de "preguntar" del modelo de IA como:
Capacidad de "preguntar" : el modelo de IA puede realizar consultas apropiadas basadas en la información ingresada por el paciente y combinada con conocimientos médicos, y brindar "diagnósticos o consejos apropiados" basados en la información del paciente obtenida de consultas adicionales. El proceso de "preguntar" suele ser un proceso de diálogo de múltiples rondas.
Aquí hay 2 ejemplos simples:
Ejemplo 1
Usuario: Me siento completamente agotado recientemente. Bian Que-1.0: ¿Es por cansancio o por quedarme despierto hasta tarde?
Usuario: Me he quedado despierto hasta tarde esta semana para ponerme al día con mi trabajo. Bian Que-1.0: Bueno, quedarse despierto hasta tarde puede causar diversas molestias, como mareos, fatiga, insomnio, ensoñaciones, etc. Descanse más. Puede tomar orizanol, vitamina B1 y Anshen Bu Nao Liquid para evitar quedarse despierto.
Ejemplo 2
Usuario: He estado sufriendo mucho de insomnio últimamente. Bianque-1.0: ¿Cuánto tiempo llevas sufriendo de insomnio?
Usuario: Han pasado dos semanas Bianque-1.0: ¿Cómo duermes?
Usuario: ¿Cuántas horas necesitas acostarte antes de poder dormir? Bian Que-1.0: Puedes tomar algunos medicamentos por vía oral. Usuario: ¿Tienes alguna recomendación específica? : ¿Qué pruebas necesito?
Bian Que-1.0: Electrocardiograma
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) solo ha sido entrenado durante 1 época. Aunque el modelo tiene ciertas capacidades de consulta médica, todavía tiene las siguientes limitaciones:
**BianQue-2.0(BianQue-2.0)** utiliza los pesos del modelo ChatGLM-6B y debe seguir su MODEL_LICENSE. Por lo tanto, este proyecto solo puede usarse para fines de investigación no comerciales .
Este proyecto fue iniciado por el Laboratorio Clave Provincial de Gemelos Digitales de Guangdong, la Escuela de Tecnología del Futuro, la Universidad Tecnológica del Sur de China. Cuenta con el apoyo del Centro de Investigación de Ingeniería de Redes de Información, la Escuela de Electrónica e Información y otros departamentos de la Universidad Tecnológica del Sur de China. También agradece al Hospital de Salud Materno Infantil de Guangdong, el Centro Médico para Mujeres y Niños del Gobierno Municipal de Guangzhou, el Tercer Hospital Afiliado de la Universidad Sun Yat-sen, el Instituto de Investigación de Inteligencia Artificial del Centro Nacional de Ciencias de Hefei y otras unidades cooperativas.
Al mismo tiempo, nos gustaría agradecer a los siguientes medios o cuentas públicas por informar sobre este proyecto (sin ningún orden en particular):
Cobertura mediática 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 , Red de información de China, Red de comunicación de China, Red de informes de ciudades de China, Red de ciudades de China
Cuenta Pública Construcción del Laboratorio de Guangdong, Voz Inteligente Nueva Juventud, Aprendizaje Profundo y PNL, 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 }
}