speechbrain.utils.data_pipeline 模块
数据转换的管道。
Example
>>> 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}
- Author:
阿库·柔荷
摘要
类:
将数据转换组织成一个管道。 |
|
本质上代表一个数据转换函数。 |
|
本质上代表了一个多步骤的数据转换。 |
|
表示静态项的数据类。 |
函数:
装饰器,用于创建一个DynamicItem并指定它提供的键。 |
|
装饰器,用于创建一个DynamicItem并指定它提供的键。 |
|
装饰器,用于创建一个DynamicItem并指定其argkeys。 |
|
装饰器,用于创建一个DynamicItem并指定其argkeys。 |
参考
- class speechbrain.utils.data_pipeline.StaticItem(key: str)[source]
基础类:
object表示静态项目的数据类。
静态项目是内存中的项目,因此它们不需要动态计算。
- class speechbrain.utils.data_pipeline.DynamicItem(takes=[], func=None, provides=[])[source]
基础类:
object本质上代表一个数据转换函数。
DynamicItem 接受一些参数,并在调用时动态计算其值。一个直接的用例是从磁盘动态加载某些内容;获取路径并提供加载的数据。
此类的实例通常通过@takes和@provides装饰器隐式创建,或者通过指定所需的参数和提供的参数以及函数来创建。
对应的是 GeneratorDynamicItem,它应该用于生成器函数。
- class speechbrain.utils.data_pipeline.GeneratorDynamicItem(*args, **kwargs)[source]
基础类:
DynamicItem本质上代表了一个多步骤的数据转换。
这是DynamicItem的生成器函数对应物(应该用于常规函数)。
GeneratorDynamicItem 首先接受一些参数,然后在调用时使用这些参数通过多个步骤逐步计算一些值。
一个典型的用例是数据转换的管道:例如,将文本作为字符串输入,首先生成一个分词版本,然后在第二次调用时提供一个整数编码版本。即使整数编码器需要在第一次输出上进行训练,也可以使用这种方法。
主要的好处是能够在一个清晰的函数中定义管道,即使管道的某些部分依赖于其他部分的初始化。
Example
>>> 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)[source]
装饰器,用于创建一个DynamicItem并指定其argkeys。
如果包装的对象是一个生成器函数(包含 yield 语句), 则创建一个 GeneratorDynamicItem。如果对象已经是一个 DynamicItem, 则只需为其指定 argkeys。否则,创建一个新的常规 DynamicItem,并指定 argkeys。
参数总是在开始时传递给函数。生成器可以支持发送新参数,但对于此类用例,只需创建一个新的动态项。GeneratorDynamicItem 类适用于接收输入并以多种方式转换它的管道,其中可能需要中间表示,例如用于拟合 BPE 分词器。
- Parameters:
*argkeys (tuple) – 预期作为输入的数据键
- Return type:
装饰后的函数,指定了输入参数
Example
>>> @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,则只需为其指定 argkeys。否则,创建一个新的常规 DynamicItem,并指定 argkeys。
参数总是在开始时传递给函数。生成器可以支持发送新参数,但对于此类用例,只需创建一个新的动态项。GeneratorDynamicItem 类适用于接收输入并以多种方式转换它的管道,其中可能需要中间表示,例如用于拟合 BPE 分词器。
- Parameters:
*argkeys (tuple) – 预期作为输入的数据键
- Return type:
装饰后的函数,指定了输入参数
Example
>>> @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)[source]
装饰器,用于创建一个DynamicItem并指定它提供的键。
如果包装的对象是一个生成器函数(包含 yield 语句), 则创建一个 GeneratorDynamicItem。如果对象已经是一个 DynamicItem, 则仅为该对象指定提供的键。否则,创建一个新的常规 DynamicItem,并指定提供的键。
- Parameters:
*output_keys (tuple) – 该函数将生成的数据键
- Return type:
装饰后的函数,指定了输出键
注意
对于生成器和常规函数,行为略有不同,如果指定了许多输出键,例如 @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,并指定提供的键。
- Parameters:
*output_keys (tuple) – 该函数将生成的数据键
- Return type:
装饰后的函数,指定了输出键
注意
对于生成器和常规函数,行为略有不同,如果指定了许多输出键,例如@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=[])[source]
基础类:
object将数据转换组织成一个管道。
- Parameters:
Example
>>> 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)[source]
向管道添加一个动态项。
两种调用约定。对于DynamicItem对象,只需使用: add_dynamic_item(dynamic_item) 但除此之外,应该使用: add_dynamic_item(func, takes, provides)
- Parameters:
func (callable, DynamicItem) – 如果提供了 DynamicItem,则直接添加。否则,创建一个 DynamicItem,并指定要使用的可调用对象。如果提供了生成器函数,则创建一个 GeneratorDynamicItem。否则,创建一个普通的 DynamicItem。
takes (list, str) – 键的列表。当调用 func 时,每个键会被解析为数据中的条目或另一个 dynamic_item 的输出。然后,func 会以这些作为位置参数调用,顺序与此处指定的顺序相同。单个键可以作为裸字符串给出。
提供 (str, list) – 对于常规函数,它提供的键或键列表。 如果你给出一个生成器函数,它按顺序生成的键或键列表。 也可以参考provides装饰器。 单个键可以作为裸字符串给出。
- Return type:
无