CoolFace
Modelpublic

VSSA-SDSA/LT_AI_FakeNews_BERT

sourceHugging Faceopenrailupdated 3d agoView on Hugging Face
0likes41downloads
Model Card

ModernBERT-MIAITS

EN | LT


EN: English

Overview

ModernBERT-MIAITS is a fine-tuned Lithuanian-language text classification model developed as part of the MIAITS project (Melagingos informacijos automatinio identifikavimo tekstyno sukūrimas — Lithuanian Misinformation Automatic Identification Text Corpus). Lithuanian language resources for building artificial intelligence solutions.

The model classifies Lithuanian news articles and statements into three categories:

LabelMeaning
KlaidingaFalse / Fake information
ManipuliatyvuManipulative / Misleading content
TeisingaTrue / Correct information

Architecture

  • —Base model: `VSSA-SDSA/LT-MLKM-modernBERT` — a ModernBERT variant pre-trained on Lithuanian text
  • —Task: Single-label sequence classification (3 classes)
  • —Hidden size: 768
  • —Attention heads: 12
  • —Hidden layers: 22 (alternating full and sliding window attention every 3 layers; local window: 128)
  • —Max context length: 4,096 tokens
  • —Pooling: CLS token
  • —Vocabulary size: 64,000 tokens
  • —Positional encoding: RoPE (Rotary Position Embedding)
  • —Activation: GELU

Training Data

Source: data/tekstynas.csv — Lithuanian misinformation classification dataset.

Labels (from 16-Label column):

  • —0 — Klaidinga (False)
  • —1 — Manipuliatyvu (Manipulative)
  • —2 — Teisinga (True)

Train text columns (row expansion): Each training row is expanded into 3 rows — one per column: 7-Statement, 8-Statement_Context, 9-Full_text.

Val/Test text column: 9-Full_text only.

Splits: Stratified 80/10/10 (train/val/test), seed 42.

Augmentation: Sentence-shuffle on expanded training rows (1 shuffle per eligible doc, min 3 sentences, min 200 chars).

SplitRows
Train (after 3× column expansion)12,690
Train (+ sentence-shuffle augmentation)17,603 (+4,913)
Validation5,437
Test6,043

Training

Runtime: ~1h 12m

ParameterValue
Learning rate2e-5
Batch size8
Gradient accumulation steps4 (effective batch = 32)
Epochs4
Weight decay0.01
Precisionfloat32
OptimizerAdamW
SchedulerLinear warmup + decay
LossCross-entropy
Best model metricValidation accuracy
Early stopping patience2 epochs

Performance

Best checkpoint: Epoch 2

SplitLossAccuracyMacro F1Weighted F1
Validation0.48588.57%0.8770.884
Test0.37289.52%0.8870.894

Per-class metrics (test set):

ClassPrecisionRecallF1
Klaidinga0.8390.9310.882
Manipuliatyvu0.8690.7500.805
Teisinga0.9810.9690.975

Intended Use

  • —Detection of fake news and manipulative content in Lithuanian
  • —Research on misinformation in Baltic/Eastern European media
  • —Integration into content moderation pipelines

Limitations

  • —Trained exclusively on Lithuanian-language data; not suitable for other languages
  • —The Manipuliatyvu class is semantically ambiguous and has the lowest robustness

Usage

python
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

MODEL_PATH = "models/bert/modern-bert-miaits-v2"  # path to this directory
MAX_LENGTH = 4096

# Load
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, use_fast=True)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH)
model.eval()

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# Labels from model config
id2label = model.config.id2label  # {0: "Klaidinga", 1: "Manipuliatyvu", 2: "Teisinga"}

def predict(texts: list[str]) -> list[dict]:
    inputs = tokenizer(
        texts,
        truncation=True,
        max_length=MAX_LENGTH,
        padding=True,
        return_tensors="pt",
    ).to(device)

    with torch.no_grad():
        logits = model(**inputs).logits

    probs = torch.softmax(logits, dim=1).cpu()
    results = []
    for row in probs:
        dist = {id2label[i]: round(float(p), 4) for i, p in enumerate(row)}
        label = max(dist, key=dist.get)
        results.append({"label": label, "distribution": dist})
    return results


texts = [
    # Klaidinga
    'Nors didžioji žiniasklaida ir Didžioji farmacija deda visas pastangas, kad medikai ir nukentėję pacientai nekalbėtų apie neigiamą "Covid" vakcinų poveikį, apie šiuos atvejus pradedame girdėti vis dažniau, nes jų skaičius tampa per didelis, kad būtų galima į jį nekreipti dėmesio. Šiame straipsnyje gali būti teiginių, atspindinčių autoriaus nuomonę Kaip daugelis baiminosi, kai šios vakcinos buvo skubiai pateiktos rinkai beveik neišbandytos, tik laikui bėgant kai kurie padariniai tampa akivaizdesni.',
    # Manipuliatyvu
    '„The Economist" 2025 m. viršelio iššifravimas: Atskleista: globalistų kontrolė, 15 minučių miestai ir Saturno simbolika\nNaujausias „The Economist" viršelis visada pritraukia dėmesio ir diskusijų. 2025 m. leidinys, minimalistinio dizaino ir simboliška estetika, kelia klausimus apie globalinę kontrolę, technokratiją ir visuomenės transformacijas.',
    # Teisinga
    'Sparčiai šylantis klimatas reikalauja sprendimų. Būtent todėl Jungtinė Karalystė investuoja dešimtis milijonų svarų į tyrimus, kurie turėtų padėti atrasti būdą atvėsinti Žemės klimatą. Melagienų skleidėjai tvirtina, kad šie tyrimai reiškia, jog Jungtinė Karalystė oficialiai pripažįsta, kad „chemtreilai" nėra sąmokslo teorija ir patys jais užsiima.',
]

for text, result in zip(texts, predict(texts)):
    print(f"Text:  {text[:80]}...")
    print(f"Label: {result['label']}")
    print(f"Probs: {result['distribution']}\n")

Example output (real predictions from the model):

Text:  Nors didžioji žiniasklaida ir Didžioji farmacija deda visas pastangas, kad m...
Label: Klaidinga
Probs: {'Klaidinga': 0.9995, 'Manipuliatyvu': 0.0005, 'Teisinga': 0.0}

Text:  „The Economist" 2025 m. viršelio iššifravimas: Atskleista: globalistų kont...
Label: Manipuliatyvu
Probs: {'Klaidinga': 0.0508, 'Manipuliatyvu': 0.8602, 'Teisinga': 0.089}

Text:  Sparčiai šylantis klimatas reikalauja sprendimų. Būtent todėl Jungtinė Kara...
Label: Teisinga
Probs: {'Klaidinga': 0.0001, 'Manipuliatyvu': 0.0, 'Teisinga': 0.9999}

LT: Lietuvių

Apžvalga

ModernBERT-MIAITS — tai suderintas lietuviškos kalbos teksto klasifikavimo modelis, sukurtas MIAITS projekto (Melagingos informacijos automatinio identifikavimo tekstyno sukūrimas). Lietuvių kalbos išteklius, skirtas dirbtinio intelekto sprendimams kurti.

Modelis klasifikuoja lietuviškus naujienų straipsnius ir teiginius į tris kategorijas:

ŽymaReikšmė
KlaidingaKlaidinga / melaginga informacija
ManipuliatyvuManipuliatyvi / klaidinanti informacija
TeisingaTeisinga informacija

Architektūra

  • —Bazinis modelis: `VSSA-SDSA/LT-MLKM-modernBERT` — ModernBERT variantas, iš anksto apmokytas lietuviškuose tekstuose
  • —Užduotis: Vienos etiketės sekų klasifikavimas (3 klasės)
  • —Paslėpto sluoksnio dydis: 768
  • —Dėmesio galvutės: 12
  • —Paslėpti sluoksniai: 22 (kintančio pilno ir slankiojančio lango dėmesio mechanizmai kas 3 sluoksnius; vietinis langas: 128)
  • —Maksimalus konteksto ilgis: 4 096 žetonai
  • —Telkinys: CLS žetono vektorius
  • —Žodyno dydis: 64 000 žetonų
  • —Pozicinis kodavimas: RoPE (sukamasis pozicinis įterpimas)
  • —Aktyvavimo funkcija: GELU

Mokymo duomenys

Šaltinis: data/tekstynas.csv — lietuviškos dezinformacijos klasifikavimo duomenų rinkinys.

Žymos (iš stulpelio 16-Label):

  • —0 — Klaidinga
  • —1 — Manipuliatyvu
  • —2 — Teisinga

Eilutės su žyma REIKIA ĮVERTINTI buvo pašalintos.

Mokymo teksto stulpeliai (eilučių plėtimas): Kiekviena mokymo eilutė išplečiama į 3 eilutes — po vieną kiekvienam stulpeliui: 7-Statement, 8-Statement_Context, 9-Full_text.

Validavimo/testavimo teksto stulpelis: tik 9-Full_text.

Suskirstymas: Stratifikuotas 80/10/10 (mokymas/validavimas/testavimas), sėkla 42.

Duomenų papildymas: Sakinių maišymas išplėstose mokymo eilutėse (1 maišymas tinkamam dokumentui, min. 3 sakiniai, min. 200 simbolių).

PjūvisEilutės
Mokymas (po 3× stulpelio plėtimo)12 690
Mokymas (+ sakinių maišymas)17 603 (+4 913)
Validavimas5 437
Testavimas6 043

Mokymas

Apmokytas: 2026-04-02 | Trukmė: ~1 val. 12 min.

ParametrasReikšmė
Mokymosi greitis2e-5
Partijos dydis8
Gradientų kaupimo žingsniai4 (efektyvi partija = 32)
Epochos4
Svorio mažėjimas0,01
Tikslumasfloat32
OptimizatoriusAdamW
GrafikasLinijinis šildymas + mažėjimas
Nuostolių funkcijaKryžminė entropija
Geriausio modelio kriterijusValidavimo tikslumas
Ankstyvojo sustabdymo kantrybė2 epochos

Rezultatai

Geriausias patikros taškas: 2-oji epocha

PjūvisNuostoliaiTikslumasMakro F1Svertinis F1
Validavimas0,48588,57 %0,8770,884
Testavimas0,37289,52 %0,8870,894

Metrikos pagal klasę (testavimo rinkinys):

KlasėTikslumasAtšaukimasF1
Klaidinga0,8390,9310,882
Manipuliatyvu0,8690,7500,805
Teisinga0,9810,9690,975

Numatytas naudojimas

  • —Melagingų naujienų ir manipuliatyvaus turinio aptikimas lietuvių kalba
  • —Dezinformacijos Baltijos ir Rytų Europos žiniasklaidoje tyrimai
  • —Integravimas į turinio moderavimo sistemas

Apribojimai

  • —Modelis apmokytas išimtinai lietuviškais duomenimis; kitoms kalboms netinka
  • —Manipuliatyvu klasė yra semantiškai dviprasmiška ir mažiausiai atspari

Naudojimas

python
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

MODEL_PATH = "models/bert/modern-bert-miaits-v2"  # kelias į šį katalogą
MAX_LENGTH = 4096

# Įkėlimas
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, use_fast=True)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH)
model.eval()

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# Žymos iš modelio konfigūracijos
id2label = model.config.id2label  # {0: "Klaidinga", 1: "Manipuliatyvu", 2: "Teisinga"}

def predict(texts: list[str]) -> list[dict]:
    inputs = tokenizer(
        texts,
        truncation=True,
        max_length=MAX_LENGTH,
        padding=True,
        return_tensors="pt",
    ).to(device)

    with torch.no_grad():
        logits = model(**inputs).logits

    probs = torch.softmax(logits, dim=1).cpu()
    results = []
    for row in probs:
        dist = {id2label[i]: round(float(p), 4) for i, p in enumerate(row)}
        label = max(dist, key=dist.get)
        results.append({"label": label, "distribution": dist})
    return results


texts = [
    # Klaidinga
    'Nors didžioji žiniasklaida ir Didžioji farmacija deda visas pastangas, kad medikai ir nukentėję pacientai nekalbėtų apie neigiamą "Covid" vakcinų poveikį, apie šiuos atvejus pradedame girdėti vis dažniau, nes jų skaičius tampa per didelis, kad būtų galima į jį nekreipti dėmesio. Šiame straipsnyje gali būti teiginių, atspindinčių autoriaus nuomonę Kaip daugelis baiminosi, kai šios vakcinos buvo skubiai pateiktos rinkai beveik neišbandytos, tik laikui bėgant kai kurie padariniai tampa akivaizdesni.',
    # Manipuliatyvu
    '„The Economist" 2025 m. viršelio iššifravimas: Atskleista: globalistų kontrolė, 15 minučių miestai ir Saturno simbolika\nNaujausias „The Economist" viršelis visada pritraukia dėmesio ir diskusijų. 2025 m. leidinys, minimalistinio dizaino ir simboliška estetika, kelia klausimus apie globalinę kontrolę, technokratiją ir visuomenės transformacijas.',
    # Teisinga
    'Sparčiai šylantis klimatas reikalauja sprendimų. Būtent todėl Jungtinė Karalystė investuoja dešimtis milijonų svarų į tyrimus, kurie turėtų padėti atrasti būdą atvėsinti Žemės klimatą. Melagienų skleidėjai tvirtina, kad šie tyrimai reiškia, jog Jungtinė Karalystė oficialiai pripažįsta, kad „chemtreilai" nėra sąmokslo teorija ir patys jais užsiima.',
]

for text, result in zip(texts, predict(texts)):
    print(f"Tekstas: {text[:80]}...")
    print(f"Žyma:    {result['label']}")
    print(f"Tikimybės: {result['distribution']}\n")

Pavyzdinė išvestis (realios modelio prognozės):

Tekstas: Nors didžioji žiniasklaida ir Didžioji farmacija deda visas pastangas, kad m...
Žyma:    Klaidinga
Tikimybės: {'Klaidinga': 0.9995, 'Manipuliatyvu': 0.0005, 'Teisinga': 0.0}

Tekstas: „The Economist" 2025 m. viršelio iššifravimas: Atskleista: globalistų kont...
Žyma:    Manipuliatyvu
Tikimybės: {'Klaidinga': 0.0508, 'Manipuliatyvu': 0.8602, 'Teisinga': 0.089}

Tekstas: Sparčiai šylantis klimatas reikalauja sprendimų. Būtent todėl Jungtinė Kara...
Žyma:    Teisinga
Tikimybės: {'Klaidinga': 0.0001, 'Manipuliatyvu': 0.0, 'Teisinga': 0.9999}

License

NewGenLTU OpenRAIL-M licencija, 1.0 versija

https://sitti.vdu.lt/en/newgenltu-openrail-m-license/