欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Python实现的声纹识别基础原理讲解

最编程 2024-07-22 16:28:49
...


1. 声纹识别类型

说话人识别(Speaker identification)–确定测试说话人与注册说话人中的哪个匹配

说话人验证(Speaker verification)–确定测试说话人是否与特定说话人匹配

说话人分离(Speaker diarization)-“说话人何时说话”细分并标记说话人的连续录音

依赖于文本(Text dependent)–对于说话者识别和验证,测试说话者是否按照规定文本说话?

封闭式(Closed set )–是否有固定的说话人

声纹识别 python 声纹识别原理_UBM

2. 声纹识别评价标准

错误接受率(FAR):FAR = nontarget_is_target / ( target_is_target + nontarget_is_target )

错误拒绝率(FRR):FRR = target_is_nontarget / ( target_is_nontarget + nontarget_is_nontarget )

等错误率 (EER-Equal Error Rate):调整阈值,使得误拒绝率(False Rejection Rate,FRR)等于误接受率 (False Acceptance Rate,FAR),此时的FAR与FRR的值称为等错误率。取一组0到1之间的等差数列,分别作为识别模型的判别界限,既坐标x轴,画出FFR和FAR的坐标图,交点就是EER值。

3.声纹识别特征

帧级别特征:比如MFCC, LPCC, 等 请移步我的另一篇博客()

话语和说话者级别特征:

    高斯混合模型 超向量 GMM supervectors

    i-vector

    DNN 嵌入层 DNN embeddings

        d-vectors

         x-vectors

UBM (通用背景模型):–在普通人群的语音基础上训练具有许多高斯(例如2048)的GMM:无序列建模(无HMM)-仅分布在MFCC上,然后使用MAP适应将UBM适应于每个目标说话者 通过对数似然比(LLR)直接使用这些GMM来验证目标说话者,其中X是观察到的测试发音,θs是目标说话者模型,θ0是UBM。 :

LLR(X,s)=log(p(X|θs)/p(X|θ0))=logp(X|θs)-logp(X|θ0)

设置一个阈值T

如果LLR(X,s)>=T 接受,如果 LLR(X,s)<T 拒绝

MAP 适应 MAP adaption

MAP适应的基本思想是在通用数据上估计的参数与目标说话者的估计之间取得平衡

    假设对于第m个高斯函数,

声纹识别 python 声纹识别原理_UBM_02

    其中

声纹识别 python 声纹识别原理_声纹识别_03

是分量所占概率。MAP 适应模型的估计:

声纹识别 python 声纹识别原理_声纹识别 python_04

其中,α控制平衡SI估计值和适应数据(通常0≤α≤20)

声纹识别 python 声纹识别原理_i-vector_05

是时间n处的自适应矢量

声纹识别 python 声纹识别原理_i-vector_06

此高斯在此时的概率.

声纹识别 python 声纹识别原理_声纹识别特征_07

i-Vector

使用GMM(平均值)参数代表说话人-将目标发言人的平均值参数串联起来以形成GMM超向量

声纹识别 python 声纹识别原理_声纹识别 python_08

。 UBM GMM的典型尺寸为2048,因此使用39维参数,这可以是一个尺寸非常大的矢量(〜80000个分量)。将话音

声纹识别 python 声纹识别原理_声纹识别_09

的超向量表示为UBM超向量和话音i-向量的组合:

声纹识别 python 声纹识别原理_声纹识别特征_10

  •  和   是话音u和UBM的D维超向量。
  • 是第i个向量(“身份向量”)–话语u(d〜400)的降维(d)表示。
  • T是一个D×d矩阵(有时称为“总可变性矩阵”),它将超向量向下投影到i-向量表示形式。
  • 使用EM算法为发育语料估计T,为说话人估计i-vector 作为给定Xu和T的(高斯)后验分布的平均值。

说话人验证涉及计算目标和测试i向量之间的(

声纹识别 python 声纹识别原理_声纹识别特征_11

)分数。余弦分数: 

声纹识别 python 声纹识别原理_声纹识别_12

概率线性判别分析(PLDA)–解释说话人变异性和声道变异性的概率模型。 可用于计算对数似然比,因此

声纹识别 python 声纹识别原理_UBM_13

其中H1是测试说话者和目标说话者相同的假设,H0是他们不同的假设

当前最新的神经网络方法使用NN提取嵌入,然后由PLDA对其评分。
d-vector(Variani等,2014)。
开发–训练一个DNN以识别说话者。
注册–从最后一个隐藏层中提取说话者特定的功能。
dvector–整个发声(pooling)帧中特定于说话者的平均特征。

x-vector(Snyder等,2018)。
与d-vector相似,提取语音水平特征作为嵌入。
用帧级输入和话语级输出训练TDNN。
体系结构包括一个“stats pooling”层,该层可计算最高帧级隐藏层的发声的平均值和sd。


声纹识别 python 声纹识别原理_UBM_14

d-vector

声纹识别 python 声纹识别原理_声纹识别 python_15

x-vector

 

 

推荐阅读