无界交错状态递归神经网络
uisrnn的Python项目详细描述
ui-rnn>>/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()
函数。
在此,我们提供一些指导原则作为建议:
- 不要将不同的数据集馈送到
fit()
的不同调用中。相反,
对于fit()
的每次调用,输入应该包含
不同的数据集。 - 对于对
fit()
函数的每次调用,使输入的大小大致为
同样。而且,不要使输入的大小太小。 < > >预测
一旦我们完成了训练,我们就可以运行经过训练的模型来执行
通过调用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二值化。
扬声器识别器/编码器
要了解有关扬声器嵌入系统的更多信息,请查看
此站点
我们知道这项工作有几个第三方实现:
请用你自己的判断来决定你是否想用这些
实施。
我们不对任何第三方实现的正确性负责。
推荐PyPI第三方库
免责声明
这个开源实现与内部实现略有不同 我们以前在 由于依赖于 一些内部库。
我们不能共享说话人识别系统的数据、代码或模型 (d-矢量嵌入) 在论文中使用,因为说话人识别系统 严重依赖于谷歌的内部基础设施和专有数据。
此库不是正式的谷歌产品。
依赖关系
此库依赖于:
- 巨蟒3.5+
- 纽比1.15.1
- 喷灯0.4.0
- SCIPY 1.1.0(仅用于评估)
开始
在不下载存储库的情况下,您可以安装
包作者: 或 要开始,只需运行以下命令: 这将使用用于训练数据的 ps. 您还可以通过运行: 如果派生此库并进行本地更改,请确保使用这些测试
作为健康检查。 此外,这些测试也是学习的好例子
这些api,特别是 在主脚本中,调用此函数以获取参数: 所有算法都实现为 参数的定义在 接下来,通过调用 参数的定义在 这里, 以这种方式调用 例如,假设: 如果两个序列中的标签 另外,请注意,以这种方式调用 这里, 例如,如果您有m训练语句,
每句话都是一个嵌入序列。每个嵌入都是
数的向量。则序列的形状为n*d,
其中n=m*l 因为我们将观测序列串联起来,所以需要注意的是,
格鲁不同序列中的序列号
应该是全局唯一的 例如,如果第一个
序列是 我们连接所有训练序列的原因是,我们将重新采样
以及分块将训练数据洗牌为数据增强
过程,这样我们就得到了一个健壮的模型,即使在
训练序列数。 对于大型数据集,数据通常不能一次加载到内存中。
在这种情况下,需要多次调用 在此,我们提供一些指导原则作为建议: 一旦我们完成了训练,我们就可以运行经过训练的模型来执行
通过调用 这里 返回的 您也可以对 参数的定义在 我们的论文被引用为: 进一步了解我们的基线二聚系统
无监督聚类算法,请查看
此站点 本文中使用的谱聚类算法的python重新实现
在这里可以找到纸张。
最基本的真理标签
NIST SRE 2000
可以找到数据集(disk6和disk8)
这里 有关说话人二值化的更多公共资源,请访问awesome二值化。
要了解有关扬声器嵌入系统的更多信息,请查看
此站点 我们知道这项工作有几个第三方实现: 请用你自己的判断来决定你是否想用这些
实施。 我们不对任何第三方实现的正确性负责。运行演示
数据/玩具来训练ui-rnn模型。
然后将模型存储在磁盘上,对测试数据的数据/玩具进行推理。
打印推断结果,并将平均精度保存在文本文件中。
data/
下的文件是手动生成的一个<
仅供演示之用。
这些数据非常简单,所以我们应该在
测试数据。运行测试
bash run_tests.sh
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数组。
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数组,
对于串联的观测序列。
train_cluster_ids
是一个长度n的一维字符串列表或numpy数组。
它是所有训练数据的串联的基本事实标签。{'a','b','c'},第二个序列中的标签集
是
{'b','c','d'}
。在连接之前,我们应该将它们重命名为
类似于{'1a','1b','1c'}
和{'2b','2c','2d'}
,
除非两个序列中的'b'
和'c'
完全相同
(在说话人二值化中,这意味着他们是相同的说话人
话语)。这一部分将由论点自动处理
--对上一节执行群集id唯一性
。大型数据集培训
fit()
函数。fit()
的不同调用中。相反,
对于fit()
的每次调用,输入应该包含
不同的数据集。fit()
函数的每次调用,使输入的大小大致为
同样。而且,不要使输入的大小太小。预测
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
中描述。
参见推理分析器
引文
0
pip3 install uisrnn
参考文献
基线二聚系统
扬声器识别器/编码器
推荐PyPI第三方库