File size: 6,625 Bytes
517adfd a79f5b0 14cc9c3 517adfd 14cc9c3 a79f5b0 517adfd 14cc9c3 517adfd 14cc9c3 517adfd 14cc9c3 517adfd 14cc9c3 517adfd 14cc9c3 517adfd c62ce8c f1fa30f 14e71a7 f1fa30f 931cc15 f1fa30f 054a5a1 0e7b6e7 f1fa30f 931cc15 f1fa30f 517adfd 14cc9c3 517adfd 6d18a4e 517adfd 14cc9c3 6d18a4e 517adfd 14cc9c3 517adfd |
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 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
---
language:
- nl
license: cc-by-nc-4.0
datasets:
- BramVanroy/alpaca-dolly-dutch
inference: false
base_model: tiiuae/falcon-40b
model-index:
- name: falcon-7b-ft-alpaca-cleaned-dutch
results: []
---
# falcon-40b-ft-alpaca-dolly-dutch
## Model description
This model is a fine-tuned version of [tiiuae/falcon-40b](https://huggingface.co/tiiuae/falcon-40b) on the [BramVanroy/alpaca-dolly-dutch](https://huggingface.co/datasets/BramVanroy/alpaca-dolly-dutch) dataset.
See the original [tiiuae/falcon-40b](https://huggingface.co/tiiuae/falcon-40b) for more information, intended use, and biases.
## Intended uses & limitations
This model is intended as a (poor) baseline for Dutch generative LLMs. It by no means aims to provide SOTA performance and is specifically intended for research purposes and experimentation.
## Example usage
In the example below, you see a query `Wat hoort er niet in dit rijtje thuis? Leg ook uit waarom.` ("What does not belong in the list? Explain why.") with given input "aap, muis, auto, vogel" ("monkey, mouse, car, bird").
The model "replies" (cut off due to `max_new_tokens`):
> "Auto" hoort niet in het rijtje, omdat het geen levend wezen is.
> Een auto is een voertuig dat wordt aangedreven door een motor en wordt gebruikt om mensen en goederen van de ene plaats naar de andere te verplaatsen. Het is een machine gemaakt door mensen, in tegenstelling tot levende wezens zoals een aap, een muis of een vogel.
> Auto's zijn gemaakt van metalen, plastic en andere materialen, terwijl levende organismen bestaan uit cellen en weefsels. Auto's
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
def format_alpaca_sample(instruction: str, input_text: str):
if len(input_text) >= 2:
text = f'''Hieronder staat een instructie `Instruction` die een taak beschrijft, gecombineerd met een invoer `Input` die verdere context biedt. Schrijf een antwoord na `Response:` dat het verzoek op de juiste manier voltooit of beantwoordt.
### Instruction:
{instruction}
### Input:
{input_text}
### Response:
'''
else:
text = f'''Hieronder staat een instructie `Instruction` die een taak beschrijft. Schrijf een antwoord na `Response:` dat het verzoek op de juiste manier voltooit of beantwoordt.
### Instruction:
{instruction}
### Response:
'''
return text
@torch.no_grad()
def generate(model, tokenizer, instruction: str, input_text: str = ""):
input_prompt = format_alpaca_sample(instruction, input_text)
inputs = tokenizer([input_prompt], return_tensors="pt")
generated_ids = model.generate(
input_ids=inputs["input_ids"].to(model.device),
attention_mask=inputs["attention_mask"].to(model.device),
max_new_tokens=128,
temperature=0.4,
num_beams=3,
no_repeat_ngram_size=4,
length_penalty=0.9,
early_stopping=True,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
).detach().to("cpu")[0]
return tokenizer.decode(generated_ids)
model_name = "BramVanroy/falcon-40b-ft-alpaca-dolly-dutch"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
load_in_4bit=True,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
)
model.eval()
instruction = "Wat hoort er niet in dit rijtje thuis? Leg ook uit waarom."
input_text = "aap, muis, auto, vogel"
generation = generate(model, tokenizer, instruction, input_text)
```
## Citation
If you want to refer to this model, you can cite the following:
Vanroy, B. (2023). Falcon 40B Finetuned on Dutch Translations of Alpca and Dolly. https://doi.org/10.57967/hf/0864
```bibtext
@misc{vanroy2023falcon40b_instruct_dutch,
author = { Vanroy, Bram },
title = { Falcon 40B Finetuned on Dutch Translations of Alpaca and Dolly},
year = 2023,
url = { https://huggingface.co/BramVanroy/falcon-40b-ft-alpaca-dolly-dutch },
doi = { 10.57967/hf/0864 },
publisher = { Hugging Face }
}
```
## Training and evaluation data
Trained on the synthetic [BramVanroy/alpaca-dolly-dutch](https://huggingface.co/datasets/BramVanroy/alpaca-dolly-dutch) instruction dataset.
Therefore, commercial use of this model is forbidden. The model is intended for research purposes only.
- [Dolly 15k](https://huggingface.co/datasets/BramVanroy/dolly-15k-dutch) (translated to Dutch)
- [Alpaca cleaned](https://huggingface.co/datasets/BramVanroy/alpaca-cleaned-dutch) (translated to Dutch)
## Training procedure
Trained with LoRA and merged before upload. The adapters are in the `adapters` branch.
Prompt template (where the input is optional and can be left out):
```
Hieronder staat een instructie `Instruction` die een taak beschrijft, gecombineerd met een invoer `Input` die verdere context biedt. Schrijf een antwoord na `Response:` dat het verzoek op de juiste manier voltooit of beantwoordt.
### Instruction:
{instruction}
### Input:
{input}
### Response:
{response}
```
The loss was only calculated on the response prediction.
### Training hyperparameters
The following hyperparameters were used during training:
- learning_rate: 0.0002
- train_batch_size: 8
- eval_batch_size: 8
- seed: 42
- distributed_type: multi-GPU
- num_devices: 16
- gradient_accumulation_steps: 4
- total_train_batch_size: 512
- total_eval_batch_size: 128
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: linear
- lr_scheduler_warmup_steps: 150
- num_epochs: 5 (but with early stopping)
### Training results
| Training Loss | Epoch | Step | Validation Loss |
|:-------------:|:-----:|:----:|:---------------:|
| 1.1656 | 0.16 | 20 | 1.0107 |
| 0.9778 | 0.32 | 40 | 0.9711 |
| 1.0424 | 0.49 | 60 | 0.9512 |
| 0.9858 | 0.65 | 80 | 0.9415 |
| 0.9457 | 0.81 | 100 | 0.9341 |
| 1.0584 | 0.97 | 120 | 0.9277 |
| 1.0284 | 1.14 | 140 | 0.9372 |
| 0.8781 | 1.3 | 160 | 0.9295 |
| 0.9531 | 1.46 | 180 | 0.9267 |
| 0.9496 | 1.62 | 200 | 0.9226 |
| 0.9178 | 1.78 | 220 | 0.9192 |
| 1.0763 | 1.95 | 240 | 0.9154 |
| 0.9561 | 2.11 | 260 | 0.9423 |
| 0.7991 | 2.27 | 280 | 0.9368 |
| 0.8503 | 2.43 | 300 | 0.9363 |
| 0.8749 | 2.6 | 320 | 0.9299 |
### Framework versions
- Transformers 4.30.1
- Pytorch 2.0.1+cu117
- Datasets 2.13.1
- Tokenizers 0.13.3
|