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