☰
Youtu-Parsing-Omni音频解析指南:ASR转写、说话人分离与声学事件一次全搞定
2026/11/3 2:33:45 网站建设 项目流程

Youtu-Parsing-Omni音频解析指南:ASR转写、说话人分离与声学事件一次全搞定

Youtu-Parsing-Omni是腾讯优图实验室开源的 5B 参数全模态解析模型,给一段音频输入,即可一次性输出ASR 语音转写、说话人分离(Speaker)、时间戳分段与声学事件检测,全部打包进一份结构化 JSON——不用在 Whisper 转写、pyannote 分离、事件分类器之间来回拼接流水线。本文带你从能力介绍到上手命令,快速跑通音频解析全流程。

一、音频任务能解析出什么?🎧

在 README.md 的任务对照表中,--task audio对应的输出覆盖以下三类内容:

能力说明对应输出字段
🗣️ ASR 转写语音内容逐段转成文字,含时间戳segments[].asr(vocal/non_vocal分段)
🧍 说话人分离识别片段来自哪位说话人segments[].speaker
🔔 声学事件笑声、掌声、门声等声音事件acoustic events
🎬 音色/场景描述全局音色、场景摘要global_description(timbre / scene)

也就是说,一段会议录音或播客切片进来,模型会按时间轴切成若干segments,每段带上HH:MM:SS格式的时间戳、说话人标识、转写文本;非人声片段也会被标注出来,同时给出整段音频的全局描述。

在官方 OmniParsingBench 评测中,Youtu-Parsing-Omni 的Audio 单项得分 78.08,是开源权重模型中的最高分(超过 Gemini-3-Pro 的 76.74),可见其音频解析能力相当能打。

二、输出长什么样?📦

所有任务的输出都遵循同一套OmniSchema信封:顶层是modality/subtype字段加segments时间轴数组,音频任务的modality为audio。结构示意如下:

{ "modality": "audio", "segments": [ { "start_time": "00:00:01", "end_time": "00:00:08", "type": "vocal", "speaker": "speaker_1", "asr": "大家好,欢迎收听本期节目……", "acoustic_event": "laughter" } ], "global_description": { "caption": "……", "narrative": "……", "scene": "室内播客录制,两位说话人交替对话" } }

时间戳统一使用HH:MM:SS格式,长音频会被切分处理,无需自己预处理切段。

这套统一 schema 的意义在于:同一份代码、同一套解析逻辑,同时支持文档、图片、图表、音频和视频——音频只是它七大解析家族之一,这也是它叫 "Parsing-Omni" 的原因。

三、一键上手:安装与运行命令 🚀

1. 环境安装

git clone https://gitcode.com/tencent_hunyuan/Youtu-Parsing-Omni # 进入 youtu-parsing/youtu_parsing_omni 后二选一: bash scripts/setup_env.sh # vLLM 推理服务(transformers==5.2.0) bash scripts/setup_env.sh --transformers # Transformers 本地推理(transformers==5.10.2)

两点提醒:

  • 需要Python >= 3.10 和 CUDA GPU;两种模式固定了不同的 transformers 版本,请装入独立的 Python 环境
  • 系统需可访问ffmpeg(音频/视频输入依赖)

2. 启动推理服务(vLLM 方式)

MODEL=tencent/Youtu-Parsing-Omni DATA_ROOT=/path/to/media GPU=0 bash scripts/vllm.sh

服务启动在http://127.0.0.1:8000/v1,为 OpenAI 兼容接口。注意DATA_ROOT是服务端唯一允许读取本地音频的目录,音频文件必须放在其下。

3. 解析你的第一个音频文件 🎵

python examples/infer_vllm.py --task audio --media /path/to/media/speech.wav

如果用 Transformers 本地推理,命令几乎一致:

MODEL=tencent/Youtu-Parsing-Omni python examples/infer_transformers.py --model $MODEL --task audio --media /path/to/media/speech.wav

请求时注意两个关键设置(详见 README.md 的 Output format 部分):

  • 开启解析模式:chat_template_kwargs = {"enable_thinking": false, "enable_parsing": true},对应模板 chat_template.jinja
  • 贪心解码(temperature=0),以EO/<|end_of_text|>停止,并保留特殊 token(坐标、边界信息就藏在其中)

四、音频是怎么被处理的?🔬

对好奇原理的朋友,仓库里的源码可以直接看门道:

  • 音频前端:feature_extraction_youtu_vita.py 中YoutuVITAFeatureExtractor默认按16kHz 采样率处理,长音频会被切成2~30 秒的块(audio_chunk_min_second=2、audio_chunk_max_second=30),每个块前自动注入HH:MM:SS时间戳——这正是输出时间戳的来源
  • 统一编码器:由 config.json 可见,图像、音频、视频共享同一个 Youtu-Omni-Encoder(video_fusion_layer_freq控制音视频在哪些层做跨模态融合),音频 token 与视觉 token 共享同一套时间坐标系,"听" 和 "看" 在编码器内部就完成了对齐
  • 模型配置:configuration_youtu_vita.py 定义了youtu_vita架构,音频编码器为 28 层、128 mel 频带的 Transformer

对新手来说,了解这些参数的用处在于:长录音不用手动切段,模型自己分块并保时间戳,转写完直接按时间戳检索定位。

五、常见问题 FAQ ❓

Q1:只想要文字转写,不用说话人分离,可以吗?可以。输出是完整的 JSON,直接取segments中的asr字段拼接即可,多余字段忽略不影响。

Q2:支持哪些音频格式?常见格式(wav、mp3 等)均可,服务端通过audio_url接收;本地解码依赖ffmpeg,能解的格式它基本都能吃。

Q3:音频和视频能一起解析吗?能。--task natural_video/textrich_video会把视频帧和音轨一起送入模型,输出同时包含视觉元素和音频轨道(ASR + 事件),且附带整段视频的 Markdown 结构化报告。

Q4:效果如何量化参考?OmniParsingBench 的 Audio 单项 78.08 分(开源最高);文档解析在 OmniDocBench v1.6 上 Overall 达 96.96。

写在最后 ✍️

Youtu-Parsing-Omni 把 ASR 转写、说话人分离、声学事件检测塞进了同一个 5B 模型和同一份 JSON 输出,对想快速给音频"上结构化"的场景非常友好。更多任务(文档、图表、几何图形、视频)的用法可继续阅读 README.md,音频处理细节可翻阅 processing_youtu_vita.py 与 tokenization_youtu_vita.py。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询