1from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
2
3# Load model and tokenizer (MUST be from same checkpoint!)
4tokenizer = AutoTokenizer.from_pretrained("kikwaib/mt5-base-kenswquad-abstractive")
5model = AutoModelForSeq2SeqLM.from_pretrained("kikwaib/mt5-base-kenswquad-abstractive")
6
7# Simple question answering
8question = "Nani aliandika kitabu hiki?"
9context = "Kitabu hiki kiliandikwa na Ngugi wa Thiong'o. Kilitolewa mwaka 1967."
10
11input_text = f"question: {question} context: {context}"
12inputs = tokenizer(input_text, return_tensors="pt", max_length=1024, truncation=True)
13outputs = model.generate(**inputs, max_length=128)
14answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
15print(answer) # "Ngugi wa Thiong'o"
1from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
2
3tokenizer = AutoTokenizer.from_pretrained("kikwaib/mt5-base-kenswquad-abstractive")
4model = AutoModelForSeq2SeqLM.from_pretrained("kikwaib/mt5-base-kenswquad-abstractive")
5
6# Apply scaffolding with <p1>, <p2>, ... tokens
7question = "Nani aliandika kitabu hiki?"
8context = "<p1> Kitabu hiki kiliandikwa na Ngugi wa Thiong'o. <p2> Kilitolewa mwaka 1967."
9
10# Add pointer hint if you know which paragraph contains the answer
11input_text = f"question: {question} context: {context} <pointer> <p1>"
12
13inputs = tokenizer(input_text, return_tensors="pt", max_length=1024, truncation=True)
14outputs = model.generate(**inputs, max_length=128)
15answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
16print(answer) # "Ngugi wa Thiong'o"
1import re
2
3def apply_scaffolding(context, question, paragraph_pointer=None):
4 """
5 Transform raw context into scaffolded format with anchor tokens.
6
7 Args:
8 context: Raw text (paragraphs separated by newlines)
9 question: The question to answer
10 paragraph_pointer: Optional paragraph number (1-indexed) containing the answer
11
12 Returns:
13 Scaffolded input string
14 """
15 # Split into paragraphs
16 paragraphs = [p.strip() for p in re.split(r'\n+', context) if p.strip()]
17
18 # Add anchor tokens
19 scaffolded = ""
20 for i, para in enumerate(paragraphs):
21 p_num = i + 1
22 if p_num < 50:
23 scaffolded += f"<p{p_num}> {para} "
24 else:
25 scaffolded += f"{para} "
26
27 # Add pointer hint
28 hint = ""
29 if paragraph_pointer and 1 <= int(paragraph_pointer) < 50:
30 hint = f" <pointer> <p{paragraph_pointer}>"
31
32 return f"question: {question} context: {scaffolded}{hint}"
33
34# Usage
35input_text = apply_scaffolding(
36 context="First paragraph.\nSecond paragraph with answer.",
37 question="What is in the second paragraph?",
38 paragraph_pointer=2
39)
1from transformers import pipeline
2
3qa_pipeline = pipeline(
4 "question-answering",
5 model="kikwaib/mt5-base-kenswquad-abstractive",
6 tokenizer="kikwaib/mt5-base-kenswquad-abstractive"
7)
8
9result = qa_pipeline("question: Nani aliandika kitabu? context: <p1> Ngugi aliandika kitabu hiki.")
10print(result[0]['generated_text'])
Context Scaffolding is a technique that structures input text with special anchor tokens:
1@misc{mt5-kenswquad-abstractive,
2 author = {Kikwai, B.},
3 title = {mT5-base-KenSwQuAD-Abstractive: Hierarchical Curriculum Learning for Swahili QA},
4 year = {2025},
5 publisher = {Hugging Face},
6 url = {https://huggingface.co/kikwaib/mt5-base-kenswquad-abstractive}
7}