GoEmotions Korean โ€” xlm-roberta-base (v2)

Fine-tuned xlm-roberta-base for 28-emotion classification on Korean text. Used in SentiLog for on-device journaling sentiment analysis.

Model Details

  • Base model: FacebookAI/xlm-roberta-base (270M params)
  • Training data: GoEmotions (EN+KO bilingual) + KOTE (50K native Korean emotions)
  • Translation: NLLB-200-distilled-600M for ENโ†’KO
  • Training: 8 epochs with early stopping (patience=2, best at epoch 6)
  • Quantization: INT8 dynamic quantization for ONNX (266MB)

Performance (v2)

Metric v1 v2
F1 Macro (training) 0.379 0.568
28ร—3 Top-1 67% 68%
28ร—3 Top-3 83% 81%
Sanity Checks 8/8 8/8
Missed Emotions 2/28 2/28

Labels (28 GoEmotions)

admiration, amusement, anger, annoyance, approval, caring, confusion, curiosity, desire, disappointment, disapproval, disgust, embarrassment, excitement, fear, gratitude, grief, joy, love, nervousness, optimism, pride, realization, relief, remorse, sadness, surprise, neutral

Files

  • model.safetensors โ€” PyTorch checkpoint (for fine-tuning)
  • goemotions.onnx โ€” INT8 quantized ONNX (for inference, 266MB)
  • tokenizer.json โ€” Unigram tokenizer

Usage (ONNX)

import onnxruntime as ort
from tokenizers import Tokenizer

session = ort.InferenceSession("goemotions.onnx")
tokenizer = Tokenizer.from_file("tokenizer.json")

encoding = tokenizer.encode("์˜ค๋Š˜ ์ •๋ง ํ–‰๋ณตํ•ด์š”")
import numpy as np
input_ids = np.array([encoding.ids], dtype=np.int64)
attention_mask = np.array([encoding.attention_mask], dtype=np.int64)

outputs = session.run(None, {"input_ids": input_ids, "attention_mask": attention_mask})
Downloads last month
24
Safetensors
Model size
0.3B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Datasets used to train tojohere/goemotions-ko-xlm-roberta-base