NCI Social Media Classifier v3

A multi-label classifier for detecting propaganda techniques in social media content (tweets, posts, short-form text).

Model Description

This model is fine-tuned from vinai/bertweet-base for multi-label classification of 18 propaganda techniques defined in the SemEval-2020 Task 11.

Key improvements in v3:

  • 4x better F1 Macro (0.55 vs 0.14 in v2) through synthetic data augmentation
  • 15/18 techniques with good coverage (F1 ≥ 0.3), up from 6/18
  • Better detection of rare techniques: Repetition, Flag-Waving, Slogans, Black-and-White Fallacy

Performance

Metric Score
F1 Micro 0.796
F1 Macro 0.551
Techniques with F1 ≥ 0.3 15/18

Per-Technique Performance

Technique F1 Support
Name_Calling,Labeling 0.960 724
Appeal_to_Authority 0.897 16
Red_Herring 0.880 14
Obfuscation,Intentional_Vagueness,Confusion 0.800 6
Loaded_Language 0.796 480
Whataboutism,Straw_Men,Red_Herring 0.700 26
Slogans 0.667 4
Appeal_to_fear-prejudice 0.662 246
Reductio_ad_hitlerum 0.612 68
Doubt 0.564 23
Exaggeration,Minimisation 0.524 146
Flag-Waving 0.467 23
Repetition 0.444 7
Bandwagon 0.400 8
Black-and-White_Fallacy 0.300 17

Intended Use

  • Analyzing social media posts for propaganda techniques
  • Content moderation assistance
  • Media literacy tools
  • Research on information manipulation

Usage

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# Load model
tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base", use_fast=False)
model = AutoModelForSequenceClassification.from_pretrained("synapti/nci-social-classifier-v3")

# Technique labels
TECHNIQUES = [
    "Loaded_Language", "Appeal_to_fear-prejudice", "Exaggeration,Minimisation",
    "Repetition", "Flag-Waving", "Name_Calling,Labeling", "Reductio_ad_hitlerum",
    "Black-and-White_Fallacy", "Causal_Oversimplification", "Whataboutism,Straw_Men,Red_Herring",
    "Straw_Man", "Red_Herring", "Doubt", "Appeal_to_Authority", "Thought-terminating_Cliches",
    "Bandwagon", "Slogans", "Obfuscation,Intentional_Vagueness,Confusion",
]

# Predict
text = "Build the wall! Build the wall! Build the wall! #MAGA"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128)

with torch.no_grad():
    outputs = model(**inputs)
    probs = torch.sigmoid(outputs.logits)[0]

# Get detected techniques
detected = [(TECHNIQUES[i], float(probs[i])) for i in range(18) if probs[i] > 0.3]
print(detected)
# [('Slogans', 0.51), ('Repetition', 0.39), ...]

Training Data

Trained on synapti/nci-social-v3:

  • 9,069 training samples
  • 1,134 validation samples
  • 1,134 test samples

Data sources:

  • LLM-labeled HateXplain samples
  • SemEval span_propaganda short samples
  • Synthetic examples for underrepresented techniques
  • Balanced negative samples

Training Procedure

  • Base model: vinai/bertweet-base
  • Loss: Focal Loss (γ=2.0) for class imbalance
  • Optimizer: AdamW
  • Learning rate: 2e-5
  • Batch size: 32
  • Epochs: 8
  • Hardware: NVIDIA L4 GPU

Limitations

  • Optimized for English social media content
  • May not generalize well to formal news articles (use nci-technique-classifier for those)
  • Some rare techniques (Straw_Man, Thought-terminating_Cliches) still have limited coverage

Citation

@misc{nci-social-classifier-v3,
  author = {Synapti},
  title = {NCI Social Media Classifier v3},
  year = {2024},
  publisher = {HuggingFace},
  url = {https://huggingface.co/synapti/nci-social-classifier-v3}
}

License

Apache 2.0

Downloads last month
79
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for synapti/nci-social-classifier-v3

Quantized
(2)
this model

Dataset used to train synapti/nci-social-classifier-v3