PEFT
File size: 7,949 Bytes
818b711
 
 
 
 
03e2b45
818b711
03e2b45
c208abd
03e2b45
818b711
 
03e2b45
818b711
8fbffbb
818b711
 
03e2b45
818b711
 
 
03e2b45
818b711
03e2b45
 
 
818b711
6c6537f
03e2b45
 
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
 
818b711
03e2b45
818b711
03e2b45
818b711
 
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
 
 
 
 
 
 
 
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
 
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
 
 
818b711
 
03e2b45
818b711
03e2b45
818b711
03e2b45
57c62e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca00085
57c62e7
 
 
 
 
 
 
 
03e2b45
818b711
03e2b45
818b711
03e2b45
818b711
03e2b45
 
 
 
 
 
 
 
 
 
 
818b711
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
---
library_name: peft
base_model: recogna-nlp/internlm-chatbode-7b
---

# DrBode 240: 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 240** é um modelo de linguagem de grande porte (LLM) ajustado para responder a perguntas médicas em português brasileiro. Este modelo foi treinado com **240 mil** amostras, sendo parte delas dados médicos e outra parte composta por dados de instruções gerais. O objetivo do DrBode 240 é oferecer respostas confiáveis e relevantes para questões médicas, auxiliando tanto profissionais de saúde quanto usuários finais em suas dúvidas sobre saúde.


<!-- Provide a quick summary of what the model is/does. -->



## Descrição do Modelo

O **DrBode 240** foi desenvolvido a partir do modelo [ChatBode](https://huggingface.co/recogna-nlp/internlm-chatbode-7b), uma versão ajustada do [InternLM2](https://huggingface.co/internlm/internlm2-chat-7b) adaptada para seguir instruções em português. O **DrBode 240** foi ajustado com **33% de dados médicos** e **67% de dados de instruções gerais**, buscando encontrar um equilíbrio entre a especialização médica e a capacidade de lidar com diferentes tipos de perguntas.
 
Atributos principais:

- **Modelo Base:** ChatBode, especializado em seguir instruções em português brasileiro.
- **Ajuste Fino:** Usou 240 mil amostras, com uma combinação de dados médicos e de instruções gerais.
- **Domínio de Foco:** Respostas a perguntas relacionadas à saúde, sintomas médicos e orientações gerais.

Este modelo foi ajustado para ser mais versátil em cenários não médicos, ao mesmo tempo em que manteve uma capacidade razoável de responder a perguntas do domínio médico.

O ajuste fino foi feito com **33% de dados médicos** e **67% 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 240** 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 modelo foi treinado com uma grande quantidade de dados de instruções gerais (67%), retirados de outros domínios, para melhorar sua capacidade de seguir comandos em contextos mais amplos e diversos.


<!-- Provide a longer summary of what this model is. -->

## Desempenho do Modelo

O desempenho do **DrBode 240** foi avaliado com base em seis critérios principais:

- **Precisão:** 3.4/5
- **Completude:** 3.4/5
- **Adequação:** 3.5/5
- **Segurança:** 3.2/5
- **Gramaticalidade:** 3.8/5
- **Coerência:** 4.2/5
- 
O modelo **DrBode 240** mostrou-se eficaz em fornecer respostas bem estruturadas e coerentes, com um desempenho confiável em termos de clareza e gramática. No entanto, a precisão médica e a segurança das respostas precisam de mais atenção, já que o modelo é menos especializado em dados médicos do que o **DrBode 360.**

## Avaliação Qualitativa

As respostas geradas pelo **DrBode 240** foram avaliadas por profissionais médicos, que analisaram sua capacidade de fornecer informações corretas e seguras. Durante a avaliação, foi observado que o modelo, embora bastante eficaz na construção de respostas coerentes, apresentou algumas limitações em termos de precisão médica, o que reflete o fato de que a maior parte de seu ajuste fino envolveu dados de instruções gerais.

A utilização de mais dados de instruções gerais (67%) fez com que o modelo se saísse melhor em contextos não médicos, mas limitou sua especialização na área da saúde. Isso fez com que o **DrBode 240** fosse uma boa escolha para perguntas mais gerais, mas com algumas restrições em contextos clínicos mais críticos.


## Riscos e Considerações

Embora o **DrBode 240** seja uma ferramenta útil para fornecer orientações gerais sobre saúde, ele deve ser usado com cautela, especialmente em situações médicas delicadas. O modelo não substitui o aconselhamento médico profissional, e erros podem ocorrer ao sugerir tratamentos, especialmente para condições específicas de regiões, como o Brasil.

Além disso, o uso de dados traduzidos pode fazer com que o modelo perca algumas nuances culturais e regionais importantes para a prática médica no 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 240:**

```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-240k')
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 240** 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}, 
}
```