Amplified Access logoHomeDesign and development by Asiimwe Grace Noble

Our Models

Explore our state of the art language models fine tuned for African languages, built for efficiency, cultural relevance, and world deployment. Unlock AI solutions that better understand local languages, context, and communities.

Luganda-gemma-1B-it

Fine-tuned Gemma 3 1B Instruct for English ↔ Luganda Translation

Overview

A fine-tuned version of Google Gemma 3 1B Instruct for English ↔ Luganda translation and Luganda conversational AI. Trained with QLoRA (4-bit quantization + LoRA adapters) — runs on consumer GPUs. Only 52 MB adapter on top of the 1B base model, trained primarily on the Sunbird SALT parallel corpus covering agriculture, health, and society topics.

Performance metrics

13.85

BLEU score

46.59

chrF++ score

13.05M

Trainable parameters

256 tokens

Context length

Capabilities

  • English-to-Luganda translation
  • Luganda-to-English translation
  • Luganda conversational AI
  • Educational tools for Luganda language learning
  • Low-resource African language NLP research

Key achievements

  • BLEU 13.85 on English→Luganda translation, up from 0.06 on the base model
  • chrF++ 46.59 — strong character-level accuracy for morphologically rich Luganda
  • Only 52 MB adapter on top of the 1B base model
  • Runs on consumer GPUs with QLoRA (4-bit quantization + LoRA adapters)

Usage example

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
import torch

base_model_id = "google/gemma-3-1b-it"
adapter_id = "AmplifiedAccess/Luganda-gemma-1b-it"

tokenizer = AutoTokenizer.from_pretrained(base_model_id)

model = AutoModelForCausalLM.from_pretrained(
    base_model_id,
    quantization_config=BitsAndBytesConfig(
        load_in_4bit=True,
        bnb_4bit_quant_type="nf4",
        bnb_4bit_compute_dtype=torch.bfloat16,
    ),
    device_map={"": 0},
)
model = PeftModel.from_pretrained(model, adapter_id)
model.eval()

# Translate civic content English → Luganda
prompt = "Translate to Luganda:\nA community officer can help residents complete forms, check eligibility, and even process applications offline."
messages = [{"role": "user", "content": prompt}]
inputs = tokenizer.apply_chat_template(
    messages, return_tensors="pt", return_dict=True, add_generation_prompt=True
).to(model.device)

with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=128, do_sample=False)

prompt_len = inputs["input_ids"].shape[1]
response = tokenizer.decode(outputs[0][prompt_len:], skip_special_tokens=True).strip()
print(response)