Com base nas seis características da saúde ativa: iniciativa, prevenção, precisão, personalização, coconstrução e compartilhamento e autodisciplina, a Escola de Tecnologia do Futuro da Universidade de Tecnologia do Sul da China - Laboratório Chave Provincial de Gêmeos Digitais de Guangdong abriu o código-fonte o sistema de saúde ativo do espaço vital no campo chinês Base do modelo ProactiveHealthGPT, incluindo:
Esperamos que a grande base de modelos de saúde ativa do espaço vital ProactiveHealthGPT possa ajudar a comunidade acadêmica a acelerar a pesquisa e a aplicação de grandes modelos em áreas de saúde ativa, como doenças crônicas e aconselhamento psicológico. Este projeto é BianQue, um grande modelo de saúde espacial .
Por meio de pesquisas, descobrimos que, na área da saúde, os usuários geralmente não descrevem claramente seus problemas em uma rodada de interação e modelos de perguntas e respostas médicas de código aberto atualmente comuns (como: ChatDoctor, HuaTuo (anteriormente conhecido como HuaTuo), DoctorGLM , MedicalGPT -zh) concentra-se em resolver o problema de uma única rodada de descrições de usuários, ignorando a situação em que "as descrições de usuários podem ser insuficientes". Mesmo o atualmente popular ChatGPT terá problemas semelhantes: se o usuário não obrigar o ChatGPT a adotar um formato de perguntas e respostas por meio de descrição de texto, o ChatGPT também preferirá a descrição do usuário e fornecerá rapidamente sugestões e soluções que considerar adequadas. No entanto, as conversas reais entre médicos e usuários geralmente envolvem “o médico conduzindo múltiplas rodadas de questionamentos com base na descrição atual do usuário”. E por fim o médico dá sugestões abrangentes com base nas informações fornecidas pelo usuário, conforme mostra a figura abaixo. Definimos o processo de questionamento contínuo do médico como uma cadeia de questionamentos (CoQ, Chain of Questioning) . Quando o modelo está no estágio de cadeia de questionamentos, sua próxima pergunta geralmente é determinada pelo histórico do contexto da conversa.
Combinamos os atuais conjuntos de dados de perguntas e respostas médicas chinesas de código aberto (MedDialog-CN, IMCS-V2, CHIP-MDFCNPC, MedDG, cMedQA2, dados de diálogo médico chinês) para analisar as características de rodada única/multi-rodada e características de investigação médica, combinadas com o big data de conversação sobre saúde do espaço residencial autoconstruído de longo prazo do laboratório, BianQueCorpus, um big data de saúde Bianque com uma escala de dezenas de milhões, foi construído. Os dados da conversa são unificados em um formato de instrução no formato "Paciente: xxxnMédico: xxxnPaciente: xxxnMédico:", conforme mostrado na figura abaixo.
input: "病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:您好n病人:六岁宝宝拉大便都是一个礼拜或者10天才一次正常吗,要去医院检查什么项目n医生:宝宝之前大便什么样呢?多久一次呢n病人:一般都是一个礼拜,最近这几个月都是10多天n医生:大便干吗?n病人:每次10多天拉的很多n医生:"
target: "成形还是不成形呢?孩子吃饭怎么样呢?"
Os dados de treinamento contêm uma grande quantidade de texto alvo que é o conteúdo da consulta do médico, em vez de aconselhamento direto, o que ajudará a melhorar a capacidade de investigação do 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] Configurando CUDA-11.6 no Windows: Baixe e instale CUDA-11.6, baixe cudnn-8.4.0, descompacte e copie os arquivos para o caminho correspondente a CUDA-11.6, consulte: Usando conda para instalar pytorch em win11-cuda11 . 6-Ideias gerais de instalação
Chame o modelo BianQue-2.0 em 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 projeto fornece bianque_v2_app.py como exemplo de uso do modelo BianQue-2.0. Você pode iniciar o serviço por meio do seguinte comando e acessá-lo por meio de http://<seu_ip>:9005.
streamlit run bianque_v2_app.py --server.port 9005
Em particular, em bianque_v2_app.py, você pode modificar o seguinte código para substituir a placa gráfica especificada:
os . environ [ 'CUDA_VISIBLE_DEVICES' ] = '1'
Para usuários de placa gráfica única do Windows, você precisa modificá-la para: os.environ['CUDA_VISIBLE_DEVICES'] = '0'
, caso contrário, um erro será relatado!
Você pode especificar o caminho do modelo como um caminho local alterando o seguinte código:
model_name_or_path = "scutcyr/BianQue-2"
Também fornecemos bianque_v1_app.py como um exemplo de uso do modelo BianQue-1.0 e bianque_v1_v2_app.py como um exemplo de uso conjunto do modelo BianQue-1.0 e do modelo BianQue-2.0.
Com base no big data BianQue Health BianQueCorpus, escolhemos ChatGLM-6B como modelo de inicialização e obtivemos a nova geração de BianQue [BianQue-2.0] após treinamento de ajuste fino de instruções de todos os parâmetros. Diferente do modelo Bianque-1.0, o Bianque-2.0 expandiu dados como instruções de medicamentos, instruções de conhecimento de enciclopédias médicas e instruções de destilação ChatGPT, fortalecendo as sugestões do modelo e os recursos de consulta de conhecimento. Abaixo estão duas amostras de teste.
Use o seguinte comando para usar Bianque-2.0 e Bianque-1.0 em conjunto para construir serviços de saúde ativos:
streamlit run bianque_v1_v2_app.py --server.port 9005
A seguir está um exemplo de aplicação: as primeiras rodadas são o processo de investigação através do modelo Bianque-1.0, e a última rodada de respostas é a resposta através do modelo Bianque-2.0.
BianQue-1.0 (BianQue-1.0) é um grande modelo de diálogo médico que é ajustado por meio de instruções e múltiplas rodadas de diálogos de investigação. Após pesquisas, descobrimos que, na área médica, os médicos muitas vezes precisam passar por diversas rodadas de perguntas antes de tomar decisões. Este não é um simples modelo de “instrução-resposta”. Quando os usuários consultam um médico, muitas vezes não informam o médico sobre toda a situação no início, por isso o médico precisa continuar fazendo perguntas antes de finalmente fazer um diagnóstico e dar sugestões razoáveis. Com base nisso, construímos o BianQue-1.0 (BianQue-1.0) , com o objetivo de fortalecer as capacidades de interrogatório do sistema de IA para simular o processo de interrogatório médico. Definimos essa habilidade como a parte “pedir” de “olhar, ouvir, perguntar e compreender”. Levando em consideração a arquitetura atual do modelo chinês, o número de parâmetros e o poder de computação necessário, usamos ClueAI/ChatYuan-large-v2 como modelo básico e ajustamos 1 época em 8 placas gráficas NVIDIA RTX 4090 para obter Bianque- 1.0 (BianQue-1.0) , o conjunto de dados mistos de instruções de perguntas e respostas médicas chinesas e diálogos de investigação multi-round usados para treinamento contém mais de 9 milhões de amostras, que levaram cerca de 16 dias para completar uma época de treinamento. Planejaremos conduzir múltiplas versões de pesquisa iterativa de modelo com base nas capacidades de “ver, ouvir, perguntar e sentir” do modelo Bian Que, combinadas com conhecimento médico especializado, tecnologia multimodal e cálculos de sinais multifisiológicos. O modelo BianQue agradece suas contribuições! Incentivamos você a relatar problemas, contribuir com PRs e participar de discussões na página BianQue GitHub. Esperamos cooperar com mais universidades, hospitais, laboratórios de pesquisa, empresas, etc. para realizar conjuntamente pesquisas do modelo Bianque de próxima geração. Para tais solicitações (e outras solicitações não adequadas para serem feitas no GitHub), envie um e-mail diretamente para [email protected].
Os quatro métodos diagnósticos de “olhar, cheirar, perguntar e sentir” foram inventados por Bian Que. Os "Quatro Métodos de Diagnóstico" (inspeção, olfato, questionamento e palpação) são os métodos básicos de diagnóstico na medicina tradicional chinesa. Entre eles, a capacidade de “perguntar” pode ser modelada no modelo de linguagem. Definimos a capacidade de “pedir” do modelo de IA como:
Capacidade de "perguntar" : o modelo de IA pode conduzir consultas apropriadas com base nas informações fornecidas pelo paciente e combinadas com o conhecimento médico, e fornecer "diagnóstico ou conselho apropriado" com base nas informações do paciente obtidas em consultas adicionais. O processo de “perguntar” geralmente é um processo de diálogo em várias rodadas.
Aqui estão 2 exemplos simples:
Exemplo 1
Usuário: Sinto-me completamente exausto recentemente. Bian Que-1.0: É por causa do cansaço ou de ficar acordado até tarde?
Usuário: Fiquei acordado até tarde esta semana para colocar meu trabalho em dia Bian Que-1.0: Bem, ficar acordado até tarde pode facilmente causar vários desconfortos, como tontura, fadiga, insônia, devaneio, etc. pode tomar orizanol, vitamina B1 e Anshen Bu Nao Liquid para evitar ficar acordado.
Exemplo 2
Usuário: Tenho sofrido muito com insônia ultimamente. Bianque-1.0: Há quanto tempo você sofre de insônia?
Usuário: Já se passaram duas semanas Bianque-1.0: Como está seu sono?
Usuário: Quantas horas você precisa ir para a cama antes de dormir? Bian Que-1.0: Você pode tomar alguns medicamentos por via oral. Usuário: Você tem alguma recomendação específica? : Quais testes eu preciso?
Bian Que-1.0: Eletrocardiograma
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) foi treinado apenas por 1 época. Embora o modelo tenha certos recursos de investigação médica, ele ainda tem as seguintes limitações:
**BianQue-2.0(BianQue-2.0)** usa os pesos do modelo ChatGLM-6B e precisa seguir seu MODEL_LICENSE Portanto, este projeto só pode ser usado para fins de pesquisa não comercial .
Este projeto foi iniciado pelo Laboratório Provincial de Gêmeos Digitais de Guangdong, Escola de Tecnologia do Futuro, Universidade de Tecnologia do Sul da China. É apoiado pelo Centro de Pesquisa de Engenharia de Rede de Informação, Escola de Eletrônica e Informação e outros departamentos da Universidade de Tecnologia do Sul da China. Agradece também ao Hospital de Saúde Materno-Infantil de Guangdong, ao Centro Médico para Mulheres e Crianças do Governo Municipal de Guangzhou, ao Terceiro Hospital Afiliado da Universidade Sun Yat-sen, ao Instituto Nacional de Pesquisa de Inteligência Artificial do Centro Nacional de Ciência de Hefei e a outras unidades cooperativas.
Ao mesmo tempo, gostaríamos de agradecer aos seguintes meios de comunicação ou contas públicas por reportarem este projeto (sem ordem específica):
Cobertura da mídia 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 , Rede de Informação da China, Rede de Comunicação da China, Rede de Relatórios da Cidade da China, Rede da Cidade da China
Conta Pública Construção de Laboratório de Guangdong, Voz Inteligente Nova Juventude, Aprendizado Profundo e 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 }
}