speechbrain.utils.data_pipeline 模块

一个用于数据转换的管线。

示例

>>> from hyperpyyaml import load_hyperpyyaml
>>> yamlstring = '''
... pipeline: !new:speechbrain.utils.data_pipeline.DataPipeline
...     static_data_keys: [a, b]
...     dynamic_items:
...         -   func: !name:operator.add
...             takes: ["a", "b"]
...             provides: foo
...         -   func: !name:operator.sub
...             takes: ["foo", "b"]
...             provides: bar
...     output_keys: ["foo", "bar"]
... '''
>>> hparams = load_hyperpyyaml(yamlstring)
>>> hparams["pipeline"]({"a":1, "b":2})
{'foo': 3, 'bar': 1}
作者
  • Aku Rouhe

摘要

DataPipeline

将数据转换组织成管线。

DynamicItem

本质上代表一个数据转换函数。

GeneratorDynamicItem

本质上代表一个多步数据转换。

StaticItem

表示静态数据项的数据类。

函数

provides

一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。

provides_decorator

一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。

takes

一个装饰器,用于创建 DynamicItem 并指定其 argkeys。

takes_decorator

一个装饰器,用于创建 DynamicItem 并指定其 argkeys。

参考

class speechbrain.utils.data_pipeline.StaticItem(key: str)[源代码]

基类: object

表示静态数据项的数据类。

静态项是内存中的项,因此不需要动态计算。

key: str
class speechbrain.utils.data_pipeline.DynamicItem(takes=[], func=None, provides=[])[源代码]

基类: object

本质上代表一个数据转换函数。

DynamicItem 接收一些参数,并在调用时动态计算其值。一个直接的用例是动态加载磁盘上的某些内容;接收路径并提供加载的数据。

此类的实例通常通过 @takes 和 @provides 装饰器隐式创建,或通过指定接收和提供的参数以及函数来创建。

对应的 GeneratorDynamicItem 应该用于生成器函数。

参数:
  • takes (list) – 计算其输出所需的项的键。

  • func (callable) – 用于计算输出的函数。

  • provides (list) – 此项提供的键。

next_takes()[源代码]

在调用时,要提供给此项的下一个 argkeys。

next_provides()[源代码]

在调用时,此项提供的下一个键。

provided_in_order()[源代码]

假设此项可能需要被多次调用;在每次调用时,它提供哪些键。返回一个列表,其长度等于此项可能被调用的次数。

reset()[源代码]

表示在本次管线调用中,此项将不再被调用。

class speechbrain.utils.data_pipeline.GeneratorDynamicItem(*args, **kwargs)[源代码]

基类: DynamicItem

本质上代表一个多步数据转换。

这是 DynamicItem 的生成器函数对应项 (DynamicItem 应该用于普通函数)。

GeneratorDynamicItem 首先接收一些参数,然后在多个步骤中使用这些参数,在调用时逐步计算一些值。

一个典型的用例是对数据进行一系列转换:例如,接收文本作为字符串,第一次调用时提供分词版本,然后在第二次调用时提供整数编码版本。即使整数编码器需要基于第一次输出进行训练,这仍然可以使用。

主要优点是能够在一个清晰的函数中定义管线,即使管线的部分依赖于其他部分进行初始化。

参数:
  • *args (tuple) – 转发给父类

  • **kwargs (tuple) – 转发给父类

示例

>>> lab2ind = {}
>>> def text_pipeline(text):
...     text = text.lower().strip()
...     text = "".join(c for c in text if c.isalpha() or c == " ")
...     words = text.split()
...     yield words
...     encoded = [lab2ind[word] for word in words]
...     yield encoded
>>> item = GeneratorDynamicItem(
...         func=text_pipeline,
...         takes=["text"],
...         provides=["words", "words_encoded"])
>>> # First create the integer-encoding:
>>> ind = 1
>>> for token in item("Is this it? - This is it."):
...     if token not in lab2ind:
...         lab2ind[token] = ind
...         ind += 1
>>> # Now the integers can be encoded!
>>> item()
[1, 2, 3, 2, 1, 3]
next_takes()[源代码]

在调用时,要提供给此项的下一个 argkeys。

next_provides()[源代码]

在调用时,此项提供的下一个键。

provided_in_order()[源代码]

假设此项可能需要被多次调用;在每次调用时,它提供哪些键。返回一个列表,其长度等于此项可能被调用的次数。

reset()[源代码]

表示在本次管线调用中,此项将不再被调用。

speechbrain.utils.data_pipeline.takes(*argkeys)[源代码]

一个装饰器,用于创建 DynamicItem 并指定其 argkeys。

如果包装的对象是生成器函数 (包含 yield 语句),则创建一个 GeneratorDynamicItem。如果对象已经是 DynamicItem,则仅为此 DynamicItem 指定 argkeys。否则创建一个新的普通 DynamicItem,并指定 argkeys。

参数始终在开始时传递给函数。生成器可以支持发送新参数,但对于此类用例,只需创建一个新的动态项。GeneratorDynamicItem 类旨在用于接收输入并以多种方式转换它的管线,其中间表示可能需要用于例如拟合 BPE 分词器。

参数:

*argkeys (tuple) – 期望作为输入的 数据键

返回类型:

带指定输入 argkeys 的被装饰函数

示例

>>> @takes("text")
... def tokenize(text):
...     return text.strip().lower().split()
>>> tokenize.provides = ["tokenized"]
>>> tokenize('      This Example gets tokenized')
['this', 'example', 'gets', 'tokenized']
speechbrain.utils.data_pipeline.takes_decorator(*argkeys)

一个装饰器,用于创建 DynamicItem 并指定其 argkeys。

如果包装的对象是生成器函数 (包含 yield 语句),则创建一个 GeneratorDynamicItem。如果对象已经是 DynamicItem,则仅为此 DynamicItem 指定 argkeys。否则创建一个新的普通 DynamicItem,并指定 argkeys。

参数始终在开始时传递给函数。生成器可以支持发送新参数,但对于此类用例,只需创建一个新的动态项。GeneratorDynamicItem 类旨在用于接收输入并以多种方式转换它的管线,其中间表示可能需要用于例如拟合 BPE 分词器。

参数:

*argkeys (tuple) – 期望作为输入的 数据键

返回类型:

带指定输入 argkeys 的被装饰函数

示例

>>> @takes("text")
... def tokenize(text):
...     return text.strip().lower().split()
>>> tokenize.provides = ["tokenized"]
>>> tokenize('      This Example gets tokenized')
['this', 'example', 'gets', 'tokenized']
speechbrain.utils.data_pipeline.provides(*output_keys)[源代码]

一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。

如果包装的对象是生成器函数 (包含 yield 语句),则创建一个 GeneratorDynamicItem。如果对象已经是 DynamicItem,则仅为此 DynamicItem 指定提供的键。否则创建一个新的普通 DynamicItem,并指定提供的键。

参数:

*output_keys (tuple) – 此函数将生成的数据键

返回类型:

带指定输出键的被装饰函数

注意

对于生成器和普通函数,行为略有不同,如果指定了多个输出键,例如 @provides(“signal”, “mfcc”)。普通函数应返回一个长度等于 len(output_keys) 的元组,而生成器应该逐个产生项。

>>> @provides("signal", "feat")
... def read_feat():
...     wav = [.1,.2,-.1]
...     feat = [s**2 for s in wav]
...     return wav, feat
>>> @provides("signal", "feat")
... def read_feat():
...     wav = [.1,.2,-.1]
...     yield wav
...     feat = [s**2 for s in wav]
...     yield feat

如果一次产生多个键,请写成例如,

>>> @provides("wav_read", ["left_channel", "right_channel"])
... def read_multi_channel():
...     wav = [[.1,.2,-.1],[.2,.1,-.1]]
...     yield wav
...     yield wav[0], wav[1]
speechbrain.utils.data_pipeline.provides_decorator(*output_keys)

一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。

如果包装的对象是生成器函数 (包含 yield 语句),则创建一个 GeneratorDynamicItem。如果对象已经是 DynamicItem,则仅为此 DynamicItem 指定提供的键。否则创建一个新的普通 DynamicItem,并指定提供的键。

参数:

*output_keys (tuple) – 此函数将生成的数据键

返回类型:

带指定输出键的被装饰函数

注意

对于生成器和普通函数,行为略有不同,如果指定了多个输出键,例如 @provides(“signal”, “mfcc”)。普通函数应返回一个长度等于 len(output_keys) 的元组,而生成器应该逐个产生项。

>>> @provides("signal", "feat")
... def read_feat():
...     wav = [.1,.2,-.1]
...     feat = [s**2 for s in wav]
...     return wav, feat
>>> @provides("signal", "feat")
... def read_feat():
...     wav = [.1,.2,-.1]
...     yield wav
...     feat = [s**2 for s in wav]
...     yield feat

如果一次产生多个键,请写成例如,

>>> @provides("wav_read", ["left_channel", "right_channel"])
... def read_multi_channel():
...     wav = [[.1,.2,-.1],[.2,.1,-.1]]
...     yield wav
...     yield wav[0], wav[1]
class speechbrain.utils.data_pipeline.DataPipeline(static_data_keys, dynamic_items=[], output_keys=[])[源代码]

基类: object

将数据转换组织成管线。

参数:
  • static_data_keys (list) – 作为数据提供的键

  • dynamic_items (list) – 包含 "func", "takes", 和 "provides" 映射的列表

  • output_keys (list) – 用作输出的键

示例

>>> pipeline = DataPipeline(
...     static_data_keys=["text"],
...     dynamic_items=[
...     {"func": lambda x: x.lower(), "takes": "text", "provides": "foo"},
...     {"func": lambda x: x[::-1], "takes": "foo", "provides": "bar"},
...     ],
...     output_keys=["bar"],
... )
>>> pipeline({"text": "Test"})
{'bar': 'tset'}
add_static_keys(static_keys)[源代码]

通知管线有关静态项的信息。

静态项是作为数据提供给 __call__ 的项。

add_dynamic_items(dynamic_items)[源代码]

一次添加多个动态项。

add_dynamic_item(func, takes=None, provides=None)[源代码]

向管线添加一个动态项。

有两种调用约定。对于 DynamicItem 对象,只需使用:add_dynamic_item(dynamic_item)。否则,应使用:add_dynamic_item(func, takes, provides)

参数:
  • func (callable, DynamicItem) – 如果给定的是 DynamicItem,则直接添加。否则创建一个 DynamicItem,并指定要使用的可调用对象。如果给定的是生成器函数,则创建一个 GeneratorDynamicItem。否则创建一个普通的 DynamicItem。

  • takes (list, str) – 键列表。当 func 被调用时,每个键都会解析为数据中的一个条目或另一个 dynamic_item 的输出。然后 func 会将这些作为位置参数调用,顺序与此处指定的相同。单个键可以作为裸字符串给出。

  • provides (str, list) – 对于普通函数,它提供的键或键列表。如果给出生成器函数,它按顺序产生(yield)的键或键列表。另请参阅 provides 装饰器。单个键可以作为裸字符串给出。

返回类型:

None

set_output_keys(keys)[源代码]

用于更改输出键。

也会重新评估执行顺序。因此,如果你请求不同的输出,数据管线的某些部分可能会被跳过。

参数:

keys (dict, list, None) –

输出中要生成的键 (str) 列表。

如果给定字典;它用于将内部键映射到输出键。来自 output_keys 字典的键值对中,键出现在外部,值是内部键。

compute_outputs(data)[源代码]
参数:

data (dict) – 按键分类的数据条目字典。

返回:

带有已设置的键。

返回类型:

dict

compute_specific(keys, data)[源代码]

计算特定项的输出,但不更改 output_keys。

get_selected_node_ids(selected_keys)[源代码]

将选定的键转换为依赖图键。