normcqgen-model / README.md
solarmar's picture
Upload LoRA adapter for Norwegian MCQ generation
cc02ff9 verified
---
base_model: openai/gpt-oss-20b
library_name: peft
tags:
- lora
- sft
- text-generation
- norwegian
- quiz-generation
- mcq
- trl
license: apache-2.0
datasets:
- solarmar/normcqgen-thinking
language:
- "no"
pipeline_tag: text-generation
---
# NormCQGen Model - Norwegian MCQ Generator
This is a LoRA adapter fine-tuned on [openai/gpt-oss-20b](https://huggingface.co/openai/gpt-oss-20b) for generating Norwegian multiple-choice questions (MCQ). The model was trained using supervised fine-tuning (SFT) with the TRL library on the [normcqgen-thinking](https://huggingface.co/datasets/solarmar/normcqgen-thinking) dataset.
## Model Details
### Model Description
This LoRA adapter specializes in generating high-quality Norwegian multiple-choice questions suitable for educational assessments and quiz creation. The adapter applies selective fine-tuning to attention projection layers and Mixture-of-Experts (MoE) layers of the base model.
- **Developed by**: solarmar
- **Model type**: LoRA adapter for causal language modeling
- **Language**: Norwegian (Bokmål)
- **License**: Apache 2.0 (same as base model)
- **Fine-tuned from**: [openai/gpt-oss-20b](https://huggingface.co/openai/gpt-oss-20b)
- **Adapter size**: 143 MB
### Model Architecture
**LoRA Configuration:**
- **Rank (r)**: 16
- **Alpha**: 16
- **Dropout**: 0.05 (training), 0.0 (inference)
- **Target Modules**:
- Attention projections: `q_proj`, `k_proj`, `v_proj`, `o_proj`
- **Target Parameters** (MoE expert layers):
- Layer 15: `mlp.experts.gate_up_proj`, `mlp.experts.down_proj`
- Layer 19: `mlp.experts.gate_up_proj`, `mlp.experts.down_proj`
- Layer 21: `mlp.experts.gate_up_proj`, `mlp.experts.down_proj`
- Layer 23: `mlp.experts.gate_up_proj`, `mlp.experts.down_proj`
## Intended Uses
### Direct Use
This model is designed to generate Norwegian multiple-choice questions for:
- Educational assessments
- Quiz creation
- Learning materials development
- Knowledge evaluation tasks
### Out-of-Scope Use
- Generating content in languages other than Norwegian
- Non-MCQ text generation tasks
- Critical decision-making without human review
- Tasks requiring up-to-date factual information (model knowledge cutoff applies)
## How to Use
### Using PEFT (Recommended)
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Load base model and tokenizer
base_model = AutoModelForCausalLM.from_pretrained(
"openai/gpt-oss-20b",
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained("openai/gpt-oss-20b")
# Load LoRA adapter
model = PeftModel.from_pretrained(base_model, "solarmar/normcqgen-model")
# Prepare input
messages = [{"role": "user", "content": "Generer et flervalgsspørsmål om fotosyntese."}]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
# Generate
outputs = model.generate(inputs, max_new_tokens=512, temperature=0.7, do_sample=True)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)
```
### Using AutoPeftModel
```python
from transformers import AutoTokenizer
from peft import AutoPeftModelForCausalLM
# Load model with adapter
model = AutoPeftModelForCausalLM.from_pretrained(
"solarmar/normcqgen-model",
device_map="auto",
torch_dtype="auto"
)
tokenizer = AutoTokenizer.from_pretrained("solarmar/normcqgen-model")
# Generate
messages = [{"role": "user", "content": "Lag et spørsmål om norsk historie."}]
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt").to(model.device)
outputs = model.generate(inputs, max_new_tokens=512)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```
## Training Details
### Training Data
The model was fine-tuned on [solarmar/normcqgen-thinking](https://huggingface.co/datasets/solarmar/normcqgen-thinking), a dataset of Norwegian multiple-choice questions with reasoning traces.
### Training Procedure
**Training Hyperparameters:**
- **Training method**: Supervised Fine-Tuning (SFT)
- **Number of epochs**: 2
- **Per-device train batch size**: 32
- **Per-device eval batch size**: 32
- **Gradient accumulation steps**: 4
- **Effective batch size**: 128 (32 × 4)
- **Learning rate**: 2e-4
- **Weight decay**: 0.01
- **Warmup ratio**: 0.03
- **Max sequence length**: 1024 tokens
- **Logging steps**: 5
- **Evaluation steps**: 10
- **Save steps**: 10
**LoRA Hyperparameters:**
- **LoRA rank (r)**: 16
- **LoRA alpha**: 16
- **LoRA dropout**: 0.05
- **Target modules**: All attention projections (q, k, v, o)
- **Target parameters**: MoE expert layers at positions 15, 19, 21, 23
### Training Results
| Metric | Value |
|--------|-------|
| Evaluation Loss | 0.736 |
| Mean Token Accuracy | 83.17% |
| Evaluation Entropy | 0.748 |
| Total Tokens Evaluated | 5,101,372 |
| Training Epochs | 2.0 |
The model achieved strong performance with 83.17% token-level accuracy while maintaining reasonable diversity in predictions (entropy: 0.748).
## Framework Versions
- **PEFT**: 0.18.0
- **TRL**: 0.25.1
- **Transformers**: 4.57.1
- **PyTorch**: 2.5.1+cu121
- **Datasets**: 4.4.1
- **Tokenizers**: 0.22.1
## Limitations and Bias
- The model is specialized for Norwegian language and may not perform well in other languages
- Performance depends on the quality and coverage of the training dataset
- May reflect biases present in the training data
- Generated questions should be reviewed by educators before use in formal assessments
- The model's knowledge is limited to the base model's training data cutoff
## Citation
If you use this model, please cite:
```bibtex
@misc{normcqgen2024,
author = {solarmar},
title = {NormCQGen: Norwegian MCQ Generation Model},
year = {2024},
publisher = {HuggingFace},
howpublished = {\url{https://huggingface.co/solarmar/normcqgen-model}}
}
```
### TRL Citation
This model was trained using TRL (Transformer Reinforcement Learning):
```bibtex
@misc{vonwerra2022trl,
title = {{TRL: Transformer Reinforcement Learning}},
author = {Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallou{\'e}dec},
year = 2020,
journal = {GitHub repository},
publisher = {GitHub},
howpublished = {\url{https://github.com/huggingface/trl}}
}
```
## Acknowledgments
- Base model: [openai/gpt-oss-20b](https://huggingface.co/openai/gpt-oss-20b)
- Training framework: [TRL](https://github.com/huggingface/trl)
- PEFT library: [Hugging Face PEFT](https://github.com/huggingface/peft)