| --- |
| library_name: peft |
| base_model: recogna-nlp/internlm-chatbode-7b |
| --- |
| |
| # DrBode 360: Assistente Virtual Médico em Português Brasileiro |
|
|
| <p align="center"> |
| <img src="https://huggingface.co/recogna-nlp/doutor-bode-7b-360k/resolve/main/Logo_DrBode.jpg" alt="Bode Logo" width="400" style="margin-left:'auto' margin-right:'auto' display:'block'"/> |
| </p> |
|
|
|
|
| ## Visão Geral |
|
|
| **DrBode 360k** é um modelo de linguagem de grande porte (LLM) ajustado para atuar como um assistente virtual médico em português brasileiro. Este modelo foi criado com o objetivo de fornecer respostas relevantes e confiáveis para perguntas relacionadas à saúde, sendo uma ferramenta útil para profissionais de saúde e pacientes. Ele foi treinado com **360 mil amostras**, combinando dados médicos e de instruções gerais, o que melhora sua capacidade de responder a perguntas tanto em contextos médicos quanto em outros cenários de uso. |
|
|
|
|
| <!-- Provide a quick summary of what the model is/does. --> |
|
|
|
|
|
|
| ## Descrição do Modelo |
|
|
| O **DrBode 360k** é uma versão aprimorada do modelo [ChatBode](https://huggingface.co/recogna-nlp/internlm-chatbode-7b), que, por sua vez, é baseado no [InternLM2](https://huggingface.co/internlm/internlm2-chat-7b). O **DrBode 360** foi ajustado utilizando uma abordagem que combina dados médicos e dados gerais de instruções, permitindo que ele tenha um bom desempenho tanto em perguntas diretamente relacionadas à medicina quanto em questões mais amplas que requerem capacidade de seguir instruções. |
|
|
| Atributos principais: |
|
|
| - **Modelo Base:** ChatBode, ajustado para seguir instruções em português brasileiro. |
| - **Ajuste Fino:** Utiliza uma combinação de dados médicos e de instruções, com 360 mil amostras no total. |
| - **Domínio de Foco:** Perguntas sobre saúde, sintomas médicos e recomendações gerais. |
| |
| O ajuste fino foi feito com **50% de dados médicos** e **50% de dados de instruções gerais**, permitindo que o modelo mantenha um equilíbrio entre especialização médica e versatilidade em outros domínios. |
|
|
|
|
|
|
| ## Dados de Treinamento |
|
|
| O **DrBode 360** foi treinado com uma combinação de dois principais conjuntos de dados traduzidos para o português: |
|
|
| - **HealthCareMagic-100k-en:** Um conjunto de 100.000 amostras de interações médico-paciente, traduzidas do inglês para o português utilizando o modelo GPT-3.5. |
| - **MedQuAD:** Contém aproximadamente 9.500 pares de perguntas e respostas relacionados à área médica, também traduzidos. |
|
|
| Esses conjuntos de dados fornecem uma base sólida para o modelo responder a perguntas clínicas comuns, mas ainda há a necessidade de dados nativos que abordem condições e nuances culturais específicas do Brasil, como doenças endêmicas. |
|
|
| Além disso, o **DrBode 360** utilizou dados adicionais de instruções gerais para melhorar sua capacidade de seguir comandos e responder adequadamente em cenários que vão além do domínio médico. |
|
|
| <!-- Provide a longer summary of what this model is. --> |
|
|
| ## Desempenho do Modelo |
|
|
| O desempenho do **DrBode 360** foi avaliado com base em seis critérios principais: |
|
|
| - **Precisão:** 3.6/5 |
| - **Completude:** 3.3/5 |
| - **Adequação:** 3.3/5 |
| - **Segurança:** 3.3/5 |
| - **Gramaticalidade:** 4.2/5 |
| - **Coerência:** 4.2/5 |
| - |
| O **DrBode 360** se destacou na capacidade de fornecer respostas gramaticalmente corretas e coerentes, o que é fundamental para garantir a clareza na comunicação. No entanto, a segurança das respostas médicas e a precisão ainda precisam de aprimoramentos, especialmente em contextos críticos onde recomendações médicas inadequadas podem ser feitas. |
|
|
| ## Avaliação Qualitativa |
|
|
| As respostas geradas pelo **DrBode 360** foram avaliadas por profissionais médicos, que julgaram a qualidade das respostas com base nos seguintes critérios: |
|
|
| - **Precisão e segurança** das informações fornecidas. |
| - **Completude**, considerando a profundidade das respostas. |
| - **Adequação** em termos de estilo e tom, apropriados para uma resposta médica. |
|
|
| **ATENÇÃO** |
|
|
| Embora o **DrBode 360** tenha mostrado bom desempenho em muitos aspectos, foi identificado que o modelo pode, ocasionalmente, sugerir tratamentos que não são ideais, especialmente para condições regionais específicas, como o uso inadequado de medicamentos para sintomas de dengue. Isso demonstra a necessidade de melhorias nos dados de treinamento para lidar melhor com esses casos. |
|
|
| ## Riscos e Considerações |
|
|
| O uso do **DrBode 360** deve ser feito com cautela, especialmente em contextos onde as respostas fornecidas podem ter implicações diretas na saúde dos usuários. Embora o modelo seja útil como assistente informativo, ele não deve substituir a consulta com profissionais de saúde qualificados. |
|
|
| Além disso, devido ao treinamento com dados traduzidos, algumas nuances regionais e culturais podem ser perdidas, o que pode levar a respostas inadequadas para condições médicas específicas do Brasil. |
|
|
|
|
| ## Direções futuras |
|
|
| - **Conjuntos de dados nativos:** há uma necessidade urgente de desenvolver conjuntos de dados nativos em português brasileiro para refletir melhor os desafios regionais de saúde. |
| - **Ajuste fino aprimorado:** o trabalho futuro envolverá o ajuste fino diretamente no InternLM2 com conjuntos de dados otimizados para mitigar os efeitos do esquecimento catastrófico. |
| - **Avaliação robusta:** estruturas de avaliação mais estruturadas e consistentes são necessárias para avaliar melhor a qualidade e a segurança das respostas do modelo em cenários do mundo real. |
|
|
|
|
| ## Como Usar |
|
|
| Aqui está um exemplo de como usar o modelo **DrBode 360:** |
|
|
| ```python |
| !pip install -q einops accelerate bitsandbytes |
| |
| import torch |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig |
| |
| # Nosso modelo base |
| model_name = "recogna-nlp/internlm-chatbode-7b" |
| |
| # Configuração para quantização do nosso modelo |
| compute_dtype = getattr(torch, "float16") |
| bnb_config = BitsAndBytesConfig( |
| load_in_4bit = True, |
| bnb_4bit_quant_type = 'nf4', |
| bnb_4bit_compute_dtype = compute_dtype, |
| bnb_4bit_use_double_quant = False, |
| ) |
| |
| |
| # Carregando modelo e tokenizer |
| tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) |
| original_model = AutoModelForCausalLM.from_pretrained( |
| model_name, |
| quantization_config = bnb_config, |
| trust_remote_code = True, |
| device_map = 'auto' |
| ) |
| |
| original_model = original_model.eval() |
| |
| |
| # Perguntas mandadas para o Dr Bode |
| evaluation_inputs = [ |
| 'Apareceram aftas na minha boca e uma amiga disse que posso usar nistatina oral para tratar. Para que serve e como usar nistatina oral? É indicado para tratar aftas?', |
| 'Estou com dor no corpo, dor de cabeça, febre alta e um forte cansaço. O que pode ser? Devo tomar algum remédio?', |
| 'Me explique, detalhadamente, qual a diferença entre uma gripe e um resfriado.' |
| ] |
| |
| ## Carregando o Dr Bode |
| from peft import PeftModel, PeftConfig |
| model = PeftModel.from_pretrained(original_model, 'recogna-nlp/doutor-bode-7b-360k') |
| model = model.eval() |
| |
| ## Realizando a inferência e verificando as respostas |
| for q in evaluation_inputs: |
| print(q) |
| response, _ = model.chat(tokenizer, q, do_sample=False, history=[]) |
| print(response) |
| print() |
| ``` |
|
|
| ## Referência |
|
|
| Se você utilizar o **DrBode 360** em sua pesquisa ou aplicativo, por favor, cite o seguinte trabalho: |
|
|
| ``` |
| @misc{paiola2024adaptingllmsmedicaldomain, |
| title={Adapting LLMs for the Medical Domain in Portuguese: A Study on Fine-Tuning and Model Evaluation}, |
| author={Pedro Henrique Paiola and Gabriel Lino Garcia and João Renato Ribeiro Manesco and Mateus Roder and Douglas Rodrigues and João Paulo Papa}, |
| year={2024}, |
| eprint={2410.00163}, |
| archivePrefix={arXiv}, |
| primaryClass={cs.CL}, |
| url={https://arxiv.org/abs/2410.00163}, |
| } |
| ``` |
|
|
|
|