Serbian multi-label emotion recognition — Qwen3.5 9B LoRA

Model description

This is the replicated complementary generative model in the final technical portfolio. It is a PEFT adapter for unsloth/Qwen3.5-9B at pinned revision 005429cee5cb648998cf2b70eebdd83175989c9a. The family claim is based on a locked ten-seed Round 12 replication. TeslaXLM remains the primary publication encoder because the two systems use different output mechanisms and the encoder retains higher Macro F1.

The adapter emits one strict JSON array containing zero, one, or two labels in the fixed order anger, anticipation, disgust, fear, joy, sadness, surprise, trust. Prose, Markdown, unknown labels, duplicates, noncanonical order, more than two labels, and neutral are invalid.

The retained release artifact is the prespecified seed 42 at validation-selected checkpoint-2247. It was not chosen by test performance. Exact release-file sizes and SHA-256 hashes are in artifact_manifest.json.

Intended use

Use this adapter for research on direct structured Serbian social-media emotion generation and as the complementary generator in the final model portfolio. Do not treat it as a clinical assessment, an explanation of an author's mental state, or a basis for employment, law-enforcement, or other high-impact decisions.

Data and preprocessing

Each training seed used cleaned text from 23,961 training rows. Checkpoint selection used 3,000 validation rows, followed by one locked evaluation of 3,000 test rows. The output space contains eight emotions and excludes neutral. IDs, source metadata, annotations, disagreement, sentiment, and other metadata were not model inputs. The adapter repository must not include training text or row identifiers.

Training

  • Base loading: one CUDA device, unquantized BF16; no QLoRA, CPU offload, or disk offload.
  • Adaptation: LoRA rank 16, alpha 16, dropout 0; 29,097,984 trainable parameters.
  • Target modules: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj.
  • Modalities: language, attention, and MLP trained; vision and audio frozen.
  • Objective: assistant-only causal loss for the canonical JSON array.
  • Sequence length: 1,024; learning rate: 2e-4; warmup: 0.05; weight decay: 0.01.
  • Epochs: 3; physical batch: 1; gradient accumulation: 32; effective batch: 32.
  • Family evidence seeds: 11, 23, 37, 42, 53, 67, 79, 83, 97, and 109. Checkpoints were saved each epoch and selected on validation only. Seed 42 was reused exactly from Round 11.
  • Inference: no demonstrations, greedy decoding, thinking disabled, at most 32 new tokens.

Evaluation

Scope Rows Macro F1 Micro F1 Sample Jaccard Exact set Invalid rate
Validation-selected checkpoint 3,000 0.530407 0.614634 0.589722 0.498000 0.000000
Test, seed 42 3,000 0.526192 0.614477 0.591056 0.505333 0.000000
Test family mean, 10 seeds 3,000 per seed 0.516697 0.612226 0.589383 0.507767 0.000000

Across ten seeds, the sample SD is 0.007589 for Macro F1, 0.006172 for micro F1, 0.007793 for sample Jaccard, and 0.013807 for exact-set accuracy. All 30,000 test outputs were valid under the strict parser.

The same 3,000 test rows were used in earlier rounds. These numbers are therefore adaptive internal evidence, not an independent external replication. Descriptively, Qwen3.5 9B differs from the Qwen3.5 4B five-seed mean by +0.000217 Macro F1, +0.014161 sample Jaccard, and +0.020900 exact-set accuracy. Versus the TeslaXLM ten-seed encoder mean, it is -0.042267 on Macro F1 and +0.028654 on sample Jaccard. These are not inferential cross-system claims.

Inference

import torch
from peft import PeftModel
from unsloth import FastModel

base_id = "unsloth/Qwen3.5-9B"
revision = "005429cee5cb648998cf2b70eebdd83175989c9a"
adapter_id = "te-sla/serbian-emotion-qwen3.5-9b-lora"

model, tokenizer = FastModel.from_pretrained(
    model_name=base_id,
    revision=revision,
    max_seq_length=1024,
    dtype=torch.bfloat16,
    load_in_4bit=False,
    load_in_8bit=False,
    load_in_16bit=True,
    full_finetuning=False,
    device_map={"": 0},
)
model = PeftModel.from_pretrained(model, adapter_id, is_trainable=False)
FastModel.for_inference(model)

Use the exact Serbian system prompt and strict parser from llm_prompting.py. Pass enable_thinking=False, use deterministic greedy decoding, and reject malformed, duplicate, unknown, noncanonical, neutral, or more-than-two-label outputs without repair.

Limitations

  • The ten-seed result measures training-seed stability, but not external-dataset generalization.
  • The test cohort is reused and adaptively analyzed.
  • The model emits label sets, not calibrated probabilities.
  • Strict parsing is part of the evaluated system and may count semantically plausible prose as invalid.
  • The task domain is Serbian Reddit and Twitter text.
  • The 9B adapter must not be placed in a pooled universal leaderboard with thresholded encoders.
  • BF16 inference and training have a tight memory margin on a 24 GB GPU.

Reproducibility and evidence

The source repository retains the executed configuration, model revision, data fingerprints, demonstration hash, selected validation checkpoint, aggregate metrics, per-label results, descriptive compatible-cohort comparisons, runtime telemetry, code, tests, and SHA-256 provenance. Runtime predictions and adapter weights remain outside Git.

Citation

The final paper identifier and citation are pending. The verified paper link and shared portfolio citation will be added when available.

Downloads last month
91
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for te-sla/serbian-emotion-qwen3.5-9b-lora

Finetuned
Qwen/Qwen3.5-9B
Adapter
(111)
this model