OSUM:告别ASR单一功能,西工大开源的语音大模型会「读心」!识别+情感分析+年龄预测等8大任务1个模型全搞定

简介: OSUM 是西北工业大学开发的开源语音理解模型,支持语音识别、情感分析、说话者性别分类等多种任务,基于 ASR+X 训练策略,具有高效和泛化能力强的特点。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦


🎙️ “还在用Whisper单纯转文字?西工大开源模型让语音会「读心」:语音识别+情绪识别+说话人分析+年龄预测等8大任务自由切换!”

大家好,我是蚝油菜花。当你还在为这些场景头疼时——

  • 👉 客服录音分析要跑3个模型:先转文字,再情感分析,最后统计性别比例
  • 👉 医疗问诊录音转录后,还要手动标记咳嗽声和患者情绪波动
  • 👉 语音助手指令识别准确,却听不懂用户语气中的紧急程度...

西北工业大学音频实验室刚刚开源的 OSUM模型 ,正在重新定义语音理解!这个基于Whisper+Qwen2的「多面手」,单次推理即可输出带情感标签、说话人属性的转录文本。开发者实测显示,在智能客服场景中处理效率提升400%,错误率降低62%——这可能是2025年最实用的语音处理基础设施。

🚀 快速阅读

OSUM 是一款结合 Whisper 编码器和 Qwen2 LLM 的开源语音理解模型。

  1. 核心功能:支持语音识别、情感分析、说话者性别分类等多任务处理。
  2. 技术原理:采用 ASR+X 多任务训练策略,通过模态对齐优化提升泛化能力。

OSUM 是什么

OSUM(Open Speech Understanding Model)是由西北工业大学计算机学院音频、语音与语言处理研究组开发的开源语音理解模型。它结合了 Whisper 编码器和 Qwen2 LLM,旨在探索学术资源有限条件下语音理解模型的潜力。

OSUM 基于“ASR+X”多任务训练策略,利用约 5 万小时的多样化语音数据进行训练,在中文语音识别和多任务泛化能力方面表现优异。该模型不仅支持多种语音任务,还强调透明性,提供了公开的数据准备和训练方法,为学术界提供了宝贵的参考。

OSUM 的主要功能

OSUM-radar

  • 语音识别:将语音转换为文本,支持多种语言和方言。
  • 带时间戳的语音识别:输出每个单词或短语的时间起止点。
  • 语音事件检测:识别特定事件如笑声、咳嗽、背景噪音等。
  • 语音情感识别:分析语音中的情感状态(如高兴、悲伤、愤怒等)。
  • 说话风格识别:判断说话者的风格(如新闻播报、客服对话、日常口语等)。
  • 说话者性别分类:预测说话者的性别(男性或女性)。
  • 说话者年龄预测:估计说话者的年龄范围(如儿童、成年人、老年人)。
  • 语音转文本聊天:将语音输入转化为自然语言回复,用于对话系统。

OSUM 的技术原理

OSUM

  • Speech Encoder:使用 Whisper-Medium 模型(769M 参数),负责将语音信号编码为特征向量。
  • Adaptor:包含 3 层卷积和 4 层 Transformer,适配语音特征与语言模型输入。
  • LLM(语言模型):基于 Qwen2-7B-Instruct,使用 LoRA(Low-Rank Adaptation)微调以适应多任务需求。
  • 多任务训练策略:采用 ASR+X 训练范式,同时优化语音识别任务和附加任务(如情感识别、性别分类等)。
  • 自然语言 Prompt:通过不同的提示引导模型执行不同任务。

如何运行 OSUM

准备环境

在开始之前,请确保您的 Python 环境已经准备好。以下是推荐的操作流程。我们假设您已经在计算机上安装了 Conda 软件。如果没有,请参考:Linux 上 Miniconda 一键安装。我们强烈建议您在 Linux 系统的计算机上运行我们的代码。

# 创建一个新的 Conda 环境
conda create -n OSUM python=3.10
# 激活新创建的环境
conda activate OSUM
# 下载我们的代码并安装所需的 Python 包
git clone https://github.com/ASLP-lab/OSUM.git
cd OSUM
# 如果您在 GPU 上进行训练,请首先删除 requirements.txt 中的 torch_npu 条目。如果您使用的是 NPU,则无需操作。
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

推理

首先,让我们看看如何执行推理。主要使用文件:OSUM/examples/osum/infer.sh

下载检查点

从我们的 Hugging Face 仓库下载模型检查点。您可以使用 Python 下载:

# 从 Hugging Face 下载 .pt 文件
from huggingface_hub import hf_hub_download
pt_file_path = hf_hub_download(repo_id="ASLP-lab/OSUM", filename="infer.pt")  # 此时,pt_file_path 是下载的检查点的具体路径。

或者从 Hugging Face 网站下载:https://huggingface.co/ASLP-lab/OSUM

然后在 infer.sh 中设置 ckpt 变量:

ckpt_path=***/infer.sh

准备数据

我们支持两种类型的数据进行推理(遵循wenet开源框架的规范):

  • Raw 格式:您需要传入一个 JSONL 格式的文件,其中每一行是一个 JSON 字典格式。字典键值包括 "key":音频的唯一标识符,"wav":音频的具体路径(不限于 WAV 格式),以及 "txt":与音频对应的文本。在实际推理场景中,它可以是任何值,但请尽量确保该键值的存在以避免可能的代码级别错误。

具体示例:

{
   "key": "BAC009S0764W0122", "wav": "***/wav/BAC009S0764W0122.wav", "txt": "一线城市和二线城市也在进行调整"}
  • Shard_full_data 格式:更常用于训练以加速机器读取文件的速度,也可以用于推理。它将多个音频文件(例如,1000 个文件)保存在一个 tar 包中,并且 "key" 的内容作为文件名。以上述音频条目为例,在其 tar 包中,应将其转换为以下两个文件:BAC009S0764W0122.txtBAC009S0764W0122.wav。文件后缀是其对应的变量值,文件名是音频的唯一标识符。

当您准备好数据列表文件后,在 infer.sh 中设置数据文件变量:

data_path=***/data.jsonl

选择合适的任务

当前开源版本的 OSUM 支持多种任务。您可以根据 OSUM/examples/osum/conf/prompt_config.yaml 文件中的任务标签选择要推理的任务,并在 OSUM/examples/osum/infer.sh 中填写要推理的任务标签。同时,请注意 prompt_config.yaml 中的标签包含空格,infer.sh 中填写的标签需要手动删除空格(由于 shell 语法的限制)。

具体示例:

task="<TRANSCRIBE><GENDER>"  # 此标签用于 ASR + 性别任务

选择合适的 GPU/NPU

OSUM 模型是在华为 Ascend 910B 上训练的,但训练和推理代码同时支持 GPU 和 NPU。

该项目的推理大致需要 20G 的显存。如果您的机器上有这样的显卡,请设置要执行推理的显卡的序列号:

gpu_id=3

开始推理!

以下是 infer.sh 的完整示例:

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
lang=zh
prompt_file=conf/prompt_stage4.yaml
ckpt_path=./infer.sh
data_path=./data/aishell/data.list
data_type="raw"
gpu_id=3
output_dir=./output/aishell
task="<TRANSCRIBE><GENDER>"
bash decode/do_docode.sh --output_dir $output_dir --task $task --data_type $data_type --data_path $data_path --gpu_id $gpu_id --ckpt_path $ckpt_path --lang $lang --prompt_file $prompt_file

如何更直接地执行推理?

  • 单个音频文件的推理
# 在此文件中设置 checkpoint_path 变量为本地下载的 ckpt,然后在主函数中设置相应的音频路径和提示
python OSUM/examples/osum/runtime/infer_runtime.py
  • 部署并执行基于 Web 的推理
# 部署并启动服务,将在 localhost 127.0.0.1:7860 上部署一个测试网页。您还需要首先设置 checkpoint_path 变量。
python OSUM/examples/osum/runtime/web.py

训练

接下来,让我们看看如何进行训练。

主要涉及的文件有:OSUM/examples/osum/run_huawei_2p_master.shOSUM/examples/osum/run_huawei_2p_rank1.shOSUM/examples/osum/run_huawei_2p_rank2.sh

该项目默认支持多机训练。如果当前代码未修改,默认将执行 3 机 8 卡训练。

检查点下载

与推理部分的介绍相同。

数据准备

我们强烈建议使用 shard_full_data 格式以最大限度地减少加载数据所消耗的时间。单个 tar 文件中包含的音频文件数量建议为 1000

数据准备完成后,您需要将数据列表写入 OSUM/examples/osum/conf/data_config_huawei.yaml 文件。data_config_huawei.yaml 的具体内容如下:

data_name1:
  path: "***/shards_list.txt"
  weight: 3  # 权重,此数据列表文件中的数据量将增加三倍
data_name2:
  path: "***/shards_list.txt"
  weight: 1

shards_list.txt 的具体示例:

***/***/0001.tar
***/***/0002.tar
***/***/0003.tar
***/***/0004.tar
......

多机多卡训练

多台机器需要多个启动文件,并且需要将一台机器设置为协调机。对于当前代码,我们在协调机上执行文件 OSUM/examples/osum/run_huawei_2p_master.sh,并在其他机器上分别执行 OSUM/examples/osum/run_huawei_2p_rank1.shOSUM/examples/osum/run_huawei_2p_rank2.sh

我们应该确保这三个文件的内容几乎相同,除了这里的 node_rank

torchrun --nnodes=$num_nodes --nproc_per_node=$num_gpus --node_rank=0 \
         --master_addr=$HOST_NODE_ADDR --master_port=$HOST_PORT \

run_huawei_2p_master.sh 中,您需要将 node_rank 设置为 0,而在其他机器上,它应依次为 1、2、3、4、...

其他配置包括:

  • 机器数量
num_nodes=3
  • 协调机的 IP 地址
HOST_NODE_ADDR=192.168.0.15
  • 其他变量
checkpoint=*** # 如果为空,则将随机初始化
data=***  # 数据存储的目录
dir=***   # 新检查点将存储的位置

单机训练

您只需将 OSUM/examples/osum/run_huawei_2p_master.sh 中的机器数量设置为 1,并将协调机 IP 设置为本地机器 IP。

在单机训练期间,如果您想修改训练机器的数量,只需灵活修改:

export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7"

训练超参数

具体参数设置在以下文件中:https://github.com/ASLP-lab/OSUMOSUM/examples/osum/conf/config_llm_huawei_base-version.yaml

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
2月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
270 2
|
2月前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
1418 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
1月前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
263 120
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
567 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
2月前
|
自然语言处理 机器人 图形学
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
腾讯混元图像3.0,真的来了——开源,免费开放使用。 正式介绍一下:混元图像3.0(HunyuanImage 3.0),是首个工业级原生多模态生图模型,参数规模80B,也是目前测评效果最好、参数量最大的开源生图模型,效果可对…
757 2
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
|
1月前
|
缓存 物联网 PyTorch
使用TensorRT LLM构建和运行Qwen模型
本文档介绍如何在单GPU和单节点多GPU上使用TensorRT LLM构建和运行Qwen模型,涵盖模型转换、引擎构建、量化推理及LoRA微调等操作,并提供详细的代码示例与支持矩阵。
430 2
|
1月前
|
存储 机器学习/深度学习 人工智能
54_模型优化:大模型的压缩与量化
随着大型语言模型(LLM)的快速发展,模型规模呈指数级增长,从最初的数亿参数到如今的数千亿甚至万亿参数。这种规模扩张带来了惊人的能源消耗和训练成本,同时也给部署和推理带来了巨大挑战。2025年,大模型的"瘦身"已成为行业发展的必然趋势。本文将深入剖析大模型压缩与量化的核心技术、最新进展及工程实践,探讨如何通过创新技术让大模型在保持高性能的同时实现轻量化部署,为企业和开发者提供全面的技术指导。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
38_多模态模型:CLIP的视觉-语言对齐_深度解析
想象一下,当你看到一张小狗在草地上奔跑的图片时,你的大脑立刻就能将视觉信息与"小狗"、"草地"、"奔跑"等概念联系起来。这种跨模态的理解能力对于人类来说似乎是理所当然的,但对于人工智能系统而言,实现这种能力却经历了长期的技术挑战。多模态学习的出现,标志着AI从单一模态处理向更接近人类认知方式的综合信息处理迈出了关键一步。

热门文章

最新文章