Text Generation
Transformers
Safetensors
Arabic
English
qwen2
propaganda-detection
persuasion-techniques
span-identification
explainability
lora
conversational
text-generation-inference
Instructions to use QCRI/ProBel-MTL with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use QCRI/ProBel-MTL with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="QCRI/ProBel-MTL") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("QCRI/ProBel-MTL") model = AutoModelForCausalLM.from_pretrained("QCRI/ProBel-MTL", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use QCRI/ProBel-MTL with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "QCRI/ProBel-MTL" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "QCRI/ProBel-MTL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/QCRI/ProBel-MTL
- SGLang
How to use QCRI/ProBel-MTL with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "QCRI/ProBel-MTL" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "QCRI/ProBel-MTL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "QCRI/ProBel-MTL" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "QCRI/ProBel-MTL", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use QCRI/ProBel-MTL with Docker Model Runner:
docker model run hf.co/QCRI/ProBel-MTL
File size: 5,483 Bytes
723fc6d 86e09d8 723fc6d 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 a4d25eb 86e09d8 486e10e 86e09d8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | ---
license: apache-2.0
base_model: Qwen/Qwen2.5-7B-Instruct
language:
- ar
- en
pipeline_tag: text-generation
library_name: transformers
datasets:
- QCRI/ProBel
tags:
- propaganda-detection
- persuasion-techniques
- span-identification
- explainability
- lora
---
# ProBel-MTL
The bilingual multi-task model from the ProBel paper (Mt-SFT): a single
Qwen2.5-7B-Instruct fine-tune that handles all five ProBel tasks in both Arabic
and English — binary propaganda detection, coarse-category and fine-grained
technique classification (with explanations), and technique-labeled span
extraction in two output formats.
Trained with LoRA (r=16, alpha=32) on the Arabic and English training splits of
[QCRI/ProBel](https://huggingface.co/datasets/QCRI/ProBel) across all five task
formats jointly; the checkpoint was selected on validation loss and merged into
the base model, so it loads as a regular causal LM. The LoRA adapter alone is
in `lora_adapter/`.
Companion resources: [dataset](https://huggingface.co/datasets/QCRI/ProBel) ·
[code](https://github.com/MohamedBayan/ProBel) · paper: *ProBel: Propaganda
Detection with Techniques, Spans, and Explanations* (arXiv preprint; the link
will be added here once the listing is live).
## Test scores
| | Binary | Coarse | Technique | Span-tag | Span-occ |
|---|---|---|---|---|---|
| Arabic | 0.763 | 0.682 | 0.575 | 0.411 | 0.362 |
| English | 0.735 | 0.410 | 0.272 | 0.189 | 0.241 |
Binary is macro-F1; coarse/technique are micro-F1; spans use the
overlap-adjusted micro-F1 of Da San Martino et al. (2020). These match the
paper's Mt-SFT rows and were produced with greedy decoding.
## Prompt templates
The model expects the exact task prompts it was trained on.
[`prompts/templates.json`](prompts/templates.json) ships all ten of them —
`{arabic, english} x {binary, coarse, multilabel, span_tag, span_match_occ}` —
each a `{"system": ..., "user": ...}` pair where the user message contains a
`{TEXT}` placeholder for the input sentence.
| Task | Model output |
|---|---|
| `binary` | `Label: true` or `Label: false`, then `Explanation: ...` |
| `coarse` / `multilabel` | `Labels: <names or none>`, then `Explanation: ...` |
| `span_tag` | the input sentence with inline `<span type="Technique">...</span>` tags |
| `span_match_occ` | a JSON list of `{"text", "label", "occurrence"}` objects |
Arabic templates carry the same task instructions with an Arabic-specialized
system prompt; the model answers Arabic inputs in Arabic.
## Usage
```bash
pip install "transformers>=4.51" accelerate
```
Binary detection with an explanation:
```python
import json
from huggingface_hub import hf_hub_download
from transformers import AutoModelForCausalLM, AutoTokenizer
templates = json.load(open(hf_hub_download("QCRI/ProBel-MTL", "prompts/templates.json")))
model = AutoModelForCausalLM.from_pretrained("QCRI/ProBel-MTL",
dtype="bfloat16", device_map="auto")
tok = AutoTokenizer.from_pretrained("QCRI/ProBel-MTL")
def run(task, lang, text, max_new_tokens=512):
t = templates[lang][task]
msgs = [{"role": "system", "content": t["system"]},
{"role": "user", "content": t["user"].replace("{TEXT}", text)}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True,
return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=max_new_tokens, do_sample=False)
return tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True)
print(run("binary", "english",
"The corrupt elites are destroying everything we hold dear."))
# Label: true
# Explanation: The paragraph relies on a sweeping, emotive accusation that
# unnamed "elites" are ruining "everything we hold dear" ...
```
Technique-labeled span extraction (same helper):
```python
print(run("span_tag", "english",
"The corrupt elites are destroying everything we hold dear."))
# <span type="Appeal_to_Fear-Prejudice">The corrupt elites are destroying
# everything we hold dear.</span>
print(run("multilabel", "arabic",
"الإعلام الكاذب يواصل نشر أكاذيبه المسمومة لتضليل الشعب."))
# Labels: Loaded_Language, Questioning_the_Reputation
# Explanation: يستخدم النص لغة محملة بالعواطف مثل "الكاذب" و"أكاذيبه المسمومة" ...
```
The model also serves directly with vLLM:
```bash
vllm serve QCRI/ProBel-MTL
```
The parsers that turn the span outputs back into character offsets, and the
full evaluation pipeline, are in the
[code repository](https://github.com/MohamedBayan/ProBel).
## Intended use and limitations
Built for research on propaganda and persuasion-technique analysis in news and
social-media text. Predictions are imperfect, technique performance follows the
long-tailed label distribution (rare techniques are often missed), and outputs
should support trained human reviewers rather than replace them, particularly
in moderation or policy settings.
## Citation
```bibtex
@misc{kmainasi2026probelpropagandadetectiontechniques,
title={ProBel: Propaganda Detection with Techniques, Spans, and Explanations},
author={Mohamed Bayan Kmainasi and Ali Ezzat Shahroor and Elisa Sartori and Giovanni Da San Martino and Firoj Alam},
year={2026},
eprint={2608.22388},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2608.22388},
}
```
|