向预先训练的说话人识别模型中添加新说话人

Posted

技术标签:

【中文标题】向预先训练的说话人识别模型中添加新说话人【英文标题】:Adding new speaker to a pre-trained speaker recognition model 【发布时间】:2022-01-19 08:37:42 【问题描述】:

我已经训练了一个用于说话人识别的深度神经网络(在 64 个不同的说话人上进行了训练)。接下来我想从模型中添加或删除说话人。任何人都可以帮助我完成编码部分,因为我是语音识别的新手。即使是有人知道的任何研究论文都会有所帮助。

附:如果我在预训练模型上使用新数据集,那么我需要在新的 64 个扬声器上再次训练模型。考虑到我只想添加或删除 1 或 2 个扬声器,如何实现?

【问题讨论】:

【参考方案1】:

实现此目的的一种方法是测量相似度(在说话人验证中经常这样做),而不是在初始数据集(64 个说话人)上训练的 logits 层。

当向说话人识别模型提供输入音频时,您可以在 logits 层之前获取隐藏层值,并将其用作话语级特征。 (我们称这个说话者嵌入向量)

假设您有一个新数据集,其中包含 M 个话语和 N 个说话者(与初始训练集不相交)。 从此数据集中,您可以使用预先训练的网络提取 M 个嵌入向量。

对同一个说话人的嵌入向量进行平均,您将得到 M 个特定于说话人的嵌入向量。我们将这些已注册的向量称为。

然后要测试一个新的语音样本,您只需从测试语音中提取嵌入向量,并将其与 M 个注册向量进行比较(通常余弦相似度用于说话人验证)。 对于 P 测试话语,这将为您提供 [P x M] 矩阵。对于每个测试话语,您可以选择相似度最高的语言来进行说话人识别。

通过这样做,您可以执行说话人识别,而无需重新训练您为未包含在测试集中的说话人训练过的网络。

如果您想学习一些用于说话人识别的经典/流行方法,可以查看以下论文:

J。 H. L. Hansen 和 T. Hasan,“机器和人类的说话人识别:教程回顾”,IEEE 信号处理杂志,第一卷。 32,没有。 2015 年 6 月。

【讨论】:

感谢您的建议

以上是关于向预先训练的说话人识别模型中添加新说话人的主要内容,如果未能解决你的问题,请参考以下文章

使用 Microsoft Cognitive 进行实时说话人识别

如何在 Python 中实现 Microsoft 说话人识别/验证 API?

使用 writehtk 进行特征提取(说话人识别)

说话人识别和响应时间?

说话人识别损失函数的PyTorch实现与代码解读

如何在 C# 中使用 Azure 说话人识别 API?