回声与多人重叠讲话,是语音交互和实时通信中两类常见的信号干扰。扬声器回放进入麦克风会形成声学回声,多人同时发声则会产生语音混叠,直接影响语音识别、语音唤醒、对话系统和会议通话的输入质量。

Qwen Audio 团队开源两项语音增强成果:FLASepformer 面向 8 kHz 单声道双说话人分离,通过线性复杂度注意力提升长序列处理效率;JAEC 面向 16 kHz 实时声学回声消除,以 10 ms 为一帧处理音频,固定算法延迟为 22 ms,并提供可观察的时延估计与线性处理过程。

两项成果也可用于语音大模型的数据工程环节,在转写、切分、说话人标注和语音—文本对齐之前先处理重叠语音与回声,减少低质量信号向标注和训练数据传播。

魔搭模型合集:

https://modelscope.cn/collections/iic/FLASepformer-JAEC

 

FLASepformer:高效语音分离模型

FLASepformer 面向长语音序列的高效单声道语音分离模型。模型输入为一段包含两位说话人的 8 kHz 单声道混合语音,输出为两路独立的说话人语音。

在餐厅、会议室、访谈或多人通话中,不同说话人的声音经常同时出现。麦克风会把这些声音叠加成一条混合音频,而听者通常只想听清其中某个人的内容。人类可以凭借选择性听觉在嘈杂人群中关注特定说话人,这就是经典的“鸡尾酒会问题”;让自动系统获得类似的多说话人分离能力,则一直是语音处理领域的重要挑战。

语音分离(Speech Separation)的目标是把重叠在同一段录音中的多个说话人信号拆分为相互独立的语音流,为后续的收听、转写和分析提供更清晰的输入。它与主要去除环境噪声的语音降噪不同,也不要求像目标说话人提取那样预先提供某位说话人的参考语音;

本次发布模型面向干净条件下的双说话人分离,并输出两个说话人的语音。

FLASepformer 提出 Focused Linear Attention 和门控模块,将注意力计算复杂度从 O(N²) 降为 O(N),形成 FLA-SepReformer 与 FLA-TFLocoformer 两种结构。

FLASepformer 高效语音分离架构

在论文的 RTX A800、30 秒混合音频设置下,FLA-SepReformer-T/B/L 的推理速度分别达到对应 SepReformer 基线的 2.29 倍、1.91 倍和 1.49 倍,GPU 显存占用分别为 15.8%、20.9% 和 31.9%,同时保持有竞争力的分离性能。

FLASepformer 性能对比

JAEC:可解释型回声消除

AEC 是一个用于实时通信的 16 kHz 声学回声消除前端,包含神经网络时延估计(TDE)和自适应线性处理(LP)运行时。它接收麦克风信号和远端参考信号,并返回 LP 输出。

时延估计 TDE 与线性处理 LP 均由神经网络实现:TDE 网络估计远端参考与麦克风信号的相对时延并完成对齐,LP 网络估计线性回声并完成抵消;可观察的时延与线性处理过程便于通信链路调试。

JAEC 双神经网络端到端 AEC 链路

当前开源的 16 kHz 版本每次处理 160 个采样点(10 ms),固定算法延迟 352 个采样点(22 ms),输出 TDE+LP 前端结果,暂不包含非线性处理 NLP 网络。

支持的平台

所附带的 Arm64 库是 macOS Mach-O 二进制文件,不支持 Linux Arm64、Android 或 iOS。本软件包不包含 32 位运行时。

JAEC 支持平台

运行时性能

每个 RTF(实时因子)是 10 次运行的中位数。计时区域涵盖 Python 每帧推理时间,不包括 WAV I/O 和模型初始化。

JAEC 运行时性能

语音增强进入语音大模型数据工程

对语音大模型而言,增强模型的价值同样体现在数据入口。它们可以在 VAD、ASR、说话人日志和语音—文本对齐之前先清理信号:FLASepformer 拆分重叠说话人,JAEC 抵消回放链路产生的回声,降噪模型抑制环境噪声,从而降低错误向标注、配对和训练数据传播的概率。

语音增强数据工程流程

工程实践中建议保留原始音频、增强音频、模型版本、质量分数和处理日志。质量门未通过的样本可重新增强或转人工复核,避免不可逆清洗。

部署与使用

JAEC 部署

模型下载

modelscope download --model iic/speech_jaec_aec_16k

 

JAEC 需要 ModelScope > 1.39.1(PyPI 版本可用前可先装官方 master 分支)。

python -m pip install -U "modelscope>1.39.1"

 

在此之前,请从官方 master 分支安装 ModelScope:

python -m pip install -U \
  "modelscope @ git+https://github.com/modelscope/modelscope.git@master"

 

使用两个等长的 16 kHz、单声道、PCM16 WAV 文件运行推理:

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
 
aec = pipeline(
    Tasks.acoustic_echo_cancellation,
    model='iic/speech_jaec_aec_16k',
    device='cpu',
    trust_native_code=True,
)
 
result = aec(
    {
        'nearend_mic': 'nearend_mic.wav',
        'farend_speech': 'farend_speech.wav',
    },
    output_path='output.wav',
)
pcm16_bytes = result[OutputKeys.OUTPUT_PCM]

 

FLASepformer 部署

模型 pipeline 输入为一个 8000 Hz 采样率的单声道 wav 文件,内容为两位说话人的混合语音,输出为分离后的两个单声道 PCM 音频。

模型下载

modelscope download --model iic/speech_flatsepreformer_separation_temporal_8k_base_libri2mix100

 

安装 ModelScope 及推理所需依赖:

pip install modelscope torch numpy soundfile

 

根据需要从以下两个模型 ID 中选择一个:

model_id = 
'damo/speech_flatflocoformer_separation_timefrequency_8k_middle_libri2mix360'
# model_id = 
'iic/speech_flatsepreformer_separation_temporal_8k_base_libri2mix100'

 

完整推理代码:

import numpy as np
import soundfile as sf
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
 
# input 可以是 URL,也可以是本地文件路径;音频必须为 8 kHz 单声道 wav
input = 'https://modelscope.cn/api/v1/models/damo/speech_flatflocoformer_separation_timefrequency_8k_middle_libri2mix360/repo?Revision=master&FilePath=examples/mix_speech1.wav'
model_id = 'damo/speech_flatflocoformer_separation_timefrequency_8k_middle_libri2mix360'
 
separation = pipeline(Tasks.speech_separation, model=model_id)
result = separation(input)
 
for i, signal in enumerate(result[OutputKeys.OUTPUT_PCM_LIST]):
    save_file = f'output_spk{i + 1}.wav'
    sf.write(save_file, np.frombuffer(signal, dtype=np.int16), 8000)
Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐