news 2026/4/2 13:14:08

SenseVoiceSmall情感标签解析:HAPPY/ANGRY识别后处理代码实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SenseVoiceSmall情感标签解析:HAPPY/ANGRY识别后处理代码实例

SenseVoiceSmall情感标签解析:HAPPY/ANGRY识别后处理代码实例

1. 引言:让语音“有情绪”的AI识别

你有没有遇到过这种情况:一段录音里,说话人明显带着笑意,但转写出来的文字却冷冰冰的?或者视频中突然响起掌声,文字记录却毫无反应?

现在,这些问题有了新解法。今天我们要聊的是阿里达摩院开源的SenseVoiceSmall模型——它不只是把声音变成文字,还能听出“语气”、感知“情绪”,甚至捕捉背景里的笑声和音乐。

这个模型最特别的地方在于,它输出的不是干巴巴的文字,而是带有情感标签的富文本。比如一句话后面跟着<|HAPPY|>,说明这人是笑着说的;如果出现<|ANGRY|>,那语气可就不善了。更厉害的是,它还能标记<|LAUGHTER|><|APPLAUSE|>这类声音事件。

但问题来了:这些标签虽然信息丰富,可直接展示给用户会显得很“技术味”。我们能不能把这些原始标签转化成更自然、易读的内容?答案是肯定的。本文就带你一步步实现情感标签的智能解析与美化输出,并提供完整可运行的代码示例。

无论你是想做智能客服的情绪分析、视频内容自动打标,还是语音日记的情感记录,这篇都能给你实用参考。

2. 核心能力解析:不止是语音转写

2.1 多语言支持,覆盖主流语种

SenseVoiceSmall 支持多种语言混合识别,包括:

  • 中文普通话(zh)
  • 英语(en)
  • 粤语(yue)
  • 日语(ja)
  • 韩语(ko)

而且支持“自动识别语言”模式(language="auto"),非常适合多语种混杂的场景,比如跨国会议、双语播客等。

2.2 富文本输出:情感 + 事件双重感知

传统ASR只输出文字,而 SenseVoice 的输出是这样的:

你好啊<|HAPPY|>,今天天气真不错<|LAUGHTER|>,对吧?

其中:

  • <|HAPPY|>表示前一句带有开心情绪
  • <|LAUGHTER|>表示紧接着有笑声

这种结构化的标注方式,极大提升了语音内容的信息密度。你可以基于这些标签做进一步处理,比如:

  • 统计整段对话的情绪分布
  • 自动为视频添加字幕特效(开心时字体变暖色)
  • 检测客户投诉中的愤怒语句

2.3 极速推理,适合生产环境

得益于非自回归架构,SenseVoiceSmall 在 NVIDIA 4090D 上可以做到秒级转写,延迟极低。配合 Gradio WebUI,普通用户也能轻松上手,无需编写代码即可上传音频查看结果。

3. 环境搭建与依赖说明

3.1 基础环境要求

组件版本
Python3.11
PyTorch2.5
GPU推荐 NVIDIA 显卡(CUDA 支持)

3.2 必要依赖库

pip install funasr modelscope gradio av
  • funasr:阿里官方语音识别工具包
  • modelscope:模型下载与管理
  • gradio:构建可视化界面
  • av:高效音频解码(比 librosa 快得多)

3.3 系统工具

确保系统已安装ffmpeg,用于音频格式转换和重采样:

# Ubuntu/Debian sudo apt-get install ffmpeg # macOS brew install ffmpeg

模型会自动将非16k音频重采样为16kHz,这是其推荐输入格式。

4. 完整代码实现:从识别到标签美化

4.1 初始化模型

首先加载 SenseVoiceSmall 模型,并启用 VAD(语音活动检测)来提升长音频处理效果:

from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess # 加载模型 model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, vad_model="fsmn-vad", vad_kwargs={"max_single_segment_time": 30000}, device="cuda:0", # 使用GPU加速 )

注意:trust_remote_code=True是必须的,因为模型包含自定义逻辑。

4.2 原始识别与后处理对比

我们来测试一段带情绪的音频:

# 假设 audio_path 是你的音频文件路径 res = model.generate( input=audio_path, language="auto", use_itn=True, # 数字转文字(如 "123" → "一百二十三") batch_size_s=60, merge_vad=True, merge_length_s=15, ) raw_text = res[0]["text"] print("原始输出:", raw_text) # 示例输出:今天开会迟到<|ANGRY|>,真是气死我了<|SAD|>

接下来使用内置的后处理函数进行清洗:

clean_text = rich_transcription_postprocess(raw_text) print("美化后:", clean_text) # 输出:今天开会迟到(生气),真是气死我了(悲伤)

可以看到,<|ANGRY|>被替换成了中文“(生气)”,更加友好。

4.3 自定义标签映射:按需调整风格

如果你希望输出更生动,比如把“生气”改成“怒气冲冲”,可以把默认的映射表改掉。

查看源码可知,rich_transcription_postprocess使用了一个固定的标签映射字典。我们可以自己实现一个增强版:

def custom_postprocess(text): # 自定义标签映射 tag_map = { "<|HAPPY|>": "😄", "<|SAD|>": "😢", "<|ANGRY|>": "💢", "<|LAUGHTER|>": "😂", "<|APPLAUSE|>": "", "<|BGM|>": "[背景音乐]", "<|CRY|>": "😭" } for tag, emoji in tag_map.items(): text = text.replace(tag, emoji) return text # 使用自定义后处理 enhanced_text = custom_postprocess(raw_text) print("增强版:", enhanced_text) # 输出:今天开会迟到💢,真是气死我了😢

这样处理后的文本更适合社交平台、弹幕系统或年轻化产品界面。

4.4 批量处理多个音频文件

如果你想批量处理一批音频,可以这样写:

import os audio_dir = "./audios/" results = [] for filename in os.listdir(audio_dir): if filename.endswith((".wav", ".mp3")): filepath = os.path.join(audio_dir, filename) res = model.generate(input=filepath, language="auto") if res and len(res) > 0: raw = res[0]["text"] clean = rich_transcription_postprocess(raw) results.append({ "file": filename, "raw": raw, "clean": clean }) # 保存为JSON或CSV import json with open("transcription_results.json", "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2)

5. Web交互界面:零代码体验情感识别

为了让非技术人员也能用上这个功能,我们封装一个 Gradio 界面。

5.1 完整 Web 应用脚本

# app_sensevoice.py import gradio as gr from funasr import AutoModel from funasr.utils.postprocess_utils import rich_transcription_postprocess import os # 初始化模型 model = AutoModel( model="iic/SenseVoiceSmall", trust_remote_code=True, vad_model="fsmn-vad", device="cuda:0", ) def sensevoice_process(audio_path, language): if audio_path is None: return "请先上传音频文件" res = model.generate( input=audio_path, language=language, use_itn=True, batch_size_s=60, merge_vad=True, ) if len(res) > 0: raw_text = res[0]["text"] clean_text = rich_transcription_postprocess(raw_text) return clean_text else: return "识别失败" with gr.Blocks(title="SenseVoice 情感语音识别") as demo: gr.Markdown("# 🎙 SenseVoice 智能语音识别控制台") gr.Markdown(""" **功能特色:** - **多语言支持**:中、英、日、韩、粤语自动识别。 - 🎭 **情感识别**:自动检测音频中的开心、愤怒、悲伤等情绪。 - 🎸 **声音事件**:自动标注 BGM、掌声、笑声、哭声等。 """) with gr.Row(): with gr.Column(): audio_input = gr.Audio(type="filepath", label="上传音频或直接录音") lang_dropdown = gr.Dropdown( choices=["auto", "zh", "en", "yue", "ja", "ko"], value="auto", label="语言选择" ) submit_btn = gr.Button("开始 AI 识别", variant="primary") with gr.Column(): text_output = gr.Textbox(label="识别结果", lines=15) submit_btn.click( fn=sensevoice_process, inputs=[audio_input, lang_dropdown], outputs=text_output ) demo.launch(server_name="0.0.0.0", server_port=6006)

5.2 启动服务

python app_sensevoice.py

然后通过 SSH 隧道访问:

ssh -L 6006:127.0.0.1:6006 -p [端口] root@[IP地址]

浏览器打开:http://127.0.0.1:6006

你就能看到一个简洁的网页界面,上传音频即可看到带情感标签的识别结果。

6. 实际应用建议与优化技巧

6.1 如何提升情感识别准确率?

  • 避免远场录音:距离麦克风太远的声音容易失真,影响情绪判断
  • 减少背景噪音:嘈杂环境中模型可能误判笑声为掌声
  • 使用高质量音频:尽量用16k、单声道WAV格式

6.2 后续处理方向

拿到带标签的文本后,你可以做很多事:

应用场景处理方式
客服质检提取所有 `<
视频字幕将 `<
心理咨询统计一周录音中“开心” vs “悲伤”的比例变化
内容审核检测是否含有持续愤怒语句,触发预警

6.3 性能优化小贴士

  • 开启batch_size_s=60可提升吞吐量
  • 使用merge_vad=True减少碎片化短句
  • 对于超长音频(>1小时),建议分段处理

7. 总结:让语音理解更有温度

SenseVoiceSmall 不只是一个语音识别模型,它让机器真正开始“听懂”人类的情绪。

通过本文的代码实践,你应该已经掌握了:

  • 如何部署并调用 SenseVoiceSmall 模型
  • 如何解析<|HAPPY|><|ANGRY|>等情感标签
  • 如何使用rich_transcription_postprocess进行文本美化
  • 如何构建 Web 界面供他人使用

更重要的是,你学会了如何把冷冰冰的技术输出,转化为温暖、可读性强的人性化内容。

无论是做产品集成、科研实验,还是个人项目探索,这套方案都能帮你快速落地语音情感分析能力。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 14:33:48

C#/.NET/.NET Core技术前沿周刊 | 第 66 期(2026年1.12-1.18)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

作者头像 李华
网站建设 2026/4/1 19:14:56

告别手动启动!用测试镜像实现程序开机自动运行

告别手动启动&#xff01;用测试镜像实现程序开机自动运行 你是否也经历过这样的场景&#xff1a;每次重启服务器后&#xff0c;都要手动敲几行命令启动服务&#xff1f;写好的监控脚本、数据采集程序、API网关&#xff0c;一关机就“失联”&#xff0c;再开机就得重新登录、c…

作者头像 李华
网站建设 2026/4/2 5:20:00

零基础也能上手!PyTorch-2.x-Universal镜像保姆级安装教程

零基础也能上手&#xff01;PyTorch-2.x-Universal镜像保姆级安装教程 你是不是也经历过这样的场景&#xff1a;为了跑一个深度学习项目&#xff0c;光是配置环境就花了一整天&#xff1f;依赖冲突、CUDA版本不匹配、pip install卡住不动……这些问题让人头大。今天&#xff0…

作者头像 李华
网站建设 2026/3/17 3:44:11

UI-TARS-desktop开箱体验:一键启动的多模态AI工作台

UI-TARS-desktop开箱体验&#xff1a;一键启动的多模态AI工作台 1. 引言&#xff1a;当自然语言成为操作系统的新入口 你有没有想过&#xff0c;有一天只需说一句“帮我打开浏览器搜索最新AI工具”&#xff0c;电脑就能自动完成所有操作&#xff1f;这不再是科幻电影里的场景…

作者头像 李华
网站建设 2026/4/1 1:52:33

BERT智能填空实战:用轻量级镜像快速实现中文语法纠错

BERT智能填空实战&#xff1a;用轻量级镜像快速实现中文语法纠错 在日常写作、内容创作甚至正式文档撰写中&#xff0c;我们常常会遇到语义不通、搭配不当或成语误用的问题。传统的拼写检查工具只能识别错别字&#xff0c;却难以理解上下文逻辑。有没有一种方法&#xff0c;能…

作者头像 李华
网站建设 2026/3/26 13:41:11

Llama3-8B备份恢复机制:模型与配置文件灾备方案

Llama3-8B备份恢复机制&#xff1a;模型与配置文件灾备方案 1. 背景与核心价值 在本地部署和运行像 Meta-Llama-3-8B-Instruct 这类大语言模型时&#xff0c;稳定性与数据安全至关重要。一旦服务器崩溃、磁盘损坏或误操作导致模型文件丢失&#xff0c;重新下载一次完整的模型…

作者头像 李华