VietSpeech Fusion SER — Nhận diện cảm xúc tiếng Việt (đa phương thức)

Mô hình nhận diện cảm xúc qua giọng nói tiếng Việt, kết hợp âm thanh (wav2vec2) và văn bản (PhoBERT) theo kiến trúc late-fusion. Mô hình phân loại lời nói tiếng Việt thành 5 lớp cảm xúc.

Các lớp cảm xúc

ID Lớp Gộp từ
0 Enjoyment (vui) Enjoyment / happy
1 Sadness (buồn) Sadness + Fear / sad + fearful
2 Anger (giận) Anger + Disgust / angry + disgusted
3 Surprise (ngạc nhiên) Surprise / surprised
4 Other (khác/trung tính) Other / neutral

Kiến trúc

audio ──→ wav2vec2-base-vietnamese-250h (+LoRA) ──→ mean-pool ─┐
                                                               ├─→ concat → MLP → 5 lớp
text  ──→ PhoBERT-base (+LoRA) ──→ [CLS] ─────────────────────┘
  • Audio encoder: nguyenvulebinh/wav2vec2-base-vietnamese-250h, fine-tune bằng LoRA (r=16).
  • Text encoder: vinai/phobert-base, fine-tune bằng LoRA (r=16).
  • Fusion: nối hai embedding (768+768) → MLP (hidden 256, ReLU, dropout 0.3) → 5 lớp.
  • Class weights dùng để xử lý mất cân bằng lớp.

Kết quả (trên test set VietSpeech, nhãn pseudo-label)

Chỉ số Giá trị
Accuracy 0.743
Macro-F1 0.613

F1 từng lớp: Enjoyment 0.75 · Other 0.81 · Surprise 0.54 · Anger 0.52 · Sadness 0.45.

⚠️ Lưu ý quan trọng về dữ liệu (pseudo-label)

Nhãn cảm xúc của tập huấn luyện KHÔNG do người gán. Chúng được sinh tự động bằng mô hình iic/emotion2vec_plus_large (pseudo-labeling) trên dữ liệu giọng nói NhutP/VietSpeech (vốn không có nhãn cảm xúc). Vì vậy:

  • Nhãn là nhãn yếu (weak labels), có thể chứa lỗi (ví dụ một câu nội dung tiêu cực nhưng giọng nhẹ nhàng có thể bị gán "happy").
  • Các con số đánh giá ở trên đo trên chính nhãn pseudo-label, nên phản ánh mức độ khớp với emotion2vec, chưa phải hiệu năng trên nhãn người gán thật.
  • Phân bố lớp lệch: Other/Enjoyment chiếm đa số; Sadness/Anger hiếm hơn nhiều.

Để đánh giá khách quan, nên dùng một tập test có nhãn do người gán.

Cách dùng

Đây là kiến trúc tùy biến (không phải lớp model chuẩn của Transformers), cần dựng lại MultimodalSER rồi nạp trọng số:

import torch
from huggingface_hub import hf_hub_download
# ... định nghĩa lại class MultimodalSER như khi train ...

path = hf_hub_download("qdovan03/vietspeech-fusion-ser", "best_fusion.pt")
model = MultimodalSER(num_labels=5)
state = torch.load(path, map_location="cpu")
state = {k.replace("module.", "", 1): v for k, v in state.items()}
model.load_state_dict(state)
model.eval()

Xem fusion_config.json trong repo để biết các siêu tham số.

Dữ liệu & nguồn

Hạn chế

  • Nhãn pseudo-label nên có nhiễu; chưa đánh giá trên nhãn người gán.
  • Hai lớp Sadness và Anger thiếu dữ liệu (do nguồn VietSpeech ít các cảm xúc này), nên F1 hai lớp này thấp hơn.
  • Mô hình huấn luyện trên giọng đọc/xã hội, có thể kém hơn trên giọng biểu cảm mạnh hoặc miền âm thanh khác.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for qdovan03/vietspeech-fusion-ser

Adapter
(1)
this model

Space using qdovan03/vietspeech-fusion-ser 1