|
--- |
|
license: mit |
|
language: |
|
- pt |
|
- en |
|
metrics: |
|
- accuracy |
|
- f1 |
|
- precision |
|
- recall |
|
pipeline_tag: text-generation |
|
tags: |
|
- LLM |
|
- Portuguese |
|
- Bode |
|
- Alpaca |
|
- Llama 2 |
|
- Q&A |
|
library_name: peft |
|
--- |
|
|
|
# BODE |
|
|
|
<!--- PROJECT LOGO --> |
|
<br /> |
|
<p align="center"> |
|
<img src="https://huggingface.co/recogna-nlp/bode-7b-alpaca-pt-br/resolve/main/Logo_Bode_LLM.jpg" alt="Bode Logo" width="800" style="margin-left:'auto' margin-right:'auto' display:'block'"/> |
|
</p> |
|
|
|
Bode é um modelo de linguagem (LLM) para o português desenvolvido a partir do modelo Llama 2 por meio de fine-tuning no dataset Alpaca, traduzido para o português pelos autores do [Cabrita](https://huggingface.co/22h/cabrita-lora-v0-1). Este modelo é projetado para tarefas de processamento de linguagem natural em português, como geração de texto, tradução automática, resumo de texto e muito mais. |
|
|
|
## Detalhes do Modelo |
|
|
|
- **Modelo Base:** Llama 2 |
|
- **Dataset de Treinamento:** Alpaca |
|
- **Idioma:** Português |
|
|
|
## Versões disponíveis |
|
|
|
| Quantidade de parâmetros | Modelo | |
|
| :-: | :-: | |
|
| 7b |[recogna-nlp/bode-7b-alpaca-pt-br](https://huggingface.co/recogna-nlp/bode-7b-alpaca-pt-br) | |
|
| 13b |[recogna-nlp/bode-13b-alpaca-pt-br](https://huggingface.co/recogna-nlp/bode-13b-alpaca-pt-br)| |
|
|
|
## Uso |
|
|
|
Você pode usar o Bode facilmente com a biblioteca Transformers do HuggingFace. Aqui está um exemplo simples de como carregar o modelo e gerar texto: |
|
|
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig |
|
from peft import PeftModel, PeftConfig |
|
|
|
llm_model = 'recogna-nlp/bode-7b-alpaca-pt-br' |
|
config = PeftConfig.from_pretrained(llm_model) |
|
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, trust_remote_code=True, return_dict=True, load_in_8bit=True, device_map='auto') |
|
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path) |
|
model = PeftModel.from_pretrained(model, llm_model) |
|
model.eval() |
|
|
|
#Testando geração de texto |
|
|
|
def generate_prompt(instruction, input=None): |
|
if input: |
|
return f"""Abaixo está uma instrução que descreve uma tarefa, juntamente com uma entrada que fornece mais contexto. Escreva uma resposta que complete adequadamente o pedido. |
|
|
|
### Instrução: |
|
{instruction} |
|
|
|
### Entrada: |
|
{input} |
|
|
|
### Resposta:""" |
|
else: |
|
return f"""Abaixo está uma instrução que descreve uma tarefa. Escreva uma resposta que complete adequadamente o pedido. |
|
|
|
### Instrução: |
|
{instruction} |
|
|
|
### Resposta:""" |
|
|
|
generation_config = GenerationConfig( |
|
temperature=0.2, |
|
top_p=0.75, |
|
num_beams=4, |
|
) |
|
|
|
def evaluate(instruction, input=None): |
|
prompt = generate_prompt(instruction, input) |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
input_ids = inputs["input_ids"].cuda() |
|
generation_output = model.generate( |
|
input_ids=input_ids, |
|
generation_config=generation_config, |
|
return_dict_in_generate=True, |
|
output_scores=True, |
|
max_new_tokens=256 |
|
) |
|
for s in generation_output.sequences: |
|
output = tokenizer.decode(s) |
|
print("Resposta:", output.split("### Resposta:")[1].strip()) |
|
|
|
evaluate("Responda com detalhes: O que é um bode?") |
|
#Exemplo de resposta obtida (pode variar devido a temperatura): Um bode é um animal do gênero Bubalus, da família Bovidae, que é um membro da ordem Artiodactyla. Os bodes são mamíferos herbívoros que são nativos da Ásia, África e Europa. Eles são conhecidos por seus cornos, que podem ser usados para defesa e como uma ferramenta. |
|
``` |
|
|
|
## Treinamento e Dados |
|
|
|
O modelo Bode foi treinado por fine-tuning a partir do modelo Llama 2 usando o dataset Alpaca em português. O treinamento foi realizado no Supercomputador Santos Dumont do LNCC, através do projeto da Fundunesp em parceria com a Petrobras: 2019/00697-8 - ProtoRADIAR: Métodos de Captura e Disseminação do Conhecimento, através de Processamento de Linguagem Natural na Área de Poços. O uso do Santos Dumont possibilitou o treinamento de modelos maiores, como o LLaMa2-13b. |
|
|
|
## Contribuições |
|
|
|
Contribuições para a melhoria deste modelo são bem-vindas. Sinta-se à vontade para abrir problemas e solicitações pull. |
|
|
|
## Contato |
|
|
|
Para perguntas, sugestões ou colaborações, entre em contato com [recogna-nlp@gmail.com]. |
|
|
|
## Citação |
|
|
|
Se você usar o modelo de linguagem Bode em sua pesquisa ou projeto, por favor, cite-o da seguinte maneira: |
|
|
|
``` |
|
@misc{bode_2023, |
|
author = { GARCIA, Gabriel Lino and PAIOLA, Pedro Henrique and MORELLI, Luis Henrique and CANDIDO, Giovani and CANDIDO JUNIOR, Arnaldo and GUILHERME, Ivan Rizzo and PAPA, João Paulo and PENTEADO, Bruno Elias}, |
|
title = { {BODE} }, |
|
year = 2023, |
|
url = { https://huggingface.co/recogna-nlp/bode-7b-alpaca-pt-br }, |
|
doi = { xxx }, |
|
publisher = { Hugging Face } |
|
} |
|
``` |