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月前
|
缓存 自然语言处理 算法
大模型意图识别工程化实践
本文重点介绍大模型意图识别能力在智能电视核心链路中的落地过程和思考,对比了基础模型、RAG 、以及7b模型微调三种方案的优缺点。
1376 120
|
1月前
|
人工智能 自然语言处理 搜索推荐
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
ViDoRAG 是阿里巴巴通义实验室联合中国科学技术大学和上海交通大学推出的视觉文档检索增强生成框架,基于多智能体协作和动态迭代推理,显著提升复杂视觉文档的检索和生成效率。
113 8
ViDoRAG:开源多模态文档检索框架,多智能体推理+图文理解精准解析文档
|
2月前
|
机器学习/深度学习 存储 人工智能
《DeepSeek情感分析技术:突破与创新,精准判断情感倾向》
在数字化时代,文本数据激增,情感分析成为关键需求。DeepSeek作为AI领域的佼佼者,基于Transformer架构实现深度语义理解,通过多模态融合技术全面感知情感,结合领域自适应与迁移学习跨越不同场景,采用对抗训练提升鲁棒性,并融合情感词典与知识图谱增强理解。这些创新使DeepSeek能精准判断情感倾向,为企业和研究提供有力支持。
403 20
|
4月前
|
人工智能 监控 算法
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
3D-Speaker是阿里巴巴通义实验室推出的多模态说话人识别开源项目,结合声学、语义和视觉信息,提供高精度的说话人识别和语种识别功能。项目包含工业级模型、训练和推理代码,以及大规模多设备、多距离、多方言的数据集,适用于多种应用场景。
804 18
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
|
4月前
|
人工智能 自然语言处理 语音技术
Ultravox:端到端多模态大模型,能直接理解文本和语音内容,无需依赖语音识别
Ultravox是一款端到端的多模态大模型,能够直接理解文本和人类语音,无需依赖单独的语音识别阶段。该模型通过多模态投影器技术将音频数据转换为高维空间表示,显著提高了处理速度和响应时间。Ultravox具备实时语音理解、多模态交互、低成本部署等主要功能,适用于智能客服、虚拟助手、语言学习等多个应用场景。
279 14
Ultravox:端到端多模态大模型,能直接理解文本和语音内容,无需依赖语音识别
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型的多样性:从语言处理到多模态智能
本文介绍了大模型在多个领域的应用,包括自然语言处理(如Transformer、GPT、BERT、T5)、计算机视觉(如CNN、ViT、GAN)、多模态智能(如CLIP、DALL-E)、语音识别与合成(如Wav2Vec、Tacotron)以及强化学习(如AlphaGo、PPO)。这些模型展现了卓越的性能,推动了人工智能技术的发展。
134 1
|
7月前
|
机器学习/深度学习 人工智能 编解码
深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
【9月更文挑战第2天】深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
 深入探索AI文生语音技术的奥秘:从文本输入到逼真语音输出的全链条语音合成过程解析
|
7月前
|
机器学习/深度学习 自然语言处理 语音技术
FunAudioLLM与其他语音模型多维度对比简析
FunAudioLLM与其他语音模型多维度对比简析
223 13
|
8月前
|
人工智能 数据挖掘 语音技术
通义语音AI技术问题之说话人识别的两种类型分类如何解决
通义语音AI技术问题之说话人识别的两种类型分类如何解决
138 5
|
8月前
|
数据采集 机器学习/深度学习 自然语言处理
如何提升模型对特定小语种的理解和生成能力?
如何提升模型对特定小语种的理解和生成能力?

热门文章

最新文章