🐐 Chivito-LoRA 7B 🐐

Uso

Revisa el siguiente repo para más detalles: https://github.com/CristianCristanchoT/chivito

from peft import PeftModel
from transformers import LLaMATokenizer, LLaMAForCausalLM, GenerationConfig

tokenizer = LlamaTokenizer.from_pretrained("decapoda-research/llama-13b-hf")

def generate_prompt(data_point):
    # desculpe o desastre de formatação, preciso ser rápido
    if data_point["input"] != '':
        return f"""A continuación hay una instrucción que describe una tarea, junto con una entrada que proporciona más contexto. Escriba una respuesta que complete adecuadamente la solicitud.

### Instrucción:
{data_point["instruction"]}

### Entrada:
{data_point["input"]}

### Respuesta:"""
    else:
        return f"""A continuación hay una instrucción que describe una tarea. Escriba una respuesta que complete adecuadamente la solicitud.

### Instrucción:
{data_point["instruction"]}

### Respuesta:"""
    
def tokenize(prompt):
    result = tokenizer(
        prompt,
        return_tensors="pt",
    )
    return result

def generate_and_tokenize_prompt(data_point):
    full_prompt = generate_prompt(data_point)
    tokenized_full_prompt = tokenize(full_prompt)
    return tokenized_full_prompt
    

model = LLaMAForCausalLM.from_pretrained(
    "decapoda-research/llama-7b-hf",
    load_in_8bit=True,
    device_map="auto",
)
model = PeftModel.from_pretrained(model, "CristianC/chivito_lora_alpaca_es_7b")


generation_config = GenerationConfig(
    temperature=0.1,
    top_p=0.75,
    top_k=40,
    num_beams=4
)

def evaluate(instruction):
    
    inputs = generate_and_tokenize_prompt(instruction)
    
    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("Respuesta: \n", output.split("### Respuesta:")[1].strip())
        
test_input = {
    'instruction': 'Escriba un programa en Python que imprima los primeros 10 números de Fibonacci.',
    'input': ''
}

evaluate(test_input)

Data

Se uso alpaca-spanish dataset, el cual es una traducción de alpaca_data.json.

Finetuning

Para finetunear el modelo se empleao el codigo de Alpaca Lora (tambien fue usado Cabrita), que proporciona las herramientas necesarias para ajustar el modelo LLaMA.

Ejemplos:

Instrucción: nombre las capitales regionales de Chile
Respuesta: Las capitales regionales de Chile son Arica, Antofagasta, La Serena, Coquimbo, Valparaíso, Viña del Mar, Concepción, Temuco, Puerto Montt y Punta Arenas.
Instrucción: Que son los chivos?
Los chivos son animales de la familia de los cérvidos. Son herbívoros que se alimentan principalmente de hierba y hojas. Los chivos son animales sociales que viven en manadas y tienen una vida promedio de 10 a 15 años.
Instrucción: traduce la frase 'Hello! how are you?' al español
Respuesta: ¡Hola! ¿Cómo estás?
Instrucción: escribe un programa de Python que imprima los primeros 24 números de Fibonacci
Respuesta: def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(24))

Referencias

Si he visto más, es poniéndome sobre los hombros de Gigantes.

LLaMA, Stanford Alpaca, Alpaca Lora, Cabrita, Bertin, ChatGPT y Hugging Face.

Ojala te sea de utilidad este proyecto y aprendas tanto como yo al hacerlo.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no pipeline_tag.

Dataset used to train CristianC/chivito_lora_alpaca_es_7b