|
--- |
|
library_name: transformers |
|
license: apache-2.0 |
|
tags: |
|
- finnish |
|
- llama |
|
inference: true |
|
pipeline_tag: text-generation |
|
base_model: Finnish-NLP/llama-7b-finnish-instruct-v0.1 |
|
--- |
|
This is an ExLlamaV2 quantized model in 4bpw of [Finnish-NLP/llama-7b-finnish-instruct-v0.1](https://huggingface.co/Finnish-NLP/llama-7b-finnish-instruct-v0.1) using the default calibration dataset. |
|
|
|
Prompt format is custom (it seems to be kinda broken): |
|
|
|
``` |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset. |
|
<|ihminen|> Kysymys/Tehtävä: |
|
{} |
|
<|avustaja|> Vastauksesi: |
|
<|loppu|> |
|
``` |
|
|
|
# Original Model card: |
|
|
|
# Llama-7b-instruct-v0.1 for Finnish |
|
|
|
|
|
- This is an early v0.1 version release of our Instruct finetuned model from https://huggingface.co/Finnish-NLP/llama-7b-finnish |
|
- Model was trained for 2 epochs using 11014 samples and for this release we chose checkpoint at 2500/4048 steps. |
|
- Future DPO/SFT+DPO variants are in the pipeline. |
|
|
|
For finetuning we used mix of the following datasets: |
|
- LIMA from https://github.com/TurkuNLP/finnish-instructions |
|
- Dolly from https://github.com/TurkuNLP/finnish-instructions |
|
- OASST from https://github.com/TurkuNLP/finnish-instructions |
|
- Heavily filtered version of Ultrachat https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized/viewer/default/train_sft + deepl translations by writing |
|
samples to file and uploading to deepl.com to filetranslation and then parsinig the translated files back to samples |
|
|
|
|
|
|
|
### How to use |
|
|
|
Here is an example of using this model with Unsloth with some generation arguments you can modify: |
|
|
|
```python |
|
import torch |
|
from unsloth import FastLlamaModel |
|
|
|
max_seq_length = 2048 |
|
dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+ |
|
load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False. |
|
|
|
|
|
use_unsloth = True |
|
# use_transformers = True |
|
|
|
# LOADING MODEL USIINIG TRANSFORMERS assumes at least 16GB of memory. Tested with this configuration |
|
# If you have less memory use load_in_4bit or load_in_8_bit as needed |
|
if use_transformers: |
|
major_version, minor_version = torch.cuda.get_device_capability() |
|
model = AutoModelForCausalLM.from_pretrained("Finnish-NLP/llama-7b-finnish-instruct-v0.1", device_map='cuda:0', torch_dtype = torch.bfloat16 if major_version >=8 else torch.float16) |
|
tokenizer = AutoTokenizer.from_pretrained("Finnish-NLP/llama-7b-finnish-instruct-v0.1") |
|
|
|
# USING UNSLOTH, tested with load_in_4bit |
|
if use_unsloth: |
|
model, tokenizer = FastLlamaModel.from_pretrained( |
|
model_name = "Finnish-NLP/llama-7b-finnish-instruct-v0.1" |
|
max_seq_length = max_seq_length, |
|
dtype = dtype, |
|
load_in_4bit = load_in_4bit |
|
) |
|
|
|
alpaca_prompt = """<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset. |
|
<|ihminen|> Kysymys/Tehtävä: |
|
{} |
|
<|avustaja|> Vastauksesi: |
|
""" |
|
|
|
sample_questions = ["Ketkä ovat Aku Ankan luona asuvat kolme ankanpoikaa?",\ |
|
"Mikä on Suomen korkein tunturi?",\ |
|
"Suomi soti Neuvostoliittoa vastaan talvisodan 1939-1940. Kuinka monta päivää sota kesti?",\ |
|
"Luettele viisi yleistä Suomessa yleisesti käytettyä pojan nimeä. Nimet:",\ |
|
"Luettele lyhyt, maksimissaan 50 sanan mittainen runo Suomesta. Runo:",\ |
|
] |
|
|
|
from transformers import GenerationConfig |
|
|
|
generation_config = GenerationConfig( |
|
pad_token_id=tokenizer.eos_token_id, |
|
eos_token_id=tokenizer.convert_tokens_to_ids("<|loppu|>"), |
|
) |
|
|
|
|
|
for sample_question in sample_questions: |
|
|
|
model.eval() |
|
|
|
inputs = tokenizer( |
|
[ |
|
alpaca_prompt.format( |
|
sample_question, # instruction |
|
) |
|
]*1, return_tensors = "pt").to("cuda") |
|
|
|
with torch.no_grad(): |
|
generated_ids = model.generate( |
|
input_ids=inputs["input_ids"], |
|
attention_mask=inputs["attention_mask"], |
|
generation_config=generation_config, **{ |
|
"temperature": 0.1, |
|
"penalty_alpha": 0.6, |
|
"top_k": 3, |
|
"do_sample": True, |
|
"repetition_penalty": 1.28, |
|
"min_length": 10, |
|
"max_new_tokens": 200 |
|
}) |
|
|
|
generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)[0] |
|
print(len(generated_ids[0])) |
|
print("KYSYMYS:") |
|
print(generated_text.split('<|avustaja|>')[0]) |
|
print("VASTAUS:") |
|
print(generated_text.split('<|avustaja|> Vastauksesi:')[1]) |
|
print('##################################') |
|
|
|
''' |
|
--> |
|
79 |
|
KYSYMYS: |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset.<|ihminen|> Kysymys/Tehtävä: Aku Ankan luona asuu kolme ankanpoikaa. He ovat nimeltään: |
|
VASTAUS: |
|
Ankkalinnan asukkaat ovat Aku Ankka, hänen vaimonsa Iines ja heidän lapsensa Tupu, Hupu ja Lupu |
|
################################## |
|
65 |
|
KYSYMYS: |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset.<|ihminen|> Kysymys/Tehtävä: Mikä on Suomen korkein tunturi? |
|
VASTAUS: |
|
Suomen korkeimmat tunturit ovat Halti (1 324 metriä) ja Saana (1 029 metriä). |
|
################################## |
|
80 |
|
KYSYMYS: |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset.<|ihminen|> Kysymys/Tehtävä: Suomi soti Neuvostoliittoa vastaan talvisodan 1939-1940. Kuinka monta päivää sota kesti? |
|
VASTAUS: |
|
Talvisodan aikana Neuvostoliitto hyökkäsi Suomeen 30. marraskuuta ja 13. maaliskuuta välisenä aikana. Tämä oli lyhyt sota, joka kesti 105 päivää. |
|
################################## |
|
87 |
|
KYSYMYS: |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset.<|ihminen|> Kysymys/Tehtävä: Luettele viisi yleistä Suomessa yleisesti käytettyä pojan nimeä. Nimet: |
|
VASTAUS: |
|
Suomessa on monia yleisiä poikien nimiä, mutta tässä on muutamia suosittuja: 1. Eemeli 2 Onni 3 Eino 4 Väinö 5 Artturi |
|
################################## |
|
63 |
|
KYSYMYS: |
|
<|alku|> Olet tekoälyavustaja. Seuraavaksi saat kysymyksen tai tehtävän. Kirjoita vastaus parhaasi mukaan siten että se täyttää kysymyksen tai tehtävän vaatimukset.<|ihminen|> Kysymys/Tehtävä: Luettele lyhyt, maksimissaan 50 sanan mittainen runo Suomesta. Runo: |
|
VASTAUS: |
|
Suomen talvi on kylmä, kesä on lyhyt, mutta luonto on kaunis. |
|
''' |
|
|
|
``` |
|
|
|
### Limitations and bias |
|
|
|
The training data used for this model contains a lot of content from the internet, which is far from neutral. |
|
Therefore, the model can have biased predictions. This bias will also affect all fine-tuned versions of this model. |
|
To reduce toxic content, the pretrained version of thiis model was trained with dataset filtered with a toxicity classifier but it cannot truly eliminate all toxic text. |
|
|
|
### Finetuning |
|
|
|
Training was conducted on RTX 4080 using Unsloth framework https://github.com/unslothai/unsloth \ |
|
Training script is available in this repo. |
|
|
|
|
|
## Evaluation results |
|
|
|
This model was evaluated using [FIN-bench by TurkuNLP](https://github.com/TurkuNLP/FIN-bench) with zero-shot setting, but \ |
|
the evaluation script had some problems running succesfully, so the results reported below should perhaps be viewed with some caution. |
|
|
|
[llama-7b-finnish-instruct-v0.1](https://huggingface.co/Finnish-NLP/llama-7b-finnish-instruct-v0.1): |
|
|
|
| Task |Version| Metric |Value | |Stderr| |
|
|------------------------------------------------|------:|---------------------|-----:|---|-----:| |
|
|bigbench_analogies | 0|multiple_choice_grade|0.5000|± |0.0440| |
|
|bigbench_arithmetic_1_digit_addition | 0|multiple_choice_grade|0.4800|± |0.0502| |
|
|bigbench_arithmetic_1_digit_division | 0|multiple_choice_grade|0.5652|± |0.1057| |
|
|bigbench_arithmetic_1_digit_multiplication | 0|multiple_choice_grade|0.5000|± |0.0503| |
|
|bigbench_arithmetic_1_digit_subtraction | 0|multiple_choice_grade|0.6700|± |0.0473| |
|
|bigbench_arithmetic_2_digit_addition | 0|multiple_choice_grade|0.4000|± |0.0492| |
|
|bigbench_arithmetic_2_digit_division | 0|multiple_choice_grade|0.5400|± |0.0501| |
|
|bigbench_arithmetic_2_digit_multiplication | 0|multiple_choice_grade|0.2700|± |0.0446| |
|
|bigbench_arithmetic_2_digit_subtraction | 0|multiple_choice_grade|0.4800|± |0.0502| |
|
|bigbench_arithmetic_3_digit_addition | 0|multiple_choice_grade|0.4100|± |0.0494| |
|
|bigbench_arithmetic_3_digit_division | 0|multiple_choice_grade|0.2800|± |0.0451| |
|
|bigbench_arithmetic_3_digit_multiplication | 0|multiple_choice_grade|0.2600|± |0.0441| |
|
|bigbench_arithmetic_3_digit_subtraction | 0|multiple_choice_grade|0.5300|± |0.0502| |
|
|bigbench_arithmetic_4_digit_addition | 0|multiple_choice_grade|0.3400|± |0.0476| |
|
|bigbench_arithmetic_4_digit_division | 0|multiple_choice_grade|0.3300|± |0.0473| |
|
|bigbench_arithmetic_4_digit_multiplication | 0|multiple_choice_grade|0.2100|± |0.0409| |
|
|bigbench_arithmetic_4_digit_subtraction | 0|multiple_choice_grade|0.6000|± |0.0492| |
|
|bigbench_arithmetic_5_digit_addition | 0|multiple_choice_grade|0.5600|± |0.0499| |
|
|bigbench_arithmetic_5_digit_division | 0|multiple_choice_grade|0.2300|± |0.0423| |
|
|bigbench_arithmetic_5_digit_multiplication | 0|multiple_choice_grade|0.2500|± |0.0435| |
|
|bigbench_arithmetic_5_digit_subtraction | 0|multiple_choice_grade|0.5600|± |0.0499| |
|
|bigbench_cause_and_effect_one_sentence | 0|multiple_choice_grade|0.4902|± |0.0707| |
|
|bigbench_cause_and_effect_one_sentence_no_prompt| 0|multiple_choice_grade|0.9020|± |0.0421| |
|
|bigbench_cause_and_effect_two_sentences | 0|multiple_choice_grade|0.3922|± |0.0690| |
|
|bigbench_emotions | 0|multiple_choice_grade|0.2313|± |0.0334| |
|
|bigbench_empirical_judgments | 0|multiple_choice_grade|0.3535|± |0.0483| |
|
|bigbench_general_knowledge | 0|multiple_choice_grade|0.3857|± |0.0586| |
|
|bigbench_hhh_alignment_harmless | 0|multiple_choice_grade|0.3966|± |0.0648| |
|
|bigbench_hhh_alignment_helpful | 0|multiple_choice_grade|0.3220|± |0.0614| |
|
|bigbench_hhh_alignment_honest | 0|multiple_choice_grade|0.3898|± |0.0640| |
|
|bigbench_hhh_alignment_other | 0|multiple_choice_grade|0.5814|± |0.0761| |
|
|bigbench_intent_recognition | 0|multiple_choice_grade|0.2211|± |0.0158| |
|
|bigbench_misconceptions | 0|multiple_choice_grade|0.5149|± |0.0433| |
|
|bigbench_paraphrase | 0|multiple_choice_grade|0.5400|± |0.0353| |
|
|bigbench_sentence_ambiguity | 0|multiple_choice_grade|0.4500|± |0.0648| |
|
|bigbench_similarities_abstraction | 0|multiple_choice_grade|0.5789|± |0.0570| |
|
|
|
|
|
|
|
## Team Members |
|
|
|
- Aapo Tanskanen, [Hugging Face profile](https://huggingface.co/aapot), [LinkedIn profile](https://www.linkedin.com/in/aapotanskanen/) |
|
- Rasmus Toivanen, [Hugging Face profile](https://huggingface.co/RASMUS), [LinkedIn profile](https://www.linkedin.com/in/rasmustoivanen/) |
|
|
|
Feel free to contact us for more details 🤗 |