尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PaddleSpeech GE2E 说话人编码器实战:从多数据集预处理到说话人嵌入提取与迁移学习

发布时间:2026/9/25 7:47:00

资讯中心
01
ARTICLE

PaddleSpeech GE2E 说话人编码器实战:从多数据集预处理到说话人嵌入提取与迁移学习

PaddleSpeech GE2E 说话人编码器实战:从多数据集预处理到说话人嵌入提取与迁移学习
人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载导读本文围绕 PaddleSpeech 仓库中 examples/other/ge2e 实验完整讲解如何训练一个基于GE2EGeneralized End-to-End Loss的文本无关说话人编码器从支持的数据集准备、Mel 频谱预处理到 LSTM 说话人编码器的训练、断点恢复与推理再到将训练好的编码器迁移到多说话人语音合成TTS中提取说话人嵌入utterance embedding。读完本文你将掌握在 PaddleSpeech 中一键跑通声纹编码器完整流程的方法并理解 GE2E-softmax 损失、相似度矩阵、EER 指标等核心原理在源码中的具体实现。实验背景以说话人验证为任务的编码器训练本实验的训练任务是文本无关说话人验证text-independent speaker verification模型是 GENERALIZED END-TO-END LOSS FOR SPEAKER VERIFICATION 论文中的说话人编码器并采用GE2E-softmax loss作为训练损失。该实验是整个从说话人验证迁移到多说话人 TTS 合成链路的一部分其下游应用是 examples/aishell3/vc0多说话人语音合成/音色转换实验。训练好的说话人编码器用于从语音中提取说话人嵌入utterance embedding这些嵌入随后可以作为 TTS 模型的说话人条件输入从而让合成语音具备特定说话人的音色。模型结构源码级解读模型定义在 paddlespeech/vector/models/lstm_speaker_encoder.py 的LSTMSpeakerEncoder类中其结构如下输入每段语音的 Mel 频谱帧序列特征维度为n_mels默认 40LSTM 编码器nn.LSTM(n_mels, hidden_size, num_layers)默认 3 层、隐藏单元 256线性投影 激活nn.Linear(hidden_size, output_size)后接 ReLU将 LSTM 末层输出映射为 256 维的说话人嵌入L2 归一化对嵌入做F.normalize使嵌入落在单位超球面上可学习的相似度参数similarity_weight初始化为 10.0与similarity_bias初始化为 -5.0用于对相似度矩阵做仿射变换是 GE2E 损失中的关键可训练参数。训练时模型对每个 batch 的嵌入计算相似度矩阵并返回(loss, eer)两个量GE2E-softmax 交叉熵损失以及该 batch 上通过 ROC 曲线与brentq插值计算的EER等错误率后者仅作监控指标、不参与反向传播。训练脚本会在每个 step 的日志中同时记录loss与err并写入 VisualDL 标量曲线。数据准备支持的数据集与目录约定实验支持以下 5 个多说话人数据集均只使用其中的训练子集数据集语言使用范围LibriSpeechtrain-other-500英语仅train-other-500子集VoxCeleb1英语Dev A~Dev D 音频需合并解压VoxCeleb2英语Dev A~Dev H 音频需合并解压Aidatatang-200zh中文普通话训练集Magicdata中文普通话训练集上述数据集需自行从各官方页面下载。如果你希望使用其他数据集只要其目录结构满足后续预处理的要求同样可以接入。为什么要合并多个数据集多说话人数据集被合并作为训练数据虽然这些数据集自带转写文本但本实验不使用转写仅使用语音。合并的目的是扩大训练数据量让编码器见到更多说话人与更多发音变化。由于多个数据集的说话人编号相互独立、容易冲突预处理阶段会把数据集名称前缀拼接到说话人 id 上从而保证全局说话人身份唯一。这一点在 dataset_processors.py 的_process_speaker中体现speaker_name _.join(speaker_dir.relative_to(datasets_root).parts)即说话人目录在数据集根目录下的相对路径如LibriSpeech/train-other-500/xxxx会被以_连接后作为输出目录名。一键式训练流程run.sh 与 stage 控制实验入口脚本是 examples/other/ge2e/run.sh它通过stage/stop-stage参数将整个流程划分为 3 个阶段./run.sh # 跑完全部阶段预处理 → 训练 → 推理 ./run.sh --stage 0 --stop-stage 0 # 只做数据预处理 ./run.sh --stage 1 --stop-stage 1 # 只做模型训练 ./run.sh --stage 2 --stop-stage 2 # 只做嵌入推理脚本默认的全局变量如下均可通过命令行覆盖变量默认值含义gpus0使用的 GPU 编号datasets_root~/datasets/GE2E存放各数据集的根目录preprocess_pathdump预处理输出目录dataset_nameslibrispeech_other需要预处理的 dataset 名逗号分隔train_output_pathoutput训练输出目录infer_inputinfer_input推理输入目录infer_outputinfer_output推理输出目录ckpt_namestep-10000推理使用的 checkpoint 名注意stage/stop-stage通过 utils/parse_options.sh 解析不能与$1、$2等位置参数混用。脚本还通过 examples/other/ge2e/path.sh 设置环境MAIN_ROOT指向仓库根目录BIN_DIR指向paddlespeech/vector/exps/ge2e即后续所有 Python 入口preprocess.py、train.py、inference.py都位于该目录下。数据预处理详解命令与参数预处理由./local/preprocess.sh调用${BIN_DIR}/preprocess.py完成./local/preprocess.sh ${datasets_root} ${preprocess_path} ${dataset_names}对应的 Python 入口 preprocess.py 支持以下参数参数说明--datasets_root包含多个已解压数据集的根目录--output_dir保存预处理结果的目录--dataset_names逗号分隔的待处理数据集名librispeech_other、voxceleb1、voxceleb2、aidatatang_200zh、magicdata--skip_existing跳过已存在的同名输出文件适用于中断后断点续跑--no_trim不做静音裁剪不推荐预处理会用到webrtcvad包做静音检测若未安装会在启动时报错如安装确有困难可加--no_trim关闭该依赖。输入目录结构假设datasets_root为~/datasets/GE2E其下应有GE2E ├── LibriSpeech │ └── train-other-500/ └── (other datasets)注意对于 LibriSpeech预处理逻辑process_librispeech只会扫描LibriSpeech/train-other-500目录下的说话人子目录并匹配*.flac文件对于 VoxCeleb1则读取vox1_meta.csv元数据仅保留来自澳洲、加拿大、爱尔兰、英国、美国推定英语母语的说话人匹配*.wavVoxCeleb2、Aidatatang-200zh、Magicdata 则分别从wav/、train/目录扫描全部说话人。这些细节见 dataset_processors.py。预处理流水线源码级解读预处理核心类为 audio_processor.py 中的SpeakerVerificationPreprocessor每段语音依次经过加载与重采样librosa.load(..., srNone)按原始采样率读入再统一重采样到 16 kHz响度归一化normalize_volume将音频均值响度调整到目标 dBFS默认 -30 dBFS即响度归一化而非峰值归一化且只允许增大不允许减小长静音裁剪trim_long_silences基于 webrtcvad 的语音活动检测VAD对静音段做移动平均平滑并将超过vad_max_silence_length的连续静音帧膨胀补齐后裁剪使无声片段不超过阈值Mel 频谱提取melspectrogram用 librosa 计算 40 维 Mel 频谱默认窗长 25 ms、帧移 10 ms输出形状为[T, C]并转成 float32切分为 partial utterancescompute_partial_slices与extract_mel_partials将整段频谱按partial_n_frames默认 160 帧约 1600 ms切成多个带 50% 重叠的子片段最后一段若有效覆盖率不足min_pad_coverage默认 0.75则丢弃否则补零保留。预处理后每条 utterance 的 Mel 频谱以.npy格式保存最终形成说话人-语句两层目录结构dataset_root ├── dataset01_speaker01/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy ├── dataset01_speaker02/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy ├── dataset02_speaker01/ │ ├── utterance01.npy │ ├── utterance02.npy │ └── utterance03.npy └── dataset02_speaker02/ ├── utterance01.npy ├── utterance02.npy └── utterance03.npy预处理还支持 16 进程并行mp.Pool(16)加速并为每个说话人生成_sources.txt记录文件名与源音频的对应关系便于--skip_existing续跑。预处理相关默认配置预处理参数硬编码在 paddlespeech/vector/exps/ge2e/config.py 的data节点中默认值如下配置项默认值含义sampling_rate16000 Hz音频统一采样率audio_norm_target_dBFS-30响度归一化目标值vad_window_length30 msVAD 窗口长度10/20/30 ms 三档vad_moving_average_width8VAD 移动平均平滑宽度vad_max_silence_length6允许的最大连续静音帧数mel_window_length25 msMel 窗长mel_window_step10 msMel 帧移n_mels40Mel 频带数partial_n_frames1601600 ms单个 partial 的频谱帧数min_pad_coverage0.75partial 最小有效覆盖率partial_overlap_ratio0.5相邻 partial 的重叠率模型训练详解命令与参数训练由./local/train.sh调用${BIN_DIR}/train.py完成CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${preprocess_path} ${train_output_path}对应的 train.py 参数说明参数说明--data预处理后的数据集路径即上一步的preprocess_path--output结果保存目录通常是runs的子目录--ngpuGPU 数量ngpu 0时使用 CPU--config一个.yaml配置文件用于覆盖默认配置默认配置编码在config.py中--opts命令行键值对进一步覆盖配置文件必须作为最后一个参数多个键值对以空格分隔--checkpoint_path训练前加载的 checkpoint 路径不含扩展名同名.pdparams参数文件与.pdopt优化器状态文件会被同时加载优先级高于从--output目录自动恢复另外CUDA_VISIBLE_DEVICES环境变量用于指定可见的 CUDA 设备多卡时--ngpu大于 1 会通过dist.spawn启动分布式训练。训练输出目录结构--output目录包含VisualDL 日志文件、文本日志文件、配置文件以及checkpoints子目录内含参数文件与优化器状态文件。如果--output中已有训练结果训练前会自动加载最近的参数文件与优化器状态文件实现断点续训而显式传入--checkpoint_path的优先级更高。训练配置与关键实现默认训练配置同样位于 config.py配置项默认值含义learning_rate_init1e-4Adam 初始学习率speakers_per_batch64每个 batch 采样的说话人数 Nutterances_per_speaker10每个说话人采样的语句数 Mmax_iteration1560000最大训练迭代步数save_interval10000每多少步保存一次 checkpointvalid_interval10000每多少步做一次验证训练时使用Adam优化器并施加ClipGradByGlobalNorm(3)全局梯度裁剪setup_dataloader中用MultiSpeakerSampler实现两重分层采样先随机采样 N 个说话人再为每个说话人随机采样 M 条语句配合RandomClip随机裁剪出固定帧数的 Mel 片段组成一个 batch。数据加载使用 16 个 worker。训练细节见 speaker_verification_dataset.py。每个训练 step 还会记录train/loss、train/eer以及可学习参数similarity_weight、similarity_bias到 VisualDL。推理为每段语音提取说话人嵌入命令与参数训练完成后可用./local/inference.sh调用${BIN_DIR}/inference.py为数据集中每条语句生成说话人嵌入CUDA_VISIBLE_DEVICES${gpus} ./local/inference.sh ${infer_input} ${infer_output} ${train_output_path} ${ckpt_name}inference.sh实际拼接的命令为python3 ${BIN_DIR}/inference.py \ --input${infer_input} \ --output${infer_output} \ --checkpoint_path${train_output_path}/checkpoints/${ckpt_name} \ --ngpu1inference.py 参数说明参数说明--input用于推理的数据集目录--output结果保存目录与输入保持相同目录结构每条语句对应一个*.npy嵌入文件--checkpoint_path要加载的 checkpoint 路径不含扩展名--pattern过滤音频文件的通配符模式默认*.wav--ngpuGPU 数量ngpu 0时使用 CPU推理原理源码级解读推理时先通过paddle.load(checkpoint_path .pdparams)加载模型参数并置为eval模式然后对每段音频执行embed_utterance复用训练时的预处理流程重采样、响度归一化、VAD 静音裁剪得到波形extract_mel_partials切出多个 partial Mel 片段形状为[B, T, C]在no_grad下送入 LSTM 编码器embed_sequences(..., reduceTrue)先对每个 partial 得到归一化嵌入再对所有 partial 的嵌入取平均并再次归一化得到整段语音唯一的说话人嵌入向量。最终每个嵌入以*.npy保存到输出目录下与原音频对应的相对路径例如输入infer_input/speaker1/utt.wav会生成infer_output/speaker1/utt.npy。预训练模型项目提供了训练好的预训练模型压缩包名为ge2e_ckpt_0.3.zip。其训练历史为先在LibriSpeech-other-500 与 VoxCeleb1上训练到 1560k 步再在Aidatatang-200zh 与 Magicdata上继续训练到 3000k 步。你可以直接下载该 checkpoint 跳过训练立即对自定义语音进行嵌入提取或将其作为微调起点。迁移应用从声纹验证到多说话人语音合成本实验的核心产出——说话人编码器——被用于从语音中提取说话人嵌入其典型下游应用是 examples/aishell3/vc0 中的多说话人语音合成/音色转换实验可进一步参考examples/aishell3下的 tts3、vc1、vc2、vits 等实验。在这些实验中说话人嵌入作为条件输入注入 TTS 模型使合成语音在音色上逼近目标说话人。这一先做声纹验证预训练、再迁移到 TTS的范式即论文《Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis》的核心思想。参考文献Generalized End-to-end Loss for Speaker VerificationGE2E 论文GE2E-softmax loss 的来源Transfer Learning from Speaker Verification to Multispeaker Text-To-Speech Synthesis迁移学习范式论文如需继续深入可阅读实验入口脚本、模型定义、预处理实现、训练实现、推理实现、默认配置。赞分享人工智能语音音频NLP媒体生成【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech GE2E 说话人编码器训练实战从数据预处理、LSTM 编码器训练到声纹嵌入推理PaddleSpeech GE2E 说话人编码器训练实战从数据预处理、LSTM 编码器训练到声纹嵌入推理 本篇技术指南以 PaddleSpeech 仓库中 p人工智能语音音频NLP媒体生成PaddleSpeech GE2E 说话人编码器推理实战从 WAV 音频到说话人 Embedding 的完整流程PaddleSpeech GE2E 说话人编码器推理实战从 WAV 音频到说话人 Embedding 的完整流程 导读 本文聚焦 PaddleSpeech 仓人工智能语音音频NLP媒体生成FanControl传感器识别失败华硕主板CPU温度0°C修复完整指南FanControl传感器识别失败华硕主板CPU温度0°C修复完整指南 你刚装好FanControl刷新传感器列表CPU温度还是0°C风扇转速一片空白。人工智能语音音频NLP媒体生成上一篇Amlogic S9xxx系列设备Armbian部署疑难解决与技术方案下一篇技术深度解析Armbian系统在Amlogic、Rockchip和Allwinner设备上的高级部署与优化指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。