|
--- |
|
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 van Roy](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) --> |
|
|