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
摘要
类
将数据转换组织成管线。 |
|
本质上代表一个数据转换函数。 |
|
本质上代表一个多步数据转换。 |
|
表示静态数据项的数据类。 |
函数
一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。 |
|
一个装饰器,用于创建 DynamicItem 并指定它提供哪些键。 |
|
一个装饰器,用于创建 DynamicItem 并指定其 argkeys。 |
|
一个装饰器,用于创建 DynamicItem 并指定其 argkeys。 |
参考
- class speechbrain.utils.data_pipeline.StaticItem(key: str)[源代码]
基类:
object
表示静态数据项的数据类。
静态项是内存中的项,因此不需要动态计算。
- class speechbrain.utils.data_pipeline.DynamicItem(takes=[], func=None, provides=[])[源代码]
基类:
object
本质上代表一个数据转换函数。
DynamicItem 接收一些参数,并在调用时动态计算其值。一个直接的用例是动态加载磁盘上的某些内容;接收路径并提供加载的数据。
此类的实例通常通过 @takes 和 @provides 装饰器隐式创建,或通过指定接收和提供的参数以及函数来创建。
对应的 GeneratorDynamicItem 应该用于生成器函数。
- class speechbrain.utils.data_pipeline.GeneratorDynamicItem(*args, **kwargs)[源代码]
基类:
DynamicItem
本质上代表一个多步数据转换。
这是 DynamicItem 的生成器函数对应项 (DynamicItem 应该用于普通函数)。
GeneratorDynamicItem 首先接收一些参数,然后在多个步骤中使用这些参数,在调用时逐步计算一些值。
一个典型的用例是对数据进行一系列转换:例如,接收文本作为字符串,第一次调用时提供分词版本,然后在第二次调用时提供整数编码版本。即使整数编码器需要基于第一次输出进行训练,这仍然可以使用。
主要优点是能够在一个清晰的函数中定义管线,即使管线的部分依赖于其他部分进行初始化。
示例
>>> 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]
- 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
将数据转换组织成管线。
- 参数:
示例
>>> 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_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