Instructions to use aksw/text2sparql-S with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use aksw/text2sparql-S with Transformers:
# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("aksw/text2sparql-S", dtype="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- Unsloth Studio
How to use aksw/text2sparql-S with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for aksw/text2sparql-S to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for aksw/text2sparql-S to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for aksw/text2sparql-S to start chatting
Load model with FastModel
pip install unsloth from unsloth import FastModel model, tokenizer = FastModel.from_pretrained( model_name="aksw/text2sparql-S", max_seq_length=2048, )
metadata
base_model: unsloth/qwen2.5-7b-instruct-bnb-4bit
tags:
- text-generation-inference
- transformers
- unsloth
- qwen2
- trl
license: apache-2.0
language:
- en
Uploaded model
- Developed by: Marcos Gôlo
- License: apache-2.0
- Finetuned from model : unsloth/qwen2.5-7b-instruct-bnb-4bit
This qwen2 model was trained 2x faster with Unsloth and Huggingface's TRL library.
📄 Model Card: aksw/text2sparql-S
🧠 Model Overview
text2sparql-S is a Small fine-tuned language model designed to translate natural language questions into SPARQL queries, specifically targeting the DBpedia knowledge graph (2014 version). It is ideal for knowledge-based QA systems and symbolic reasoning agents.
🔍 Intended Use
- Input: Natural language questions (e.g., "Which actors were born in Germany?")
- Output: A single string containing the corresponding SPARQL query.
🧩 Applications
- Question Answering systems over open knowledge bases (DBpedia)
- Semantic conversational agents
- Knowledge graph exploration tools
- Autonomous agents with symbolic reasoning capabilities
⚙️ Model Details
- Base model: Qwen2.5 7B (via Unsloth)
- Training: Dataset with 15.000 question-query examples built by joining 4 datasets:
- QLAD-1
- LCQUAD-1
- ParaQA
- Question-Sparql
- Target Ontology: DBpedia Ontology (2014)
- Frameworks: Unsloth, HuggingFace, Transformers
📦 Installation
Make sure to install unsloth, torch and CUDA dependencies:
pip install unsloth torch
🧪 Example: Inference Code
from unsloth import FastLanguageModel
import torch
class SPARQLQueryGenerator:
def __init__(self, model_name: str, max_seq_length: int = 2048, load_in_4bit: bool = True):
self.model, self.tokenizer = FastLanguageModel.from_pretrained(
model_name=model_name,
max_seq_length=max_seq_length,
load_in_4bit=load_in_4bit
)
_ = FastLanguageModel.for_inference(self.model)
def build_prompt(self, question: str) -> list:
return [
{"role": "system", "content": (
"You are an expert data analyst with deep knowledge of SPARQL and the DBpedia ontology.\n"
"Your task is to convert a given natural language question into a syntactically correct DBpedia SPARQL query "
"that accurately retrieves the answer.\n"
"Your output must be a single string containing only the SPARQL query—no additional text, explanation, or commentary.\n"
"Ensure that you use the appropriate DBpedia prefixes and follow standard SPARQL syntax."
)},
{"role": "user", "content": question}
]
def generate_query(self, question: str, temperature: float = 0.01, max_new_tokens: int = 1024) -> str:
messages = self.build_prompt(question)
inputs = self.tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt"
).to("cuda")
outputs = self.model.generate(
input_ids=inputs,
max_new_tokens=max_new_tokens,
use_cache=True,
temperature=temperature,
min_p=0.1
)
decoded = self.tokenizer.batch_decode(outputs)[0]
return self._extract_sparql(decoded)
def _extract_sparql(self, decoded_text: str) -> str:
start_token = "<|im_start|>assistant\n"
end_token = "<|im_end|>"
start_index = decoded_text.find(start_token) + len(start_token)
sparql = decoded_text[start_index:]
return sparql.rstrip(end_token) if sparql.endswith(end_token) else sparql
# --- Using the model ---
if __name__ == "__main__":
generator = SPARQLQueryGenerator(model_name="aksw/text2sparql-S")
question = "Which actors were born in Germany?"
query = generator.generate_query(question)
print(query)
🧠 Example Input / Output
Input:
Which actors were born in Germany?
Output:
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX res: <http://dbpedia.org/resource/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?uri WHERE {
?uri rdf:type dbo:Actor .
?uri dbo:birthPlace res:Germany .
}
🧪 Evaluation
The model was evaluated using F1-score on a hand-crafted dataset for the First Text2Sparql Challenge, a Co-Located with Text2KG at ESWC25.
📚 Citation
If you use this model in your work, please cite it as:
@misc{text2sparql2025,
author = {Marcos Gôlo, Paulo do Carmo, Edgard Marx, Ricardo Marcacini},
title = {text2sparql-S: Natural Language Text to SPARQL for DBpedia},
year = {2025},
howpublished = {\url{https://huggingface.co/aksw/text2sparql-S}},
}
