File size: 11,677 Bytes
9da1441
 
a77830e
 
 
b339efa
a77830e
 
b339efa
 
 
 
 
 
 
 
 
 
 
9da1441
 
b339efa
9da1441
b339efa
9da1441
bc53ef1
ffca881
bc53ef1
ffca881
9da1441
ffca881
 
 
 
 
9da1441
b339efa
 
9da1441
b339efa
9da1441
ffca881
bc53ef1
ffca881
bc53ef1
ffca881
 
9da1441
30c332f
 
 
 
 
 
9a3df90
 
2f3c1dc
9a3df90
 
 
 
3a682f1
9a3df90
b339efa
9da1441
ffca881
 
 
 
b339efa
 
ffca881
9da1441
b339efa
9da1441
b339efa
 
 
 
9da1441
b339efa
9da1441
b339efa
9da1441
b339efa
9da1441
ffca881
9da1441
b339efa
 
 
 
 
 
 
 
 
 
 
9da1441
b339efa
9da1441
ffca881
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9da1441
b339efa
9da1441
ffca881
 
 
076a17b
 
 
 
9da1441
b339efa
9da1441
b339efa
9da1441
b339efa
9da1441
076a17b
9da1441
 
b339efa
9da1441
b339efa
 
9da1441
b339efa
9da1441
b339efa
 
 
 
 
 
 
 
 
 
 
 
9da1441
b339efa
9da1441
5fe1528
b339efa
 
9da1441
b339efa
 
 
 
 
9da1441
b339efa
 
 
 
 
 
9da1441
076a17b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
191
192
193
194
195
196
197
198
199
200
201
202
---
library_name: transformers
license: apache-2.0
pipeline_tag: text-generation
tags:
- finetuned
inference: true
widget:
- messages:
  - role: system
    content: Je bent een behulpzame Nederlandse AI-assistent.
  - role: user
    content: Is Nederlandse wijn lekker?
datasets:
- yhavinga/mc4_nl_cleaned
- yhavinga/nedd_wiki_news
- teknium/OpenHermes-2.5
- euirim/goodwiki
- philschmid/flanv2
---

# Boreas

![BoreasThe Mighty God of the North Wind](https://oldworldgods.com/wp-content/uploads/2023/10/boreas1.jpg)

[Boreas-7B](https://huggingface.co/yhavinga/Boreas-7B) is een Nederlands/Engels taalmodel gebaseerd op Mistral-7B.
Het model is getraind op 10 miljard tokens aan Nederlandse en Engelse tekst.

**Boreas-7B-chat** (dit model) is een verdere finetune op instructie- en chat data.

* Boreas-7B vertoont overeenkomsten met [GEITje-7B](https://huggingface.co/Rijgersberg/GEITje-7B), aangezien beide
  modellen zijn voortgebouwd op het Mistral-7B basismodel en zijn getrained op een vergelijkbare omvang van
  10 miljard tokens.
* Boreas-7B-chat is vergelijkbaar met [GEITje-7B-chat](https://huggingface.co/Rijgersberg/GEITje-7B-chat) en [GEITJE-7B-ultra-sft](https://huggingface.co/BramVanroy/GEITje-7B-ultra-sft),
* omdat het ook een fine-tune is op een chat-dataset.

Edwin Rijgersberg heeft [uitgebreide documentatie](https://github.com/Rijgersberg/GEITje/blob/main/README.md) geschreven voor het gebruik van GEITje,
en deze is ook van toepassing op Boreas.

De voornaamste verschillen tussen Boreas en GEITje zijn:

* Boreas-7B en Boreas-7B-chat zijn getraind met een context lengte van 2048 tokens, terwijl GEITje is getraind met 8192 tokens.
* Boreas-7B en Boreas-7B-chat zijn getraind op een mix van Engels en Nederlands, waar GEITje alleen op voornamelijk Nederlands getraind is.
* Boreas-7B-chat is getraind op een mix van chatconversaties als ook 'normaal' pre-trainen.

Omdat zowel GEITje als Boreas afgeleiden zijn van hetzelfde basismodel, is het mogelijk om een [merge](https://github.com/arcee-ai/mergekit)
te maken.

## Gebruik met ollama

Kies een GGUF quant van [Boreas-7B-chat-v1-GGUF](https://huggingface.co/yhavinga/Boreas-7B-chat-v1-GGUF)
en volg de instructies daar.
Belangrijk: gebruik een system prompt, anders zijn de resultaten matig.

## Scandeval benchmark

Met dank aan [Bram Vanroy](https://huggingface.co/BramVanroy) en [Dan Saattrup Nielsen](https://github.com/saattrupdan)
is Boreas-7B-chat geevalueerd en geplaatst op het [Dutch NLG scandeval leaderboard](https://scandeval.com/dutch-nlg/).

![Dutch Model NLG](https://huggingface.co/yhavinga/Boreas-7B-chat/resolve/main/boreas-7b-dutch-scandeval.webp)

Plaatje gemaakt met de [Radial Plot Generator](https://huggingface.co/spaces/alexandrainst/radial-plot-generator)

## Doel Boreas

Het doel van Boreas is de ontwikkeling van een taalmodel dat, met betrekking tot het Nederlandse gedeelte,
niet getraind is op door LLMs gegenereerde teksten.
Dit omvat het vermijden van Nederlandse chats gegenereerd door een LLM en datasets die vertaals zijn uit het
Engels door een LLM.
Bij het finetunen van Boreas-chat zijn toch 3% van de tokens Nederlandse chats gegeneerd door een LLM.
Dit is een kleine dataset die gemaakt is op basis van Nederlandse bronteksten, en een steekproef heeft uitgewezen
dat deze data van goede kwaliteit is.

Het uiteindelijke chat model is getraind op een mix van voornamelijk:

1. Openhermes-2.5: grote, diverse Engelse chat dataset (~45%)
2. Een engels naar nederlands vertaal dataset (~34%)
3. Pre-train data: verder met Wiki en boeken (~12%)
4. Nederlandse wiki en boeken q en a (~3%)

Het Boreas model kan dus beschouwd worden als een test voor knowledge transfer van Engels naar Nederlands.

## Boreas-7B basismodel

Het basismodel is op Mistral-7B doorgetraind op 10 miljard tokens.

De dataset is samengesteld uit diverse bronnen in zowel de Nederlandse als de Engelse taal:

| Datasetnaam                                    | Aantal Tokens | Percentage Tokens (%) |
|------------------------------------------------|---------------|-----------------------|
| Nederlandse romans                             | 3401M         | 34.01                 |
| Nederlandse Wikipedia                          | 2381M         | 23.81                 |
| mc4_nl_cleaned (Nederlands)                    | 1361M         | 13.61                 |
| Nederlands nieuws                              | 1361M         | 13.61                 |
| Nederlandse schoolboeken                       | 136M          | 1.36                  |
| Engelse romans                                 | 340M          | 3.40                  |
| Engelse Wikipedia (euirim/goodwiki)            | 340M          | 3.40                  |
| Engelse wiskunde- en natuurkundeboeken         | 340M          | 3.40                  |
| Engelse instructiedataset (philschmid/flanv2) | 340M          | 3.40                  |

De keuze voor deze mix is gebaseerd op zowel beschikbaarheid van data als de volgende overwegingen:

* Een substantieel aandeel hoogwaardig Nederlands taalmateriaal, primair bestaande uit door mensen geproduceerde teksten.
  Dit leidde tot de inclusie van romans, Wikipedia-artikelen en journalistieke publicaties,
  terwijl user-generated content zoals forumberichten, sociale media-uitingen en juridische documenten werden uitgesloten.
* Integratie van ongeveer 5% van de oorspronkelijke dataset, teneinde de retentie van initi毛le kennis te waarborgen.
  Hoewel de exacte samenstelling van de Mistral-trainingsdata onbekend is, is het aannemelijk dat deze kwalitatief
  hoogwaardige Engelstalige content en instructiedata bevat.
  Derhalve is gekozen voor de toevoeging van circa 3% Engelstalige literatuur, Wikipedia-artikelen en instructiedata.
* Uitsluiten van door Large Language Models (LLMs) gegenereerde teksten in de pre-training fase.
  Bij diverse Nederlandse datasets, valt de inferieure kwaliteit van vertalingen of gegenereerde teksten op.
  Daarom is geopteerd voor datasets waarvan de brongegevens dateren van v贸贸r het ChatGPT-tijdperk (i.e., v贸贸r november 2022).
* Inclusie van mc4_nl_cleaned - afgeleid van mC4, een geduplificeerde versie van Common Crawl data,
  gefilterd op ongewenste terminologie en onderworpen aan additionele bewerkingen conform het voorschrift van de T5-auteurs
  voor de Engelstalige C4 dataset. Gezien de goede prestaties van C4 in diverse vergelijkende analyses als pre-training dataset,
  is mc4_nl_cleaned ge茂ncorporeerd in dit model.

In de pre-training fase zijn de brontexten gepackt in blokken van 2048 tokens. Hierbij is, waar mogelijk, gestreefd naar
samenvoeging van coherente tekstfragmenten. Korte fragmenten zijn overgeslagen, om te voorkomen dat een voorbeeld
begint met een paar tokens van het einde van een wikipedia artikel, gevolgd door een ander artikel.
Deze methodologie is gehanteerd om 'cross-sequence' ruis binnen individuele voorbeelden te minimaliseren.
De randomisatie van de voorbeelden is pas na deze aggregatie ge茂mplementeerd.


## Pre-training

Boreas-7B is pre-getraind met het [EasyDeL JAX framework](https://github.com/erfanzar/EasyDel) op een TPU-v4-32 op
de Google TPU Research Cloud. De pre-training specificaties zijn als volgt:

* Batch size 96, gradient accumulation steps 2
* Using flash attention, block size of 512
* Max sequence length of 2048
* LION optimizer, triangle learning rate schedule with max lr 3e-6, gradient clipping to 1.0

![img_3.png](images/img_3.png)

![img_4.png](images/img_4.png)

![img_5.png](images/img_5.png)

<!-- [https://wandb.ai/yepster/EasyDeL-MistralBoreas/runs/ozw55qaq/workspace?nw=nwuseryepster](WandB Boreas 7B pre-train) -->


## Boreas-7B-chat

Het chat LLM model is net als het basismodel getraind op een mix van datasets, met een grootte van 4.7B tokens.
Het is een full finetune, dus geen LoRA finetune.

De volgende datasets zijn gemixt:

| Datasetnaam                                               | Gewicht | Percentage Tokens (%) |
|-----------------------------------------------------------|---------|-----------------------|
| (C) Diverse Engelse chat dataset (teknium/OpenHermes-2.5) | 200     | 45.15                 |
| (C) Vertaal en->nl paragrafen (romans)                    | 100     | 22.57                 |
| (C) Vertaal en->nl zinnen (romans)                        | 50      | 11.29                 |
| (P) Nederlandse wikipedia                                 | 30      | 6.77                  |
| (P) Engelse wiskunde en natuurkunde boeken                | 25      | 5.64                  |
| (C) Engelse instruct dataset (philschmid/flanv2)          | 20      | 4.51                  |
| (C) Nederlandse wiki q en a                               | 12      | 2.71                  |
| (C) Nederlandse schoolboeken q en a                       | 3       | 0.68                  |
| (P) Nederlandse schoolboeken                              | 2       | 0.45                  |
| (C) Vertaal en->nl uitdrukkingen (dictionary)             | 1       | 0.23                  |

(C) geeft aan dat de tekst geformatteerd is voor chat, (P) is ongeformatteerde tekst (gelijk aan de pre-train fase)

Het grootste gedeelte bestaat uit `teknium/OpenHermes-2.5` - wat op zichzelf ook weer een mengelmoes van diverse
gefilterde chat/instruct datasets is. Deze dataset bevat wel programmacode data, wat ertoe resulteert dat Boreas-7B-chat
wel in staat is om simpele programmavragen te beantwoorden.

De reden om zoveel Engels in de dataset te mixen, is met name om de diversiteit in de dataset zo hoog mogelijk te
krijgen, en omdat ik verwacht dat er een behoorlijke mate van cross language en naar nl knowledge transfer mogelijk is.
Het omgekeerde is zeker waar: als een fine-tune dataset niet divers is, zal het model door zijn fine-tuning niet in
staat zijn om zijn originele kunde uit te voeren. Een van de eerste Mistral finetunes die ik gemaakt heb was gefinetuned
op alleen en->nl vertalen. Dat model kon uiteindelijk niets anders meer dan vertalen naar Nederlands.

In tegenstelling tot het basismodel is het chat model _wel_ getrained op LLM-gegenereerde teksten - hierbij zijn de volgende
overwegingen van toepassing: Bij de Nederlandse gegenereerde chats heb ik wederom geprobeerd om zoveel mogelijk origineel
Nederlands taalgebruik te 'guiden' door alleen vragen en antwoorden te genereren op basis van teksten die origineel in
het Nederlands geschreven zijn door een persoon. Dit zijn de Nederlandse wiki q en a en Nederlandse schoolboeken q en a
chat datasets. Hierdoor wordt er zoveel mogelijk voor gezorgd dat bij bijvoorbeeld educatie-achtige q en a, de in onze
regio gebruikelijke termen en eenheden voorkomen in de chat database, tenminste voor de Nederlandstalige chats.

Bij alle chat datasets is er alleen getraind op de assistant-completion tokens.

## Fine-tuning

* Boreas was fine-tuned with the [EasyDeL JAX framework](https://github.com/erfanzar/EasyDel) on a tpu-v4-32
kindly supplied by the Google [TPU Research Cloud](https://sites.research.google/trc/about/).
* Batch size 96, gradient accumulation 2,
* Using flash attention, block size of 512
* Max sequence length of 2048
* LION optimizer, triangle learning rate schedule with max lr 2e-6, gradient clipping to 1.0 (NB: the schedule was not finished due to an error at the end of the dataset epoch. Since the loss had plateaued I decided then to not resume for another epoch)
  

![loss finetune](images/loss_finetune.png)

![accuracy finetune](images/accuracy_finetune.png)

![learning rate finetune](images/lr_finetune.png)

<!-- [https://wandb.ai/yepster/EasyDeL-MistralBoreas/runs/ynkl2jtx?nw=nwuseryepster](WandB Boreas 7B chat finetune) -->