A 10-class emotion classifier fine-tuned for conversational AI memory systems. Uses an Inside Out 2 inspired taxonomy. v2 extends
Kova-Mind/emotion-v1 with targeted training on pipeline-style bracket-tag fragments (
X [positive],
X [negative],
X [neutral]) and entity fragments with embedded sentiment.
v1 shipped with excellent accuracy on natural conversational sentences, but two real-world failure modes appeared in production patterns:
v2 is trained on 706 additional Opus-labeled Kova-style examples that target these gaps.
Evaluated against
Claude Opus as fragment-only oracle (Opus reads each fragment in isolation and labels what it expresses).
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2import torch
3
4tokenizer = AutoTokenizer.from_pretrained("Kova-Mind/emotion-v2")
5model = AutoModelForSequenceClassification.from_pretrained("Kova-Mind/emotion-v2")
6model.eval()
7
8text = "croissants [positive] — User A loves them exclusively."
9inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=256)
10with torch.no_grad():
11 logits = model(**inputs).logits
12 probs = torch.softmax(logits, dim=-1)
13 pred_id = torch.argmax(probs, dim=-1).item()
14
15print(f"{model.config.id2label[pred_id]} ({probs[0, pred_id]:.3f})")
16# → joy (0.97)
1from transformers import pipeline
2
3clf = pipeline("text-classification", model="Kova-Mind/emotion-v2", top_k=None)
4print(clf("hiking [positive] — Weekends activity."))
5# → joy (top class)
1@misc{capo2026kovamindemotionv2,
2 author = {Capo, Alejandro},
3 title = {KovaMind Emotion v2: Bracket-Tag-Aware Emotion Classification for Conversational Memory Pipelines},
4 year = {2026},
5 publisher = {Hugging Face},
6 howpublished = {\url{https://huggingface.co/Kova-Mind/emotion-v2}}
7}
kovamind.io — private, customer-owned AI memory infrastructure.