pytorch使用google UIS-RNN算法识别出每个人的声音(以92%的准确率 google/uis-rnn)

Song • 505 次浏览 • 0 个回复 • 2018年11月19日

这是无界交错状态回归神经网络(UIS-RNN)算法的库,实现这篇文章Fully Supervised Speaker Diarization;谷歌AI研究部门的研究者发表论文《Fully Supervised Speaker Diarization》,该论文描述了一种新的AI系统,它能以92%的准确率识别出每个人声音的专属模式。

UIS-RNN

1、简介

这是 无界交错状态递归神经网络(UIS-RNN)算法的库。UIS-RNN通过学习示例解决了分段和聚类顺序数据的问题。

该算法最初是在Fully Supervised Speaker Diarization中提出的。

这项工作已由Google AI Blog引入 。

uisrnn

二、免责声明

由于对某些内部库的依赖性,这个开源实现与我们在本文中用于生成结果的内部实现略有不同 。

由于说话人识别系统在很大程度上依赖于Google的内部基础设施和专有数据,因此我们无法共享本文中使用的说话人识别系统(d-vector embeddings)的数据,代码或模型。

此库不是Google的官方产品。

三、依赖

依赖库:

  • python 3.5+
  • numpy 1.15.1
  • pytorch 0.4.0
  • scipy 1.1.0 (for evaluation only)

四、快速开始

1、运行演示

要开始使用,只需运行以下命令:

python3 demo.py --train_iteration = 1000 -l = 0.001 -hl = 100

这将使用data/training_data.npz训练UIS-RNN模型,然后将模型存储在磁盘上,执行推理data/testing_data.npz,打印推理结果,并将平均精度保存在文本文件中。

PS。下面的文件data/是手动生成的测试数据,仅用于演示目的。这些数据非常简单,因此我们支持在测试数据集上获取100%的准确性。

2、运行测试

您还可以通过运行以下命令来验证此库的正确性:

sh run_tests.sh

如果你fork此库并进行本地更改,请务必使用这些测试作为完整性检查。

此外,这些测试也是学习API的好例子,特别是tests/integration_test.py

五、核心API

1、词汇表

通用机器学习 Speaker Diarization
Sequence Utterance
Observation Embedding / d-vector
Label / Cluster ID Speaker

2、模型构建

所有算法都作为UISRNN类实现。首先,通过以下方式构造UISRNN 对象:

model = UISRNN(args)

args的定义描述于model/arguments.py。参考model_parser

3、训练

接下来,通过调用fit()函数训练模型:

model.fit(train_sequence, train_cluster_id, args)

这里train_sequence应该是一个2-dimfloat类型的numpy数组。对于speaker diarization,这可能是d纬embeddings

例如,如果您有M个训练话语,并且每个utterance都是一系列L embeddings。每个embeddings都是D纬向量。 train_sequence的形状是N * D,其中N = M * L

train_cluster_id是一个1-dim列表或numpy的阵列的长度串,Ñ。它是所有训练数据的连接基础事实标签。对于说话者日记,这些标签是每个观察的说话者标识符(例如 d-vector)。

由于我们是连接observation序列,重要的是要注意,ground truth labelstrain_cluster_id 在不同序列中应该是全局唯一的。

例如,如果标签集的第一个序列是{'A', 'B', 'C'},则第二个序列中的标签集是{'B', 'C', 'D'}。然后在连接前,我们应该重命名他们类似于{'1_A', '1_B', '1_C'}{'2_B', '2_C', '2_D'},除非'B''C'两个序列是有意义相同(speakers diarization,这意味着他们是整个话语相同speakers)。

args是在model/arguments.py上定义的,参考training_parser

4、预测

完成训练后,我们可以运行训练模型,通过调用predict()函数对新序列进行推理:

predicted_label = model.predict(test_sequence, args)

这里test_sequence应该是2-dim(2维)的float类型的numpy阵列,对应于一个单一的观察序列。

返回的predicted_label是一个整数列表,长度与test_sequence相同。

args是在model/arguments.py上定义的,参考inference_parser


原创文章,转载请注明 :pytorch使用google UIS-RNN算法识别出每个人的声音(以92%的准确率 google/uis-rnn) - pytorch中文网
原文出处: https://ptorch.com/news/217.html
问题交流群 :168117787
提交评论
要回复文章请先登录注册
用户评论
  • 没有评论
Pytorch是什么?关于Pytorch! 在PyTorch中实现Faster RCNN (faster_rcnn_pytorch)