metadata
license: apache-2.0
datasets:
- Fu01978/ao3_chat
language:
- en
base_model:
- HuggingFaceTB/SmolLM2-135M-Instruct
pipeline_tag: text-generation
library_name: transformers
tags:
- creative-writing
- roleplay
- smollm
- ao3
SmolLM2-135M-Instruct-AO3
This model is a fine-tuned version of HuggingFaceTB/SmolLM2-135M-Instruct trained on the Fu01978/ao3_chat dataset.
It is designed to blend the instruction-following capabilities of SmolLM2 with the descriptive, narrative, and atmospheric prose styles commonly found in creative writing communities.
Model Description
- Model type: Causal Language Model (Fine-tuned)
- Language(s) (NLP): English
- License: Apache 2.0
- Finetuned from model: HuggingFaceTB/SmolLM2-135M-Instruct
Training Details
The model was fine-tuned for a short duration to "infuse" the base model with narrative flair without completely overwriting its general knowledge.
Training Hyperparameters
- Steps: 75
- Learning Rate: 5e-4
- Batch Size: 8
- Gradient Accumulation Steps: 2
- LR Scheduler Type: linear
- Precision: FP32 (Full Precision)
Loss Curve
The model showed a rapid descent in the first 20 steps, eventually stabilizing around a loss of 2.5-2.6.
| Step | Training Loss |
|---|---|
| 5 | 3.572342 |
| 15 | 2.720610 |
| 30 | 2.497861 |
| 45 | 2.626326 |
| 60 | 2.708193 |
| 75 | 2.637797 |
Usage
This model uses the ChatML template. It is recommended to use the apply_chat_template method for best results.
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Fu01978/SmolLM2-135M-Instruct-AO3"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32, device_map="auto")
messages = [
{"role": "system", "content": "You are a creative writing assistant."},
{"role": "user", "content": "Write a scene about a rainy library."},
]
inputs = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=150, do_sample=True, temperature=0.7)
print(tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True))
Intended Use & Limitations
- Roleplay & Fiction: Best suited for creative prompts and stylistic prose.
- Domain Shift: While it retains general knowledge, its explanations (e.g., science) may adopt a more narrative or "story-like" tone.