ProBel-MTL / README.md
mbayan's picture
Update README.md
486e10e verified
|
Raw
History Blame Contribute Delete
5.48 kB
---
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},
}
```