speechbrain.processing.PLDA_LDA 模块
一种流行的说话人识别/说话人划分模型(LDA 和 PLDA)。
- 作者
Anthony Larcher 2020
Nauman Dawalatabad 2020
- 相关论文
此 PLDA 实现基于以下论文。
- PLDA 模型训练
Ye Jiang 等,“PLDA Modeling in I-Vector and Supervector Space for Speaker Verification”,Interspeech,2012 年。
Patrick Kenny 等,“PLDA for speaker verification with utterances of arbitrary duration”,ICASSP,2013 年。
- PLDA 评分(快速评分)
Daniel Garcia-Romero 等,“Analysis of i-vector length normalization in speaker recognition systems”,Interspeech,2011 年。
Weiwei-LIN 等,“Fast Scoring for PLDA with Uncertainty Propagation”,Odyssey,2016 年。
Kong Aik Lee 等,“Multi-session PLDA Scoring of I-vector for Partially Open-Set Speaker Detection”,Interspeech 2013 年。
- 致谢
摘要
类
一个用于执行线性判别分析的类。 |
|
一个用于编码试验索引信息的类。 |
|
一个用于从嵌入向量训练 PLDA 模型的类。 |
|
一个用于存储试验分数的类。 |
|
一个用于 PLDA 类的实用类,用于统计计算。 |
函数
列表之间的差集。 |
|
一个用于 PLDA 估计的函数。 |
|
计算两组向量之间的 PLDA 分数。 |
|
检查 list1 中的元素是否包含在 list2 中。 |
参考
- class speechbrain.processing.PLDA_LDA.StatObject_SB(modelset=None, segset=None, start=None, stop=None, stat0=None, stat1=None)[source]
这也用于将深度嵌入和元信息打包到一个对象中。
一个用于 PLDA 类的实用类,用于统计计算。
参数:
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
- 以 pickle 格式保存统计信息。
filename (path) – pickle 文件存储路径。
- 返回给定模型的片段。
mod_id (str) – 将返回片段的模型的 ID。
- 返回给定模型的片段起始帧索引。
mod_id (str) – 将返回起始帧索引的模型的 ID。
- 返回给定模型的片段结束帧索引。
mod_id (str) – 将返回结束帧索引的模型的 ID。
- 返回给定模型的零阶统计信息
mod_id (str) – 将返回零阶统计信息的模型的 ID。
- 返回给定模型的一阶统计信息。
mod_id (str) – 将返回一阶统计信息的模型的 ID。
- 按模型汇总零阶和一阶统计信息,并将其存储在新的 StatObject_SB 中。
返回:
- 居中一阶统计信息。
mu (array) – 用于居中的数组。
- 通过右乘旋转一阶统计信息。
R (ndarray) – 用于对一阶统计信息进行右乘的矩阵。
- 白化一阶统计信息。如果 sigma.ndim == 1,则为对角协方差情况。如果 sigma.ndim == 2,则为具有全协方差的单个高斯情况。如果 sigma.ndim == 3,则为全协方差 UBM 情况。
mu (array) – 需要从统计信息中减去的均值向量。
- 对齐当前 StatServer 的模型以匹配
- 输入参数提供的模型列表。 StatServer 的大小可能会减小以匹配输入的模型列表。
model_list (ndarray of strings) – 需要匹配的模型列表。
- 对齐当前 StatServer 的片段以匹配输入参数提供的片段列表。
- StatServer 的大小可能会减小以匹配输入的片段列表。
segment_list (ndarray of strings) – 需要匹配的片段列表
- class speechbrain.processing.PLDA_LDA.Ndx(ndx_file_name='', models=array([], dtype=float64), testsegs=array([], dtype=float64))[source]
检查 list1 中的元素是否包含在 list2 中。
- 一个编码试验索引信息的类。它包含模型名称列表、测试片段名称列表以及一个矩阵,该矩阵指示模型和测试片段的哪些组合是感兴趣的试验。
这也用于将深度嵌入和元信息打包到一个对象中。
ndx_file_name (str) – 要加载的文件名。
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
- 移除 Ndx 中的部分信息。对于从汇总性别的 Ndx 创建特定性别的 Ndx 非常有用。根据 'keep' 的值,两个输入列表指示要保留的字符串或要丢弃的字符串。
modlist (array) – 将与 'inNdx' 的 modelset 进行比较的字符串单元格数组。
- 一个用于存储试验分数的类。modelset 和 segset 字段分别是模型和测试片段名称列表。scoremat 和 scoremask 的元素 i,j 对应于涉及模型 i 和测试片段 j 的试验。
这也用于将深度嵌入和元信息打包到一个对象中。
scores_file_name (str) –
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
包含以下字段的 HDF5 文件名
modelsetlist
- batch_start (int) – 在列表中开始的索引。
一个用于 PLDA 估计的函数。
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
mini_batch_indices (list) – 列表中元素的索引(应从零开始)。
factor_analyser (instance of PLDA class) – PLDA 类对象。
stat0 (torch.Tensor) – 零阶统计矩阵。
stat1 (torch.Tensor) – 一阶统计矩阵。
e_h (torch.Tensor) – 累加器矩阵。
e_hh (torch.Tensor) – 累加器矩阵。
speechbrain.processing.PLDA_LDA.fast_PLDA_scoring(enroll, test, ndx, mu, F, Sigma, p_known=0.0, scaling_factor=1.0, check_missing=True)[source]
- 计算两组向量之间的 PLDA 分数。要执行的试验列表在 Ndx 对象中给出。PLDA 矩阵必须预先计算。i-vector/x-vector 在此之前应该已经被白化。
enroll (speechbrain.utils.Xvector_PLDA_sp.StatObject_SB) – StatServer 对象,其 stat1 为 xvector。
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
test (speechbrain.utils.Xvector_PLDA_sp.StatObject_SB) – StatServer 对象,其 stat1 为 xvector。
ndx (speechbrain.utils.Xvector_PLDA_sp.Ndx) – 定义要执行的试验列表的 Ndx 对象。
mu (double) – PLDA 高斯分布的均值向量。
F (torch.Tensor) – PLDA 的类间协方差矩阵。
Sigma (torch.Tensor) – 残差协方差矩阵。
p_known (float) – 在开放集识别情况下有已知说话人的概率(验证任务为 1,封闭集情况为 0)。
scaling_factor (float) – 统计信息的缩放因子。
check_missing (bool) – 如果为 True,则检查所有模型和片段是否存在。
scores
- 一个 StatObject_SB 对象,其中按模型汇总了统计信息
- segments
- 它根据 LDA 返回低维表示。
这也用于将深度嵌入和元信息打包到一个对象中。
一个用于执行线性判别分析的类。
do_lda(stat_server=None, reduced_dim=2, transform_mat=None)[source]
- 执行 LDA 并将向量投影到低维空间。
stat_server (object of speechbrain.processing.PLDA_LDA.StatObject_SB.) – 包含向量和元信息以执行 LDA。
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
reduced_dim (int) – 缩减空间的维数。
transform_mat (matrix) – 变换矩阵。
new_train_obj
- 一个 StatObject_SB 对象,其中按模型汇总了统计信息
speechbrain.processing.PLDA_LDA.StatObject_SB
- segments
class speechbrain.processing.PLDA_LDA.PLDA(mean=None, F=None, Sigma=None, rank_f=100, nb_iter=10, scaling_factor=1.0)[source]
- 输入格式为 speechbrain.utils.StatObject_SB。训练简化的 PLDA 模型,没有类内协方差矩阵,但有完整的残差协方差矩阵。
这也用于将深度嵌入和元信息打包到一个对象中。
一个用于从嵌入向量训练 PLDA 模型的类。
mean (torch.Tensor) – 向量的均值。
- modelset (list) – 每个 session 的模型 ID 列表,作为字符串数组。
plda(stat_server=None, output_file_name=None, whiten=False, w_stat_server=None)[source]
>>> from speechbrain.processing.PLDA_LDA import * >>> import random, numpy >>> dim, N = 10, 100 >>> n_spkrs = 10 >>> train_xv = numpy.random.rand(N, dim) >>> md = ['md'+str(random.randrange(1,n_spkrs,1)) for i in range(N)] >>> modelset = numpy.array(md, dtype="|O") >>> sg = ['sg'+str(i) for i in range(N)] >>> segset = numpy.array(sg, dtype="|O") >>> s = numpy.array([None] * N) >>> stat0 = numpy.array([[1.0]]* N) >>> xvectors_stat = StatObject_SB(modelset=modelset, segset=segset, start=s, stop=s, stat0=stat0, stat1=train_xv) >>> # Training PLDA model: M ~ (mean, F, Sigma) >>> plda = PLDA(rank_f=5) >>> plda.plda(xvectors_stat) >>> print (plda.mean.shape) (10,) >>> print (plda.F.shape) (10, 5) >>> print (plda.Sigma.shape) (10, 10) >>> # Enrollment (20 utts), Test (30 utts) >>> en_N = 20 >>> en_xv = numpy.random.rand(en_N, dim) >>> en_sgs = ['en'+str(i) for i in range(en_N)] >>> en_sets = numpy.array(en_sgs, dtype="|O") >>> en_s = numpy.array([None] * en_N) >>> en_stat0 = numpy.array([[1.0]]* en_N) >>> en_stat = StatObject_SB(modelset=en_sets, segset=en_sets, start=en_s, stop=en_s, stat0=en_stat0, stat1=en_xv) >>> te_N = 30 >>> te_xv = numpy.random.rand(te_N, dim) >>> te_sgs = ['te'+str(i) for i in range(te_N)] >>> te_sets = numpy.array(te_sgs, dtype="|O") >>> te_s = numpy.array([None] * te_N) >>> te_stat0 = numpy.array([[1.0]]* te_N) >>> te_stat = StatObject_SB(modelset=te_sets, segset=te_sets, start=te_s, stop=te_s, stat0=te_stat0, stat1=te_xv) >>> ndx = Ndx(models=en_sets, testsegs=te_sets) >>> # PLDA Scoring >>> scores_plda = fast_PLDA_scoring(en_stat, te_stat, ndx, plda.mean, plda.F, plda.Sigma) >>> print (scores_plda.scoremat.shape) (20, 30)
- 训练没有类内协方差矩阵但有完整残差协方差矩阵的 PLDA 模型。
stat_server (speechbrain.processing.PLDA_LDA.StatObject_SB) – 包含向量和元信息以执行 PLDA