35 1.3K 102

Alpaca 7B PTBR

Adaptação de Modelo de Linguagem LLaMA para Português

Open In Colab
Github Project Page

Alpaca-LoRA-PTBR: Ajuste Instrucional de LLaMA de Baixa Classificação

O projeto Alpaca-LoRA-PTBR é um modelo de aprendizado de máquina criado e disponibilizado exclusivamente para fins de pesquisa. Este projeto envolve a utilização de um adaptador de baixa classificação (LoRa) para LLaMA-7b ajustado ao conjunto de dados Stanford Alpaca traduzido para o português brasileiro usando o modelo Helsinki-NLP/opus-mt-tc-big-en-pt.

O modelo foi treinado usando dados do conjunto "dominguesm/alpaca-data-pt-br", mas vale notar que o modelo base ainda não foi disponibilizado abertamente pelo Meta.

A finalidade principal deste modelo é gerar respostas baseadas em instruções fornecidas. Para este propósito, um sistema de geração foi criado, utilizando a biblioteca de transformers da HuggingFace e a biblioteca PeftModel. O sistema gera uma solicitação baseada em uma instrução fornecida e, em seguida, utiliza o modelo para gerar uma resposta adequada.

Exemplos de saída

O modelo foi testado com várias instruções, e as respostas geradas foram surpreendentemente corretas e detalhadas. Por exemplo, quando questionado sobre alpacas, o modelo gerou uma resposta informativa e correta. Quando solicitado a explicar a Lei Maria da Penha do Brasil, o modelo também gerou uma resposta detalhada e informativa, mas com alguns erros factuais.

Além disso, o modelo também foi capaz de calcular a massa molar a partir de uma fórmula química, fazer perguntas baseadas em um texto informativo e analisar um documento jurídico para explicar os pontos principais.

Procedimento de treinamento

O treinamento do modelo foi realizado usando a API Trainer. Diversos hiperparâmetros foram ajustados durante o treinamento, incluindo o tamanho do lote, a taxa de aprendizado, o número de épocas, o comprimento máximo, e parâmetros específicos do LoRa (R, Alpha e Dropout).

Considerações éticas

Embora o modelo Alpaca-LoRA-PTBR tenha se mostrado eficaz em muitos aspectos, também é importante notar que, como qualquer modelo de linguagem, ele pode exibir preconceitos e gerar informações prejudiciais ou ofensivas. Assim, é importante que os usuários deste modelo estejam cientes dessas limitações e utilizem o modelo de maneira ética e responsável.

Os desenvolvedores do modelo fizeram esforços para mitigar esses riscos, incluindo a filtragem de dados baseada na proximidade ao texto e referências da Wikipedia. No entanto, é importante lembrar que o modelo não deve ser usado para informar decisões sobre assuntos centrais à vida humana sem uma investigação e mitigação de riscos mais aprofundadas.

Em resumo, o Alpaca-LoRA-PTBR é um modelo promissor que demonstra o potencial da instrução de ajuste para modelos de linguagem. No entanto, como qualquer ferramenta de IA, deve ser usado com cuidado e consideração pelas implicações éticas e práticas.

Exemplo de uso

!pip install -q loralib
!pip install -q sentencepiece
!pip install -q bitsandbytes
!pip install -q git+https://github.com/huggingface/transformers.git
!pip install -q git+https://github.com/huggingface/peft.git
 
from peft import PeftModel
from transformers import LlamaForCausalLM, LlamaTokenizer, GenerationConfig
 
llama_7b_hf_model_id = ""
 
tokenizer = LlamaTokenizer.from_pretrained(llama_7b_hf_model_id)
model = LlamaForCausalLM.from_pretrained(
    llama_7b_hf_model_id,
    load_in_8bit=True,
    device_map="auto",
)
model = PeftModel.from_pretrained(model, "dominguesm/alpaca-lora-ptbr-7b")
 
def generate_prompt(instruction, input=None):
    if input:
        return f"""Abaixo está uma instrução que descreve uma tarefa, emparelhada com uma entrada que fornece mais contexto. Escreva uma resposta que conclua adequadamente a solicitação.
 
### Instruções:
{instruction}
 
### Entrada:
{input}
 
### Resposta:"""
    else:
        return f"""Abaixo está uma instrução que descreve uma tarefa. Escreva uma resposta que conclua adequadamente a solicitação.
 
### Instruções:
{instruction}
 
### Resposta:"""
 
generation_config = GenerationConfig(
    temperature=0.1,
    top_p=0.75,
    num_beams=4,
)
 
def generate(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=512
    )
    for s in generation_output.sequences:
        output = tokenizer.decode(s)
        print("Resposta:", output.split("### Resposta:")[1].strip())
 
generate(input("Instrução: "))