无界交错状态递归神经网络

uisrnn的Python项目详细描述


ui-rnn构建状态pypi版本codecov>>/a>>

概述

这是图书馆 无界交错状态递归神经网络(uis-rnn)算法。 uis-rnn解决了序列数据的分割和聚类问题。 从例子中学习。

该算法最初是在论文中提出的 完全监督的说话人二值化

这项工作是由 谷歌人工智能博客

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

免责声明

这个开源实现与内部实现略有不同 我们以前在 由于依赖于 一些内部库。

我们不能共享说话人识别系统的数据、代码或模型 (d-矢量嵌入) 在论文中使用,因为说话人识别系统 严重依赖于谷歌的内部基础设施和专有数据。

此库不是正式的谷歌产品。

依赖关系

此库依赖于:

  • 巨蟒3.5+
  • 纽比1.15.1
  • 喷灯0.4.0
  • SCIPY 1.1.0(仅用于评估)

开始

>>><<安装软件包

在不下载存储库的情况下,您可以安装 作者:

啊!

啊!

运行演示

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

啊!

这将使用用于训练数据的数据/玩具来训练ui-rnn模型。 然后将模型存储在磁盘上,对测试数据的数据/玩具进行推理。 打印推断结果,并将平均精度保存在文本文件中。

ps.data/下的文件是手动生成的一个< 仅供演示之用。 这些数据非常简单,所以我们应该在 测试数据。

运行测试

您还可以通过运行:

bash run_tests.sh

如果派生此库并进行本地更改,请确保使用这些测试 作为健康检查。

此外,这些测试也是学习的好例子 这些api,特别是tests/integration\u test.py

核心API

词汇表

<表><广告>通用机器学习 说话人二值化 < /广告><正文>顺序话语观察/功能嵌入/d-向量标签/群集ID扬声器

参数

在主脚本中,调用此函数以获取参数:

model_args,training_args,inference_args=uisrnn.parse_arguments()

模型构造

所有算法都实现为uisrnn类。首先,构建 uisrnn对象:

model=uisrnn.UISRNN(args)

参数的定义在uisrnn/arguments.py中描述。 请参见模型解析器。

培训

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

model.fit(train_sequences,train_cluster_ids,args)

参数的定义在uisrnn/arguments.py中描述。 请参见Training\u Parser

fit()函数接受两种类型的输入,如下所述。

作为序列列表输入(推荐)

这里,序列是观察序列的列表。 每个观测序列都是一个类型为float的二维numpy数组。

  • 第一个维度是这个序列的长度。以及长度 可能因序列而异。
  • 第二个维度是每个观察的大小。这个 所有序列之间必须一致。对于说话人二值化, 观察结果可能是 d向量嵌入

train_cluster_ids也是一个列表,其长度与 训练序列train_cluster_ids的每个元素都是一个一维列表或 字符串的numpy数组,包含 序列中的相应序列。 对于说话人二值化,这些标签是每个 观察。

以这种方式调用fit()时,请非常小心参数 --强制群集唯一性

例如,假设:

train_cluster_ids=[['a','b'],['a','c']]

如果两个序列中的标签'a'指向 整个数据集,那么我们应该有enforce_cluster_id_unique=false; 否则,如果'a'只是一个本地指示器,以便与 第一个序列,为了区别于第二个序列中的'c',我们应该 使强制执行群集唯一性=true

另外,请注意,以这种方式调用fit()时,我们将 连接所有序列和所有群集ID,并委托给 下一节。

作为单个串联序列输入

这里,序列应该是一个类型为float的2维numpy数组, 对于串联的观测序列。

例如,如果您有m训练语句, 每句话都是一个嵌入序列。每个嵌入都是 数的向量。则序列的形状为n*d, 其中n=m*l

train_cluster_ids是一个长度n的一维字符串列表或numpy数组。 它是所有训练数据的串联的基本事实标签。

因为我们将观测序列串联起来,所以需要注意的是, 格鲁不同序列中的序列号 应该是全局唯一的

例如,如果第一个 序列是{'a','b','c'},第二个序列中的标签集 是{'b','c','d'}。在连接之前,我们应该将它们重命名为 类似于{'1a','1b','1c'}{'2b','2c','2d'}, 除非两个序列中的'b''c'完全相同 (在说话人二值化中,这意味着他们是相同的说话人 话语)。这一部分将由论点自动处理 --对上一节执行群集id唯一性

我们连接所有训练序列的原因是,我们将重新采样 以及分块将训练数据洗牌为数据增强 过程,这样我们就得到了一个健壮的模型,即使在 训练序列数。

大型数据集培训

对于大型数据集,数据通常不能一次加载到内存中。 在这种情况下,需要多次调用fit()函数。

在此,我们提供一些指导原则作为建议:

  1. 不要将不同的数据集馈送到fit()的不同调用中。相反, 对于fit()的每次调用,输入应该包含 不同的数据集。
  2. 对于对fit()函数的每次调用,使输入的大小大致为 同样。而且,不要使输入的大小太小。
  3. < > >

    预测

    一旦我们完成了训练,我们就可以运行经过训练的模型来执行 通过调用predict()函数推断新序列:

    predicted_cluster_ids=model.predict(test_sequences,args)

    这里test_sequences应该是float类型的2维numpy数组的列表, 与测试的观察顺序相对应。

    返回的predicted_cluster_ids是一个与 测试序列predicted_cluster_ids的每个元素都是一个整数列表, 长度与相应的测试顺序相同。

    您也可以对test_sequences使用单个测试序列。然后返回 预测的群集ID也将是一个整数列表。

    参数的定义在uisrnn/arguments.py中描述。 参见推理分析器

    引文

    我们的论文被引用为:

    pip3 install uisrnn
    
    0

    参考文献

    基线二聚系统

    进一步了解我们的基线二聚系统 无监督聚类算法,请查看 此站点

    本文中使用的谱聚类算法的python重新实现 在这里可以找到纸张。

    最基本的真理标签 NIST SRE 2000 可以找到数据集(disk6和disk8) 这里

    有关说话人二值化的更多公共资源,请访问awesome二值化。

    扬声器识别器/编码器

    要了解有关扬声器嵌入系统的更多信息,请查看 此站点

    我们知道这项工作有几个第三方实现:

    请用你自己的判断来决定你是否想用这些 实施。

    我们不对任何第三方实现的正确性负责。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何使用Flyway回滚迁移?   sql试图在java中连接两个表,但我遇到了一个错误   java使用commons apache API复制文件内容   java无法解析模块   原因:java。lang.IllegalArgumentException:org。冬眠QueryException:无法解析属性:   java使用TNT4J,TrackingLogger统计数据仅显示该类的统计数据,如果我想要应用程序范围的统计数据呢?   java项目Euler#19,答案只有在1900年开始时才正确?   java显示标签上的选定值列表   java在局部变量中缓存属性吗?   java preparedStatement。setString(1,“null”)被解释为null而不是字符串(在preparedStatement.addBatch()之后)   java多线程逻辑情况   java将post请求中的字符串列表传递给jersey应用程序时出现错误500   java如何计划通过websocket向不同的用户发送不同的消息   多线程Java线程锁定特定对象   除非保存项目,否则java Eclipse错误不会出现或消失   hibernate中的java批量更新   java我可以提供一个接口来允许另一个类让我访问它的私有变量吗?   jvm参数是否可能“愚弄”java从命令行设置环境变量