当前位置: 首页 > backend >正文

李宏毅NLP-12-语音分类

目录

在这里插入图片描述

相关任务

在这里插入图片描述
在这里插入图片描述
说话人识别(Speaker Recognition/Identification) 属于多分类问题

  • 判断一段语音属于哪个说话人(如区分 A、B、C 的语音);
  • 技术本质:多分类问题
    • 输入:一段语音;
    • 模型:提取语音的说话人特征(如声纹,隐含音色、韵律等个人特质);
    • 输出:对所有候选说话人的概率分布(如 A:0.2,B:0.6,C:0.1),选择概率最高的类别(如 B)作为识别结果。

在这里插入图片描述
说话人验证(Speaker Verification) 的核心逻辑,属于二分类任务

  • 目标:判断两段语音是否来自同一说话人(区别于 “说话人识别” 的多分类,这里只回答 “是 / 否”);
  • 核心逻辑:计算两段语音的声纹相似度,通过阈值判断是否为同一人。

流程拆解

  1. 输入:两段语音(可来自不同时间、不同内容);
  2. 模型:提取两段语音的说话人嵌入(声纹特征),计算它们的相似度标量(如余弦相似度、模型输出的匹配分数);
  3. 决策
    • 若标量 > 阈值 → 判定为 Same(同一人);
    • 若标量 < 阈值 → 判定为 Different(不同人)。
  • 声纹特征:模型学习说话人的独特特质(如音色、发音习惯、韵律),生成高维嵌入;
  • 阈值设计:平衡 “准确率” 和 “召回率”(如银行场景设高阈值,宁可漏判也不错判,保障安全)。

在这里插入图片描述
话人验证系统的核心评估指标 —— 等错误率(Equal Error Rate, EER) ,结合混淆矩阵误差率曲线,解析系统在 “漏判(FN)” 和 “误判(FP)” 之间的权衡:

定义

误差类型定义风险场景
False Negative (FN) Rate 漏判率同一说话人被判定为 “不同” 的概率银行场景:真实客户被拒绝(体验差)
False Positive (FP) Rate 误判率不同说话人被判定为 “同一” 的概率银行场景:陌生人冒充客户(资金风险)
Equal Error Rate (EER) 等错误率FN 率 = FP 率 时的错误率,是系统性能的核心指标(值越低,性能越好)

混淆矩阵随阈值的变化

  • 混淆矩阵的四个指标:

    • TP(True Positive):同一说话人被正确判定为 “同一”;

    • FP(False Positive):不同说话人被错误判定为 “同一”;

    • FN(False Negative):同一说话人被错误判定为 “不同”;

    • TN(True Negative):不同说话人被正确判定为 “不同”。

  • 阈值对结果的影响:

    • 阈值↑(如 1.0→0.0):判定更 “宽松”→ TP 和 FP 增加,FN 和 TN 减少(更多语音被判定为 “同一人”);

    • 阈值↓(如 0.0→1.0):判定更 “严格”→ TP 和 FP 减少,FN 和 TN 增加(更多语音被判定为 “不同人”)

    • 例如:

      • 阈值 = 1.0(最严格):仅 0 个 TP(同一人也被拒),100 个 FN(漏判率 100%);

      • 阈值 = 0.0(最宽松):100 个 FP(陌生人全被接受,误判率 100%)。

EER 的几何意义(ROC 曲线的交点)

  • 横轴(FP Rate):误判率(不同人被当成同一人的概率);
  • 纵轴(FN Rate):漏判率(同一人被当成不同人的概率);
  • 蓝色曲线:随阈值降低,FP 率上升(误判变多),FN 率下降(漏判变少);
  • 橙色对角线:FP 率 = FN 率 的参考线。

蓝色曲线与橙色对角线的交点,即 FP 率 = FN 率 时的误差率。此时,系统在 “漏判” 和 “误判” 之间达到最优平衡

  • 高安全场景(如银行):优先降低 FP 率(避免陌生人冒充),可设置高阈值(牺牲部分 FN 率,接受更多真实客户被拒);
  • 高体验场景(如语音助手):优先降低 FN 率(避免真实用户被拒),可设置低阈值(牺牲部分 FP 率,接受更多陌生人冒充风险);
  • EER 作为基准:比较不同说话人验证模型的性能,EER 越低,模型鲁棒性越强。

在这里插入图片描述
说话人分离(Speaker Diarization) 的核心任务是解决“谁在什么时候说话?”问题,比如在多说话人交互场景(如会议、电话会议)中,自动区分 “不同说话人” 的发言时段,给每个语音片段标注说话人身份(如 “说话人 A 在 0-10 秒发言,说话人 B 在 12-25 秒发言”)。其他应用场景:

  • 会议记录:自动拆分参会者的发言,辅助生成会议纪要;
  • 电话通话:尤其是多方通话,区分不同参与者的对话;
  • 视频处理:为影视、直播的语音流标注说话人,辅助字幕生成或内容分析。

核心流程:两步法(Segmentation + Clustering)

  • Step 1: Segmentation(分段)

    • 目标:将长语音切分为短片段(utterances),每个片段尽量对应单一说话人的连续发言(减少跨说话人的片段)。

    • 实现方式:

      • 基于静音检测(能量阈值,识别静音区间,分割出语音段);
      • 进阶方法:结合语音活动检测(VAD)、说话人变化检测(如声纹突变检测)。
  • Step 2: Clustering(聚类)

    • 目标:对分段后的语音片段,按说话人身份聚类(相同说话人的片段归为一类)。

    • 实现方式:

      • 提取每个片段的 说话人特征(如声纹嵌入,类似说话人识别中的特征);
      • 用聚类算法(如 K-Means、层次聚类)将特征相似的片段分组;
      • 说话人数量:可预先已知(如会议有 3 人,设 K=3),也可未知(模型自动推断数量)。

Spearker Embedding

在这里插入图片描述
说话人验证(Speaker Verification)的两种实现方式,核心是通过比较语音特征判断是否为同一说话人:

一、直接验证方式

  • 输入:两段语音(不同说话人或同一说话人的语音);

  • 模型(Model):直接计算两段语音的相似度,输出一个标量(scalar);

  • 判断:若标量 > 阈值(threshold),判定为 “同一说话人(Same)”;否则为 “不同说话人(Different)”。

  • 优点:端到端黑盒模型,直接输出相似度结果,无需显式提取说话人特征,模型内部隐含特征学习。

二、基于嵌入的验证方式

  • 特征提取(Some Method):分别对两段语音提取 “说话人嵌入(Speaker Embedding)”(蓝色和橙色向量,编码说话人身份特征);
  • 相似度计算(Calculate Similarity):比较两个嵌入向量的相似度(如余弦相似度),输出标量;
  • 判断:同直接验证方式,通过阈值判断是否为同一说话人。
  • 优点:说话人嵌入独立于验证模型,可复用(如用于说话人识别、TTS 语音克隆);嵌入向量直接反映说话人特征差异,便于分析和优化。

在这里插入图片描述
说话人验证系统的三阶段框架

  • Stage 1: Development(开发阶段)

    • 输入:多说话人语音数据(如 A、B、C 三个说话人,每人 2 段语音);

    • 目标:训练通用的说话人特征提取模型(Some Method),学习 “语音→说话人嵌入” 的映射;

    • 特点:模型需具备泛化性,不依赖特定说话人。

  • Stage 2: Enrollment(注册阶段)

    • 输入:新说话人(开发阶段未见过)的语音;

    • 流程:用开发阶段训练的模型提取其说话人嵌入,存储为 “注册模板”;

    • 关键问题:是否需要 “多段注册语音(multiple enrollment utterances)”?→ 通常需多段语音平均嵌入,提升鲁棒性(如用户注册时录制 3 段语音)。

  • Stage 3: Evaluation(评估阶段)

    • 输入:待验证语音(橙色波形,可能是注册说话人或 impostor);

    • 流程

      • 提取待验证语音的嵌入(橙色向量);
      • 计算与注册嵌入的相似度(Calculate Similarity),输出标量(scalar);
      • 通过阈值判断是否为同一说话人。

开发阶段:学习 “人类语音的共性特征”(如音色、声纹的通用规律),而非记忆特定说话人;

注册 + 评估阶段:对新说话人,通过少量语音提取其个性化嵌入,完成 “零样本验证”。

最后开发阶段未见过的说话人”也能通过注册和评估完成验证,新用户无需参与模型训练,直接注册即可使用(如手机语音解锁),支持无限新增说话人,无需重新训练模型(如智能音箱多用户识别)
在这里插入图片描述
基于度量的元学习(Metric-based meta learning)

元学习的目标是训练一个 “学会学习” 的模型,使其能通过少量样本快速适应新任务。图中类比:将元学习的思想迁移到 “说话人验证” 任务,让模型仅用少量语音就能区分新说话人。

训练阶段

  • 每个训练任务包含 “支持集(Train)”“查询集(Test)”
    • 支持集:少量样本(如 1 张动漫人脸图片),代表 “已知类别”;
    • 查询集:1 张待验证样本,判断是否与支持集属于同一类别(Yes/No)。
  • 模型学习目标

    • 训练一个特征提取网络(Network),使其能将输入(如图像、语音)映射到高维特征空间;

    • 在特征空间中,同一类样本距离近,不同类样本距离远(通过度量学习优化,如对比损失、三元组损失)。

测试阶段

  • 新类别任务:测试任务中的人物是训练阶段未见过的新类别
  • 少样本适应:仅用少量支持集样本,模型就能判断查询集是否属于同一类别;
  • 核心能力:通过元训练习得的 “特征距离度量方式”,泛化到新类别。

技术本质:

  • 学习 “相似度度量”,元学习不直接学习 “类别→标签” 的映射,而是学习 “如何度量样本间的相似度”
  • 训练阶段:通过大量任务学习 “同类样本的共性特征” 和 “异类样本的差异特征”;
  • 测试阶段:对新类别,用学到的 “相似度度量方式” 快速判断样本归属。

语音相关的数据集:
一、Google’s Dataset(私有数据集,[Wan, et al., ICASSP’18])

  • 规模:3600 万条语音(36M utterances),覆盖 18000 个说话人(18000 speakers);
  • 特点:
    • 数据量和说话人数量均为三者中最大,属于工业级私有数据集;
    • 未公开细节,但为 Google 的说话人识别模型提供了大规模训练数据支撑;

二、VoxCeleb [Nagrani, et al., INTERSPEECH’17]

  • 规模:15 万条语音(0.15M utterances),1251 个说话人(1251 speakers);
  • 特点:
    • 首个大规模公开的说话人识别数据集,语音来源于 YouTube 名人访谈视频;
    • 包含真实场景噪声(如背景音乐、环境音),贴近实际应用场景;

三、VoxCeleb2 [Chung, et al., INTERSPEECH’18]

  • 规模:112 万条语音(1.12M utterances),6112 个说话人(6112 speakers);
  • 特点:
    • VoxCeleb 的升级版,数据量和说话人数量均为 VoxCeleb 的约 8 倍;
    • 延续了 YouTube 视频的数据源,保留真实场景多样性,同时提升了数据规模;

具体算法

在这里插入图片描述
i-vector 的本质是说话人身份的低维紧凑表示,通过统计建模从语音中提取说话人独特的声纹特征,解决传统方法中 “特征维度高、泛化性差” 的问题。

生成流程拆解

  • Step 1:语音→特征向量

    • 输入:原始语音信号;

    • 处理:提取短时声学特征(如 MFCC、FBANK),形成33 维特征向量序列

    • 作用:将语音转化为计算机可处理的数值特征,保留频谱、时序等关键信息。

  • Step 2:UBM 与 MAP 自适应 GMM

    • UBM(Universal Background Model)

      • 一个预先训练的 “通用背景模型”,基于大量不同说话人的数据训练,包含 512 个混合高斯分量;
      • 代表 “所有说话人的平均声学特性”。
    • MAP 自适应

      • 用当前说话人的少量语音特征(橙色点)调整 UBM 的参数(如均值、方差),得到说话人自适应 GMM(图中橙色椭圆簇);
      • 作用:将通用模型向特定说话人 “微调”,捕捉个性化声学特征。
  • Step 3:超向量(Supervector)→i-vector

    • 超向量生成

      • 将自适应 GMM 的所有高斯分量均值(μ₁, μ₂, …,)拼接成一个高维向量,即超向量(33×512=16896 维);
      • 超向量包含说话人自适应后的全部声学特征,但维度极高,冗余信息多。
    • i-vector 降维

      • 通过低秩矩阵分解,将超向量压缩为400 维的 i-vector
      • 核心假设:说话人特征位于一个低维子空间,i-vector 仅保留该子空间的关键信息。

i-vector 基于 “说话人差异可由低维子空间表示” 的假设:

  • 所有说话人的超向量差异可分解为 “通用背景 + 低维身份向量”;

  • 通过因子分析学习这个子空间,最终用 400 维向量唯一表征说话人身份。

  • 优点:

    • 维度低、计算快:400 维向量便于存储和相似度计算(如余弦距离);

    • 泛化性较好:在小数据场景下仍能稳定提取说话人特征,曾是说话人识别的工业界标准。

  • 缺点:

    • 依赖 GMM 统计建模:对复杂声学环境(如噪声、口音)鲁棒性有限;

    • 性能被深度学习超越:随着 x-vector 等端到端模型出现,i-vector 逐渐被取代,但仍是经典基准方法。
      在这里插入图片描述

在这里插入图片描述
d-vector 是首个将深度学习应用于说话人嵌入的方法,通过训练深度神经网络(DNN)直接从语音中提取判别性身份特征,突破了传统 i-vector 依赖 GMM 统计建模的局限。

  • Step 1:语音分帧与特征输入

    • 原始语音:长语音波形被分割为多个短时帧;

    • 帧级特征:每帧语音提取声学特征(如 MFCC),作为 DNN 的输入。

  • Step 2:帧级 DNN 特征提取

    • 深度神经网络(DNN):每个语音帧独立通过 DNN,输出帧级高维特征

    • DNN 结构:通常为前馈神经网络(如 3-5 层全连接层),训练目标是 “说话人分类”(输入帧特征→输出说话人标签概率)。

  • Step 3:帧特征平均→d-vector

    • 时序平均(average):将一整段语音的所有帧级特征(多个黄色方块)进行算术平均

    • 输出 d-vector:平均后的向量即为最终的说话人嵌入(顶部橙色向量),维度通常为 512 或 1024 维。

  • 训练阶段:DNN 以 “帧级说话人分类” 为目标,迫使网络学习区分不同说话人的声学特征(如音色、声纹);
  • 推理阶段:通过平均帧特征,将变长语音转换为固定长度的 utterance 级嵌入(d-vector),实现对整段语音的说话人表征。

d-vector 通过 “帧级 DNN 分类→时序平均” 的简单流程,开启了深度学习在说话人嵌入领域的应用。尽管其平均操作损失了语音的时序动态信息,但 “用神经网络学习判别性身份特征” 的思想,彻底改变了说话人识别的技术路径,是现代语音身份认证技术的重要起点。

在这里插入图片描述
x-vector 针对 d-vector 的缺陷(简单平均丢失时序信息),提出统计池化(statistical pooling)通过聚合语音帧的 “均值(mean)” 和 “方差(variance)”,保留语音的动态特性,生成更具判别性的说话人嵌入。

  • Step 1:全 utterance 输入与帧级特征提取

    • 输入:完整语音片段(whole utterance),无需严格分帧;

    • 帧级 DNN:通过多层 DNN(图中蓝色方块)处理每一帧语音,输出帧级高维特征(黄色方块),捕捉局部声学细节。

  • Step 2:统计池化(statistical pooling)

    • 均值 + 方差聚合:对所有帧特征计算均值(mean)方差(variance),拼接为一个更高维的统计向量;

    • 核心优势:相比 d-vector 的简单平均,统计池化保留了语音的 “动态范围” 信息(如语速变化、音调起伏),更符合说话人特征的本质。

  • Step 3:瓶颈层与 x-vector 输出

    • DNN 瓶颈层:统计向量通过一个小型 DNN降维,学习统计特征间的非线性关系;

    • 输出 x-vector:瓶颈层输出即为最终的说话人嵌入(绿色向量),维度通常为 512 或 1024 维,可直接用于说话人分类。

x-vector 的核心突破在于:

  • 全局信息建模:通过统计池化将变长语音转换为固定长度向量,同时保留帧间动态关系;

  • 端到端判别学习:整个网络以 “说话人分类” 为目标训练,迫使模型学习对说话人身份最关键的特征(如声纹、发音习惯)。

  • SOTA 标杆:x-vector 在 VoxCeleb 等公开数据集上刷新纪录,成为后续模型(如 ECAPA-TDNN)的基准;

  • 工业界落地:广泛应用于说话人验证(如手机解锁)、多说话人分离(如会议录音转写)、语音克隆(TTS 音色控制)等场景;

  • 技术延续:其 “统计池化” 思想被后续模型继承并改进(如注意力池化、胶囊网络)。

x-vector 通过 “帧级特征提取→统计池化→深度优化” 的三层架构,首次实现了对说话人特征的 “动态全局建模”,解决了 d-vector 忽略时序信息的关键缺陷。

在这里插入图片描述
注意力机制(Attention Mechanism)和 NetVLAD,均用于解决 “如何从变长语音帧中提取鲁棒全局特征” 的问题:

注意力机制(Attention Mechanism, [Chowdhury, et al., ICASSP’18])

  • 通过动态权重分配,让模型自动关注对说话人身份更重要的语音帧(如清晰发音段),抑制噪声或无关帧(如静音、背景音)。
  • 帧级特征输入:底部为语音的时序特征序列(h1,h2,...,hTh_1,h_2,...,h_Th1,h2,...,hT),来自 DNN 的最后一层输出;
  • 注意力权重计算(Part a + Part b):
    • 通过两层神经网络(Part a 和 Part b)学习每个帧特征的注意力权重,权重和为 1;
    • 重要帧权重高,次要帧权重低;
  • 加权求和生成 d-vector:帧特征与注意力权重加权平均,得到最终说话人嵌入(d-vector)。
  • 动态聚焦:相比 x-vector 的固定统计池化,能自适应捕捉关键语音片段(如特定元音、重音);
  • 抗噪声:对噪声帧分配低权重,提升在复杂环境下的鲁棒性。

NetVLAD([Xie, et al., ICASSP’19])

VLAD(Vector of Locally Aggregated Descriptors)的神经网络实现,通过聚类残差聚合将局部特征编码为全局嵌入,最初用于图像检索,后迁移至语音领域。

  • 输入与 CNN 特征提取:通过共享卷积神经网络(Shared CNN)提取局部频谱特征;

  • 聚类中心与残差计算:

    • 预定义多个聚类中心(蓝色 / 红色星点);

    • 每个局部特征计算与聚类中心的残差向量(特征 - 中心);

  • 残差聚合与嵌入生成:同一聚类中心的残差向量累加,所有聚类的累加结果拼接为 NetVLAD 向量,作为最终说话人嵌入。

  • 结构化聚合:通过聚类捕捉特征空间分布,比简单平均更能保留局部细节;
  • 可扩展性:聚类中心数量可控,适应不同嵌入维度需求。

End to End 模型

在这里插入图片描述

端到端模型通过对比学习训练,需要构造 正例(Positive Examples)和 负例(Negative Examples):

正例

  • 数据来源:同一说话人(spk i)的语音;
  • 构造方式:
    • 注册语音:K 段来自 spk i 的语音;
    • 待验证语音:1 段来自 spk i 的语音;
  • 标签:模型应输出高相似度分数(判定为 “Same”)。

负例

  • 数据来源:不同说话人(spk i 和 spk j)的语音;
  • 构造方式:
    • 注册语音:K 段来自 spk i 的语音;
    • 待验证语音:1 段来自 spk j 的语音;
  • 标签:模型应输出低相似度分数(判定为 “Different”)。

通过正例和负例的对比,让模型学习 “同一说话人语音相似度高,不同说话人相似度低” 的判别规则。

在这里插入图片描述
早期端到端(End-to-end)说话人验证系统的经典架构([Heigold, et al., ICASSP’16]),核心是通过 “多段注册语音平均嵌入 + 相似度计算” 实现身份验证:

(1)注册阶段(Enrollment)

  • 输入:同一说话人的 K 段注册语音 ;
  • 处理:每段语音通过共享神经网络提取帧级嵌入 ;
  • 聚合:对 K 段语音的嵌入进行算术平均,生成该说话人的 “注册模板嵌入”。

(2)评估阶段(Evaluation)

  • 输入:待验证语音;
  • 处理:通过同一神经网络提取其嵌入;
  • 相似度计算:对比待验证嵌入与注册模板嵌入,输出相似度分数;
  • 判断:分数超过阈值则判定为 “同一说话人”。相同身份分数越高越好,不同身份分数越低越好

在这里插入图片描述
无关(Text-independent)的端到端说话人验证框架,核心是通过对抗训练解耦 “说话人身份” 和 “文本内容”,实现 “无论说什么内容,只验证身份” 的目标:验证两段语音是否来自同一说话人,与语音内容无关(如注册时说 “你好”,验证时说 “再见”,仍能准确判断)。语音同时包含 “身份特征”(声纹、发音习惯)和 “文本特征”(内容、词汇),需让模型只学习身份特征,忽略文本干扰。

  • Network 的目标:让嵌入仅包含身份信息,使 Discriminator无法预测文本内容(欺骗判别器);
  • Discriminator 的目标:尽可能准确预测文本内容,迫使 Network去除嵌入中的文本信息
  • 结果:通过对抗训练,Network 最终学习到与文本无关、仅含身份的特征嵌入,实现 “Text-independent” 验证。
http://www.xdnf.cn/news/18484.html

相关文章:

  • 基于Labview的旋转机械AI智能诊断系统
  • 2015-2018年咸海流域1km归一化植被指数8天合成数据集
  • html-docx-js 导出word
  • Linux问答题:归档和传输文件
  • 探秘北斗卫星导航系统(BDS):架构、应用与未来蓝图,展现中国力量
  • 文件系统挂载详细分析(《图解Linux内核》虚拟文件系统篇笔记二)
  • UDP报文的数据结构
  • 可转换债券高频交易Level-2五档Tick级分钟历史数据分析
  • 20250823解决荣品RD-RK3588-MID核心板的底板的adb不通
  • 超越基础:Glide 高级优化与自定义实战
  • 12.Shell脚本修炼手册--函数的基础认知与实战演练(fock炸弹!!)
  • 第1.2节:早期AI发展(1950-1980)
  • Mybatis Plus - 代码生成器简单使用
  • Baumer高防护相机如何通过YoloV8深度学习模型实现社交距离的检测识别(python)
  • 【204页PPT】某著名企业信息化规划方案(附下载方式)
  • 【攻防世界】Web_php_include
  • GitLab CI:安全扫描双雄 SAST vs. Dependency Scanning 该如何抉择?
  • 阿德莱德多模态大模型导航能力挑战赛!NavBench:多模态大语言模型在具身导航中的能力探索
  • C++ csignal库详细使用介绍
  • 密码管理中Null 密码
  • 第九届86358贾家庄短片周在山西汾阳贾家庄举办
  • 齐次变换矩阵的逆变换:原理与SymPy实现
  • FIFO核心原理与机制
  • 解决 SymPy Lambdify 中的符号覆盖与语法错误问题
  • PiscCode使用 MediaPipe 检测人脸关键点多样展示
  • 大数据世界的开拓者:深入浅出MapReduce分布式计算经典范式
  • 相似度、距离
  • 一次性密码(OTP)原理及应用
  • OFD格式文件及Python将PDF转换为OFD格式文件
  • Centos 8 管理防火墙