PEFT
File size: 7,861 Bytes
c0678f8
 
 
 
 
924f2fa
c0678f8
924f2fa
14b339f
924f2fa
c0678f8
 
924f2fa
c0678f8
2bdcafe
c0678f8
 
924f2fa
c0678f8
 
 
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
a2281be
924f2fa
 
 
 
c0678f8
 
 
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
 
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
 
 
 
 
 
 
 
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
 
 
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
 
924f2fa
c0678f8
924f2fa
 
 
c0678f8
 
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
756c8cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
c0678f8
924f2fa
 
 
 
 
 
 
 
 
 
 
c0678f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
---
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}, 
}
```