speechbrain.utils.data_utils 模块

该库收集了用于数据输入输出操作的实用工具。

Authors
  • Mirco Ravanelli 2020

  • 阿库·柔赫 2020

  • 萨穆埃莱·科内尔 2020

  • 阿德尔·穆门 2024

  • 皮埃尔·冠军 2023

摘要

函数:

batch_pad_right

给定一个torch张量列表,它通过在每一维上向右填充来将它们批量处理在一起,以便所有张量具有相同的长度。

batch_shuffle

在序列中打乱固定大小的批次

concat_padded_features

以向量化的方式将多个填充的特征张量连接成一个单一的填充张量,而不在最终张量中包含填充,仅在末尾添加填充。

dict_value_combinations

返回给定字典中所有可能的键值组合

dict_value_combinations_gen

返回指定值字典的排列生成

dist_stats

返回标准分布统计量(均值、标准差、最小值、最大值)

download_file

从给定的源下载文件并将其保存到给定的目标路径。

get_all_files

返回在文件夹中找到的文件列表。

get_list_from_csv

从输入的csv文件的选定字段中获取列表。

length_range

创建一个张量,其单维度范围与其张量的形状匹配

masked_max

一个计算每个样本最小值的度量函数

masked_mean

一个计算每个样本均值的指标函数,排除填充值

masked_min

一个计算每个样本最小值的度量函数

masked_std

一个计算每个样本标准差的指标函数,不包括填充部分

match_shape

一个多功能辅助函数,用于将一个张量的形状匹配到另一个张量的形状 - 对于掩码等非常有用。

mod_default_collate

从批量值列表中创建张量。

non_batch_dims

返回指定张量的所有维度,除了批次维度

pad_divisible

向张量的指定维度添加额外的填充,使其能够被指定的因子整除。

pad_right_to

该函数接受任意形状的torch张量,并通过在右侧追加值将其填充到目标形状。

recursive_items

生成嵌套字典的每个(键,值)。

recursive_to

将数据移动到设备或其他类型,并处理容器。

recursive_update

类似于dict.update的函数,但用于嵌套的dict

scalarize

将包含张量的命名元组或字典转换为其标量值

set_writing_permissions

此函数设置用户对给定文件夹中所有文件的写入权限。

split_by_whitespace

str.split 的一个非常基础的功能版本

split_list

返回序列中的分割列表。

split_path

将路径拆分为源和文件名

trim_as

将指定的张量修剪以匹配另一个张量的形状(最多)

trim_to_shape

将指定的张量修剪以匹配指定的形状

undo_padding

根据一批句子及其对应的相对长度生成Python列表。

unsqueeze_1d

将一维张量扩展到指定的维度数,保留一个维度并在其他地方创建“虚拟”维度

unsqueeze_as

将张量重塑为与目标张量兼容的形状,仅在x.dim() <= y.dim()时有效

参考

speechbrain.utils.data_utils.undo_padding(batch, lengths)[source]

给定一批句子及其对应的相对长度,生成Python列表。

Parameters:
  • batch (torch.Tensor) – 一批句子聚集在一个批次中。

  • lengths (torch.Tensor) – 批次中每个句子的相对长度。

Returns:

as_list – 对应输入张量的Python列表。

Return type:

list

Example

>>> batch=torch.rand([4,100])
>>> lengths=torch.tensor([0.5,0.6,0.7,1.0])
>>> snt_list=undo_padding(batch, lengths)
>>> len(snt_list)
4
speechbrain.utils.data_utils.get_all_files(dirName, match_and=None, match_or=None, exclude_and=None, exclude_or=None)[source]

返回在文件夹中找到的文件列表。

可以使用不同的选项来将搜索限制在某些特定的模式。

Parameters:
  • dirName (str) – 要搜索的目录。

  • match_and (list) – 包含要匹配的模式的列表。如果文件匹配match_and中的所有条目,则返回该文件。

  • match_or (list) – 包含要匹配的模式的列表。如果文件匹配match_or中的一个或多个条目,则返回该文件。

  • exclude_and (list) – 一个包含匹配模式的列表。如果文件不匹配exclude_and中的任何条目,则返回该文件。

  • exclude_or (list) – 包含匹配模式的列表。如果文件未能匹配exclude_or中的任何一个条目,则返回该文件。

Returns:

allFiles – 匹配模式的文件列表。

Return type:

list

Example

>>> get_all_files('tests/samples/RIRs', match_and=['3.wav'])
['tests/samples/RIRs/rir3.wav']
speechbrain.utils.data_utils.get_list_from_csv(csvfile, field, delimiter=',', skipinitialspace=True)[source]

从输入的CSV文件的选定字段中获取列表。

Parameters:
  • csvfile (path) – CSV文件的路径。

  • field (str) – 用于创建列表的CSV文件的字段。

  • delimiter (str) – CSV文件的分隔符。

  • skipinitialspace (bool) – 设置为true以跳过条目中的初始空格。

Return type:

给定字段中csv文件列表

speechbrain.utils.data_utils.split_list(seq, num)[source]

返回序列中的分割列表。

Parameters:
  • seq (iterable) – 输入列表,将被分割。

  • num (int) – 要生成的块的数量。

Return type:

一个列表的列表,长度为num,包含seq的所有元素。

Example

>>> split_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 4)
[[1, 2], [3, 4], [5, 6], [7, 8, 9]]
speechbrain.utils.data_utils.recursive_items(dictionary)[source]

生成嵌套字典的每个(键,值)。

Parameters:

字典 (dict) – 要列出的嵌套字典。

Yields:

(key, value) 来自字典的元组。

Example

>>> rec_dict={'lev1': {'lev2': {'lev3': 'current_val'}}}
>>> [item for item in recursive_items(rec_dict)]
[('lev3', 'current_val')]
speechbrain.utils.data_utils.recursive_update(d, u, must_match=False)[source]

类似于dict.update的函数,但用于嵌套的dict

来自: https://stackoverflow.com/a/3233356

如果你有一个嵌套的映射结构,例如:

{“a”: 1, “b”: {“c”: 2}}

假设你想用以下内容更新上述结构:

{“b”: {“d”: 3}}

此函数将产生:

{“a”: 1, “b”: {“c”: 2, “d”: 3}}

而不是:

{“a”: 1, “b”: {“d”: 3}}

Parameters:
  • d (dict) – 要更新的映射。

  • u (dict) – 用于更新的映射。

  • must_match (bool) – 如果u中的键在d中不存在,是否抛出错误。

Example

>>> d = {'a': 1, 'b': {'c': 2}}
>>> recursive_update(d, {'b': {'d': 3}})
>>> d
{'a': 1, 'b': {'c': 2, 'd': 3}}
speechbrain.utils.data_utils.download_file(source, dest, unpack=False, dest_unpack=None, replace_existing=False, write_permissions=False)[source]

从给定的源下载文件并将其保存到给定的目标路径。

参数

网络。

destpath

目标路径。

unpackbool

如果为True,它会在目标文件夹中解压数据。 存档将被保留。

支持解压/解压缩的文件格式有:

  • 任何由shutil.get_archive_formats()枚举的格式,通常包括.tar.tar.gz.zip

  • 普通的 .gz 文件(当不是 .tar 归档文件时)

请注意,出于安全原因,您应该始终信任您正在提取的存档。

dest_unpack: path

存储解压数据集的路径

replace_existingbool

如果为True,则替换现有文件。

write_permissions: bool

当设置为True时,dest_unpack目录中的所有文件将被授予写权限。 此选项仅在unpack=True时生效。

speechbrain.utils.data_utils.set_writing_permissions(folder_path)[source]

此函数将用户写入权限设置为给定文件夹中的所有文件。

Parameters:

folder_path (folder) – 文件夹中的文件将被授予写权限。

speechbrain.utils.data_utils.pad_right_to(tensor, target_shape, mode='constant', value=0)[source]

此函数接受任意形状的torch张量,并通过在右侧追加值将其填充到目标形状。

Parameters:
  • tensor (torch.Tensor) – 需要填充维度的输入张量。

  • target_shape ((list, tuple)) – 我们希望目标张量具有的目标形状,其长度必须等于 tensor.ndim

  • mode (str) – 填充模式,请参考 torch.nn.functional.pad 文档。

  • value (float) – 填充值,请参考 torch.nn.functional.pad 文档。

Returns:

  • tensor (torch.Tensor) – 填充的张量。

  • valid_vals (list) – 包含原始未填充值每个维度比例的列表。

speechbrain.utils.data_utils.batch_pad_right(tensors: list, mode='constant', value=0)[source]

给定一个torch张量列表,它通过在每一维上向右填充来将它们批量处理在一起,以便所有张量具有相同的长度。

Parameters:
  • tensors (list) – 我们希望一起填充的张量列表。

  • mode (str) – 填充模式,请参阅 torch.nn.functional.pad 文档。

  • value (float) – 填充值,请参阅 torch.nn.functional.pad 文档。

Returns:

  • tensor (torch.Tensor) – 填充的张量。

  • valid_vals (list) – 包含原始未填充值每个维度比例的列表。

speechbrain.utils.data_utils.split_by_whitespace(text)[source]

一个非常基础的 str.split 功能版本

speechbrain.utils.data_utils.recursive_to(data, *args, **kwargs)[source]

将数据移动到设备或其他类型,并处理容器。

与 torch.utils.data._utils.pin_memory.pin_memory 非常相似, 但应用的是 .to() 方法。

speechbrain.utils.data_utils.mod_default_collate(batch)[source]

从批量值列表中创建一个张量。

请注意,这不需要将zip(*)值压缩在一起,因为PaddedBatch已经通过键将它们连接起来了。

这里的想法是不要出错。

这是从以下位置修改的: https://github.com/pytorch/pytorch/blob/c0deb231db76dbea8a9d326401417f7d1ce96ed5/torch/utils/data/_utils/collate.py#L42

speechbrain.utils.data_utils.split_path(path)[source]

将路径拆分为源路径和文件名

除了常规路径外,这也处理URL和Huggingface hub路径。

Parameters:

路径 (字符串FetchSource)

Returns:

  • str – 源

  • str – 文件名

speechbrain.utils.data_utils.scalarize(value)[source]

将包含张量的命名元组或字典转换为其标量值

Parameters:

value (dictnamedtuple) – 一个张量的字典或命名元组

Returns:

result – 一个结果字典

Return type:

dict

speechbrain.utils.data_utils.unsqueeze_as(x, target)[source]

将张量重塑为与目标张量兼容的形状,仅在x.dim() <= y.dim()时有效

Parameters:
  • x (torch.Tensor) – 原始张量

  • target (torch.Tensor) – 张量的形状

Returns:

result – 张量 x 的一个视图,重塑为与 y 兼容的形状

Return type:

torch.Tensor

speechbrain.utils.data_utils.pad_divisible(tensor, length=None, factor=2, len_dim=1, pad_value=0)[source]

向张量的指定维度添加额外的填充,使其可以被指定的因子整除。这在将可变长度序列传递给下采样UNets或其他类似架构时非常有用,其中输入预期可以被下采样因子整除。

Parameters:
  • tensor (torch.Tensor) – 需要填充的张量,可以是任意维度

  • length (torch.Tensor) – 一个一维张量,表示相对长度

  • factor (int) – 可整除因子

  • len_dim (int) – 用作长度的维度的索引

  • pad_value (int) – 用于填充输出的值

Returns:

  • tensor_padded (torch.Tensor) – 张量,如果需要的话,带有额外的填充

  • length (torch.Tensor) – 调整后的长度张量,如果提供了的话

Example

>>> x = torch.tensor([[1, 2, 3, 4],
...                   [5, 6, 0, 0]])
>>> lens = torch.tensor([1., .5])
>>> x_pad, lens_pad = pad_divisible(x, length=lens, factor=5)
>>> x_pad
tensor([[1, 2, 3, 4, 0],
        [5, 6, 0, 0, 0]])
>>> lens_pad
tensor([0.8000, 0.4000])
speechbrain.utils.data_utils.trim_to_shape(tensor, shape)[source]

修剪指定的张量以匹配指定的形状

Parameters:
  • tensor (torch.Tensor) – 一个张量

  • shape (可枚举) – 所需的形状

Returns:

tensor – 修剪后的张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.trim_as(tensor, other)[source]

修剪指定的张量以匹配另一个张量的形状(最多)

Parameters:
  • tensor (torch.Tensor:) – 一个张量

  • 其他 (torch.Tensor) – 需要匹配形状的张量

Returns:

tensor – 修剪后的张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.match_shape(tensor, other)[source]

一个瑞士军刀式的辅助函数,用于将一个张量的形状匹配到另一个张量的形状 - 对于掩码等非常有用。

Parameters:
  • tensor (torch.Tensor:) – 一个张量

  • 其他 (torch.Tensor) – 要匹配形状的张量

Returns:

tensor – 具有匹配形状的张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.batch_shuffle(items, batch_size)[source]

在序列中随机打乱固定大小的批次

Parameters:
  • items (sequence) – 一个张量或可索引的序列,例如列表

  • batch_size (int) – 批量大小

Returns:

items – 原始项目。如果传递的是张量,将返回张量。否则,将返回一个列表

Return type:

序列

speechbrain.utils.data_utils.concat_padded_features(feats, lens, dim=1, feats_slice_start=None, feats_slice_end=None)[source]

将多个填充的特征张量以向量化的方式连接成一个单一的填充张量,而不在最终张量中包含填充,仅在末尾添加填充。该函数支持张量的可选相对切片。

一个可能的使用场景是连接批次的频谱图或音频。

Parameters:
  • feats (list) – 一个填充张量的列表

  • lens (list) – 一个长度张量的列表

  • dim (int) – 执行连接的维度

  • feats_slice_start (list) – 偏移量,相对于序列的开头,用于每个被连接的张量。如果只包含某些切片的子序列,这将非常有用。

  • feats_slice_end (list) – 偏移量,相对于序列的末尾,用于每个被连接的张量。如果只包含某些切片的子序列,这将非常有用。

Returns:

out – 一个连接后的张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.unsqueeze_1d(value, dim, value_dim)[source]

将一个一维张量扩展到指定的维度数,保留一个维度并在其他地方创建“虚拟”维度

Parameters:
  • (torch.Tensor) – 一个一维张量

  • dim (int) – 维度的数量

  • value_dim (int) – 值张量所代表的维度

Returns:

结果 – 一个dim维的张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.length_range(feats, len_dim)[source]

创建一个在一维范围内与其张量形状匹配的张量

Parameters:
  • feats (torch.Tensor) – 一个任意形状的特征张量

  • len_dim (torch.Tensor) – 用作长度的维度

Returns:

result – 一个与feats形状匹配的张量,沿着长度维度从0到最大长度的范围在其他维度上重复

Return type:

torch.Tensor

speechbrain.utils.data_utils.non_batch_dims(sample)[source]

返回指定张量的所有维度,除了批次维度

Parameters:

sample (torch.Tensor) – 一个任意的张量

Returns:

dims – 一个维度列表

Return type:

list

speechbrain.utils.data_utils.masked_mean(sample, mask=None)[source]

一个计算每个样本平均值的度量函数,不包括填充

Parameters:
  • 样本 (torch.Tensor) – 一个频谱图的张量

  • mask (torch.Tensor) – 一个长度掩码

Returns:

result – 一个均值张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.masked_std(sample, mask=None)[source]

一个计算每个样本标准差的度量函数,不包括填充

Parameters:
  • 样本 (torch.Tensor) – 一个频谱图的张量

  • mask (torch.Tensor) – 一个长度掩码

Returns:

result – 一个均值张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.masked_min(sample, mask=None)[source]

一个计算每个样本最小值的度量函数

Parameters:
  • 样本 (torch.Tensor) – 一个频谱图的张量

  • mask (torch.Tensor) – 一个长度掩码

Returns:

result – 一个均值张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.masked_max(sample, mask=None)[source]

一个计算每个样本最小值的度量函数

Parameters:
  • 样本 (torch.Tensor) – 一个频谱图的张量

  • mask (torch.Tensor) – 一个长度掩码

Returns:

result – 一个均值张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.dist_stats(sample, mask=None)[source]

返回标准分布统计量(均值、标准差、最小值、最大值)

Parameters:
  • 样本 (torch.Tensor) – 一个频谱图的张量

  • mask (torch.Tensor) – 一个长度掩码

Returns:

result – 一个均值张量

Return type:

torch.Tensor

speechbrain.utils.data_utils.dict_value_combinations(values)[source]

返回给定字典中所有可能的键值组合

Parameters:

values (dict) –

一个以值列表为值的字典 示例: {

”digit”: [1,2,3], “speaker”: [10, 20]

}

Returns:

result – 一个字典列表,其中每个字典是一个可能的排列

Return type:

list

speechbrain.utils.data_utils.dict_value_combinations_gen(values, keys)[source]

返回指定值字典的一代排列

Parameters:
  • values (dict) –

    一个以值列表为值的字典 示例: {

    ”digit”: [1,2,3], “speaker”: [10, 20]

    }

  • keys (list) – 要考虑的键

Returns:

result – 一个生成字典的生成器,其中每个字典是一个可能的排列

Return type:

生成器