fastNLP.io.data_bundle module

class fastNLP.io.data_bundle.DataBundle(vocabs: dict = None, datasets: dict = None)[源代码]

基类:object

别名 fastNLP.io.DataBundle fastNLP.io.data_bundle.DataBundle

经过处理的数据信息,包括一系列数据集(比如:分开的训练集、验证集和测试集)以及各个field对应的vocabulary。该对象一般由fastNLP中各种 Loader的load函数生成,可以通过以下的方法获取里面的内容

Example:

data_bundle = YelpLoader().load({'train':'/path/to/train', 'dev': '/path/to/dev'})
train_vocabs = data_bundle.vocabs['train']
train_data = data_bundle.datasets['train']
dev_data = data_bundle.datasets['train']
__init__(vocabs: dict = None, datasets: dict = None)[源代码]
参数
  • vocabs – 从名称(字符串)到 Vocabulary 类型的dict

  • datasets – 从名称(字符串)到 DataSet 类型的dict。建议不要将相同的DataSet对象重复传入,可能会在 使用Pipe处理数据的时候遇到问题,若多个数据集确需一致,请手动deepcopy后传入。

set_vocab(vocab, field_name)[源代码]

向DataBunlde中增加vocab

参数
  • vocab (Vocabulary) – 词表

  • field_name (str) – 这个vocab对应的field名称

返回

self

set_dataset(dataset, name: str)[源代码]
参数
  • dataset (DataSet) – 传递给DataBundle的DataSet

  • name (str) – dataset的名称

返回

self

get_dataset(name: str)fastNLP.core.dataset.DataSet[源代码]

获取名为name的dataset

参数

name (str) – dataset的名称,一般为’train’, ‘dev’, ‘test’

返回

DataSet

delete_dataset(name: str)[源代码]

删除名为name的DataSet

参数

name (str) –

返回

self

get_vocab(field_name: str)fastNLP.core.vocabulary.Vocabulary[源代码]

获取field名为field_name对应的vocab

参数

field_name (str) – 名称

返回

Vocabulary

delete_vocab(field_name: str)[源代码]

删除vocab :param str field_name: :return: self

set_input(*field_names, flag=True, use_1st_ins_infer_dim_type=True, ignore_miss_dataset=True)[源代码]

将field_names中的field设置为input, 对data_bundle中所有的dataset执行该操作:

data_bundle.set_input('words', 'seq_len')   # 将words和seq_len这两个field的input属性设置为True
data_bundle.set_input('words', flag=False)  # 将words这个field的input属性设置为False
参数
  • field_names (str) – field的名称

  • flag (bool) – 将field_name的input状态设置为flag

  • use_1st_ins_infer_dim_type (bool) – 如果为True,将不会check该列是否所有数据都是同样的维度,同样的类型。将直接使用第一 行的数据进行类型和维度推断本列的数据的类型和维度。

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

返回

self

set_target(*field_names, flag=True, use_1st_ins_infer_dim_type=True, ignore_miss_dataset=True)[源代码]

将field_names中的field设置为target, 对data_bundle中所有的dataset执行该操作:

data_bundle.set_target('target', 'seq_len')   # 将words和target这两个field的input属性设置为True
data_bundle.set_target('target', flag=False)  # 将target这个field的input属性设置为False
参数
  • field_names (str) – field的名称

  • flag (bool) – 将field_name的target状态设置为flag

  • use_1st_ins_infer_dim_type (bool) – 如果为True,将不会check该列是否所有数据都是同样的维度,同样的类型。将直接使用第一 行的数据进行类型和维度推断本列的数据的类型和维度。

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

返回

self

set_pad_val(field_name, pad_val, ignore_miss_dataset=True)[源代码]

将DataBundle中所有的DataSet中名为field_name的Field的padding值设置为pad_val.

参数
  • field_name (str) –

  • pad_val (int) –

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

返回

self

set_ignore_type(*field_names, flag=True, ignore_miss_dataset=True)[源代码]

将DataBundle中所有的DataSet中名为*field_names的Field的ignore_type设置为flag状态

参数
  • field_names (str) –

  • flag (bool) –

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

返回

self

copy_field(field_name, new_field_name, ignore_miss_dataset=True)[源代码]

将DataBundle中所有的DataSet中名为field_name的Field复制一份并命名为叫new_field_name.

参数
  • field_name (str) –

  • new_field_name (str) –

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

返回

self

rename_field(field_name, new_field_name, ignore_miss_dataset=True, rename_vocab=True)[源代码]

将DataBundle中所有DataSet中名为field_name的field重命名为new_field_name.

参数
  • field_name (str) –

  • new_field_name (str) –

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

  • rename_vocab (bool) – 如果该field同时也存在于vocabs中,会将该field的名称对应修改

返回

self

delete_field(field_name, ignore_miss_dataset=True, delete_vocab=True)[源代码]

将DataBundle中所有DataSet中名为field_name的field删除掉.

参数
  • field_name (str) –

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

  • delete_vocab (bool) – 如果该field也在vocabs中存在,将该值也一并删除

返回

self

iter_datasets() → Union[str, fastNLP.core.dataset.DataSet][源代码]

迭代data_bundle中的DataSet

Example:

for name, dataset in data_bundle.iter_datasets():
    pass
返回

get_dataset_names() → List[str][源代码]

返回DataBundle中DataSet的名称

返回

get_vocab_names() → List[str][源代码]

返回DataBundle中Vocabulary的名称

返回

iter_vocabs() → Union[str, fastNLP.core.vocabulary.Vocabulary][源代码]

迭代data_bundle中的DataSet

Example:

for field_name, vocab in data_bundle.iter_vocabs():

pass

返回

apply_field(func, field_name: str, new_field_name: str, ignore_miss_dataset=True, **kwargs)[源代码]

DataBundle 中所有的dataset使用 apply_field() 方法

参数
  • func (callable) – input是instance中名为 field_name 的field的内容。

  • field_name (str) – 传入func的是哪个field。

  • new_field_name (str) – 将func返回的内容放入到 new_field_name 这个field中,如果名称与已有的field相同,则覆 盖之前的field。如果为None则不创建新的field。

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

  • kwargs (optional) –

    支持输入is_input,is_target,ignore_type

    1. is_input: bool, 如果为True则将名为 new_field_name 的field设置为input

    2. is_target: bool, 如果为True则将名为 new_field_name 的field设置为target

    3. ignore_type: bool, 如果为True则将名为 new_field_name 的field的ignore_type设置为true, 忽略其类型

    4. use_tqdm: bool, 是否显示tqdm进度条

    5. tqdm_desc: str, 当use_tqdm为True时,可以显示当前tqdm正在处理的名称

apply_field_more(func, field_name, modify_fields=True, ignore_miss_dataset=True, **kwargs)[源代码]

DataBundle 中所有的 dataset 使用 apply_field_more() 方法

注解

apply_field_moreapply_field 的区别参考 fastNLP.DataSet.apply_more() 中关于 apply_moreapply 区别的介绍。

参数
  • func (callable) – 参数是 DataSet 中的 Instance ,返回值是一个字典,key 是field 的名字,value 是对应的结果

  • field_name (str) – 传入func的是哪个field。

  • modify_fields (bool) – 是否用结果修改 DataSet 中的 Field, 默认为 True

  • ignore_miss_dataset (bool) – 当某个field名称在某个dataset不存在时,如果为True,则直接忽略该DataSet; 如果为False,则报错

  • kwargs (optional) –

    支持输入is_input, is_target, ignore_type

    1. is_input: bool, 如果为True则将被修改的field设置为input

    2. is_target: bool, 如果为True则将被修改的field设置为target

    3. ignore_type: bool, 如果为True则将被修改的field的ignore_type设置为true, 忽略其类型

    4. use_tqdm: bool, 是否显示tqdm进度条

    5. tqdm_desc: str, 当use_tqdm为True时,可以显示当前tqdm正在处理的名称

Return Dict[str:Dict[str:Field]]

返回一个字典套字典,第一层的 key 是 dataset 的名字,第二层的 key 是 field 的名字

apply(func, new_field_name: str, **kwargs)[源代码]

DataBundle 中所有的 dataset 使用 apply() 方法

对DataBundle中所有的dataset使用apply方法

参数
  • func (callable) – input是instance中名为 field_name 的field的内容。

  • new_field_name (str) – 将func返回的内容放入到 new_field_name 这个field中,如果名称与已有的field相同,则覆 盖之前的field。如果为None则不创建新的field。

  • kwargs (optional) –

    支持输入is_input,is_target,ignore_type

    1. is_input: bool, 如果为True则将名为 new_field_name 的field设置为input

    2. is_target: bool, 如果为True则将名为 new_field_name 的field设置为target

    3. ignore_type: bool, 如果为True则将名为 new_field_name 的field的ignore_type设置为true, 忽略其类型

    4. use_tqdm: bool, 是否显示tqdm进度条

    5. tqdm_desc: str, 当use_tqdm为True时,可以显示当前tqdm正在处理的名称

apply_more(func, modify_fields=True, **kwargs)[源代码]

DataBundle 中所有的 dataset 使用 apply_more() 方法

注解

apply_moreapply 的区别参考 fastNLP.DataSet.apply_more() 中关于 apply_moreapply 区别的介绍。

参数
  • func (callable) – 参数是 DataSet 中的 Instance ,返回值是一个字典,key 是field 的名字,value 是对应的结果

  • modify_fields (bool) – 是否用结果修改 DataSet 中的 Field , 默认为 True

  • kwargs (optional) –

    支持输入is_input,is_target,ignore_type

    1. is_input: bool, 如果为True则将被修改的的field设置为input

    2. is_target: bool, 如果为True则将被修改的的field设置为target

    3. ignore_type: bool, 如果为True则将被修改的的field的ignore_type设置为true, 忽略其类型

    4. use_tqdm: bool, 是否显示tqdm进度条

    5. tqdm_desc: str, 当use_tqdm为True时,可以显示当前tqdm正在处理的名称

Return Dict[str:Dict[str:Field]]

返回一个字典套字典,第一层的 key 是 dataset 的名字,第二层的 key 是 field 的名字

add_collate_fn(fn, name=None)[源代码]

向所有DataSet增加collate_fn, collate_fn详见 DataSet 中相关说明.

参数
  • fn (callable) –

  • name

返回

delete_collate_fn(name=None)[源代码]

删除DataSet中的collate_fn

参数

name

返回