PEFT
Portuguese
llama
LoRA
Llama
Stanford-Alpaca
alpaca-lora-ptbr-7b / README.md
dominguesm's picture
Update README.md
c946b2e
|
raw
history blame
8.88 kB

🦙🇧🇷 Alpaca-LoRA-PTBR: Low-Rank LLaMA Instruct-Tuning


This model was trained and made available solely and exclusively for research purposes.

Try the pretrained model out on Colab here! (WIP)

This repository contains a low-ranked adapter (LoRa) for LLaMA-7b fit on the Stanford Alpaca dataset translated into Brazilian Portuguese using the Helsinki-NLP/opus-mt-tc-big-en-pt model.

As the foundation model has not yet been made openly available by Meta (request form), it is not included in this repository, but you can easily find them by searching on Github or here on HuggingFace.

Inference

!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: "))

Example outputs

Instruções (Instruction): Me fale sobre alpacas

Alpaca-LoRA-PTBR: 'Alpacas são uma espécie de camelo nativa da América do Sul. Eles '
'são conhecidos por serem pacíficos e tranquilos, e muitas vezes são mantidos '
'como animais de estimação domésticos. Alpacas são conhecidas por seus longos '
'e finos cabelos, que podem ser usados para fazer roupas e cobertores. Eles '
'também podem ser usados para produzir leite e carne.
Instruções (Instruction): Me explique sobre o que é a Lei Maria da Penha do Brasil.

Alpaca-LoRA-PTBR: 'A Lei Maria da Penha do Brasil é uma lei brasileira que proíbe a '
 'discriminação e a violência contra as mulheres. A lei foi nomeada em '
 'homenagem a Maria da Penha, uma mulher que foi assassinada em 1973 por seu '
 'ex-namorado. A lei foi aprovada em 1985 e proíbe a discriminação e a '
 'violência contra as mulheres. A lei proíbe a discriminação e a violência '
 'contra as mulheres, incluindo a discriminação e a violência de gênero, a '
 'discriminação e a violência sexual, a discriminação e a violência econômica, '
 'a discriminação e a violência física e a discriminação e a violência '
 'psicológica.'


In this case the model missed the following points:

* Maria da Penha Fernandes was not murdered, but suffered an attempted murder.
* Maria da Penha Fernandes is alive.
* The attempted homicide took place in 1983.
* The law was sanctioned in 2006.
Instruções (Instruction): Dada a fórmula química, calcule a massa molar.

Entrada (Input): CaCl2

Alpaca-LoRA-PTBR: 'A massa molar de cloreto de cálcio é 110,98 g/mol.'
Instruções (Instruction): Faça quatro perguntas sobre a seguinte passagem:

Entrada (Input): A anatomia de uma abelha é bastante intrincada. Tem três partes do corpo: a cabeça, o tórax e o abdômen. A cabeça consiste em órgãos sensoriais, três olhos simples e dois olhos compostos e vários apêndices. O tórax tem três pares de pernas e dois pares de asas, enquanto o abdômen contém a maioria dos órgãos da abelha, incluindo o sistema reprodutivo e o sistema digestivo.

Alpaca-LoRA-PTBR: '1. Quais são os órgãos sensoriais da cabeça da abelha? 2. Quais '
 'são os órgãos sensoriais do tórax da abelha? 3. Quais são os órgãos '
 'sensoriais do abdômen da abelha? 4. Quais são os órgãos do sistema '
 'reprodutivo da abelha?'
Instruções (Instruction): Analise o documento jurídico fornecido e explique os pontos-chave.

Entrada (Input): O seguinte é um trecho de um contrato entre duas partes, rotulado como "Empresa A" e "Empresa B": "A Empresa A concorda em fornecer assistência razoável à Empresa B para garantir a precisão das demonstrações financeiras que fornece. Isso inclui permitir à Empresa um acesso razoável ao pessoal e outros documentos que possam ser necessários para a revisão da Empresa B. A Empresa B concorda em manter o documento fornecido pela Empresa A em confiança e não divulgará as informações a terceiros sem a permissão explícita da Empresa A".

Alpaca-LoRA-PTBR: 'Este documento é um contrato entre duas partes, rotulado como '
 '"Empresa A" e "Empresa B". A Empresa A concorda em fornecer assistência '
 'razoável à Empresa B para garantir a precisão das demonstrações financeiras '
 'que fornece. Isso inclui permitir à Empresa um acesso razoável ao pessoal e '
 'outros documentos que possam ser necessários para a revisão da Empresa B. A '
 'Empresa B concorda em manter o documento fornecido pela Empresa A em '
 'confiança e não divulgará as informações a terceiros sem a permissão '
 'explícita da Empresa A.''

Training procedure

Fine-tuning was done via the Trainer API. Here is the Jupyter notebook with the training code. (coming soon)

Training hyperparameters

The following hyperparameters were used during training:

Hyperparameter Value
Batch size 128
Learning rate 3e-5
Epochs 3
Max length 512
Lora R 8
Lora Alpha 16
Lora Dropout 0.5

Training results

The validation results on the valid split are summarised here below.

Step Training Loss Validation Loss
200 0.891900 0.891723
400 0.854400 0.866401
600 0.850600 0.854273
800 0.831000 0.846825
1000 0.832000 0.842221

Ethical considerations (LLaMA Model Card)

Data The data used to train the model is collected from various sources, mostly from the Web. As such, it contains offensive, harmful and biased content. We thus expect the model to exhibit such biases from the training data.

Human life The model is not intended to inform decisions about matters central to human life, and should not be used in such a way.

Mitigations We filtered the data from the Web based on its proximity to Wikipedia text and references. For this, we used a Kneser-Ney language model and a fastText linear classifier.

Risks and harms Risks and harms of large language models include the generation of harmful, offensive or biased content. These models are often prone to generating incorrect information, sometimes referred to as hallucinations. We do not expect our model to be an exception in this regard.

Use cases LLaMA is a foundational model, and as such, it should not be used for downstream applications without further investigation and mitigations of risks. These risks and potential fraught use cases include, but are not limited to: generation of misinformation and generation of harmful, biased or offensive content.

References