How should you use SenseVoice emotion tags?
A customer-call transcript starts with ANGRY or NEUTRAL. Can your application use that to decide how the customer feels? First separate three things: the model's prediction for an audio segment, the text you display, and the evidence used to evaluate it.
An emotion tag is not a person's true mental state, identity or diagnosis, nor a calibrated confidence score. After validation, it may help a human find recordings to review. It should not independently determine employee evaluations, customer treatment or other consequential decisions about people.
Keep the raw result first
SenseVoiceSmall produces language, emotion, audio-event and text-normalization tags alongside transcription. This short-audio example uses neither VAD nor speaker diarization. Place a short recording you are entitled to use at audio.wav; the first model-ID load needs to download weights.
First prepare a CPU environment using the maintained installation and environment checks. Verify that PyTorch and torchaudio import successfully and have compatible versions. python -m pip install "funasr==1.4.15" only pins the FunASR package; it is not a complete fresh-environment installation.
from funasr import AutoModel
from funasr.utils.postprocess_utils import rich_transcription_postprocess
model = AutoModel(
model="iic/SenseVoiceSmall",
device="cpu",
disable_update=True,
)
raw = model.generate(
input="audio.wav",
language="auto",
use_itn=True,
ban_emo_unk=False,
)[0]["text"]
print("raw:", raw)
print("display:", rich_transcription_postprocess(raw))
The following is a real readout from the official Chinese speech sample, using Linux CPU, FunASR 1.4.15, PyTorch/torchaudio 2.10.0 and cached SenseVoiceSmall weights. The audio is about 5.55 seconds long. This is a functional check, not an emotion-accuracy or speed benchmark.

Raw prediction
<|zh|><|NEUTRAL|><|Speech|><|withitn|>欢迎大家来体验达摩院推出的语音识别模型。
Display text
欢迎大家来体验达摩院推出的语音识别模型。
Here zh is the predicted language, NEUTRAL the emotion category, Speech the audio-event tag and withitn the text-normalization mode. None proves the prediction correct. A Speech tag does not guarantee the entire recording is free from music or noise. This sample has no human emotion ground truth, so it does not establish emotion accuracy.
Display text is not an evaluation label
rich_transcription_postprocess() makes output suitable for display; it does not promise plain text only. It may remove control tags or represent emotion and events with emoji. The next input is a constructed tag string, not another recording's prediction. Running the same postprocessor demonstrates the difference.
Input: <|zh|><|HAPPY|><|Speech|><|withitn|>今天放假。 Display: 今天放假。😊
Splitting display text and treating a word position as an emotion label loses or misreads information. Keep raw output such as res[0]["text"], parse it under the task's rules and store the display version separately. Different segments may have different predictions. One recording-level tag is not a timestamped or per-speaker account of emotion.
Likewise, ban_emo_unk=True does not mean “more accurate.” The implementation masks the unknown-emotion token's decoding score. Disallowing unknown does not provide new evidence. The example explicitly preserves that option. Send unknown or unparseable results for inspection instead of silently turning them into NEUTRAL.
Fix the evaluation contract before quoting a score
The CASIA / RAVDESS community reproduction issue remains unresolved. This article does not reproduce the paper's scores or access or distribute either dataset. First fix the lawful dataset version, sample manifest, class mapping, weight hash, software versions and metric definitions.
The maintained SER evaluator reads six evaluation classes from raw output, normalizes fear/fearful and surprise/surprised, and fails on outputs without a supported emotion tag instead of silently dropping records. This six-class evaluation contract is not the complete model vocabulary or a universal parser for arbitrary applications.
It reports WA (accuracy across all records) and UA (mean recall across the classes present in the manifest). A synthetic counting example: predict neutral for nine neutral records and one angry record, and WA is 90% while UA is 50%. This checks the maintained metric function, not SenseVoice performance. One aggregate score can hide total failure on a minority class.
For an application, listen to a sample covering your languages, noise, devices and speaking styles. Record false positives and unknown results before adopting the auxiliary tag. For “who spoke when,” follow the speaker and time-coverage acceptance path; do not infer identity from emotion tags.
Next, open the pinned SenseVoice SER evaluation guide. Start with your lawful manifest and retain raw outputs and unsuccessful cases.