fastNLP.io.data_bundle

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

别名 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
add_collate_fn(fn, name=None)[源代码]

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

参数:
  • fn (callable) --
  • name --
返回:

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, 忽略其类型
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, 忽略其类型
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, 忽略其类型
Return Dict[str:Dict[str:Field]]:
 

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

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, 忽略其类型
Return Dict[str:Dict[str:Field]]:
 

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

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

delete_collate_fn(name=None)[源代码]

删除DataSet中的collate_fn

参数:name --
返回:
delete_dataset(name: str)[源代码]

删除名为name的DataSet

参数:name (str) --
返回: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

delete_vocab(field_name: str)[源代码]

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

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

获取名为name的dataset

参数:name (str) -- dataset的名称,一般为'train', 'dev', 'test'
返回:DataSet
get_dataset_names() → List[str][源代码]

返回DataBundle中DataSet的名称

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

获取field名为field_name对应的vocab

参数:field_name (str) -- 名称
返回:Vocabulary
get_vocab_names() → List[str][源代码]

返回DataBundle中Vocabulary的名称

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

迭代data_bundle中的DataSet

Example:

for name, dataset in data_bundle.iter_datasets():
    pass
返回:
iter_vocabs() → Union[str, fastNLP.core.vocabulary.Vocabulary][源代码]

迭代data_bundle中的DataSet

Example:

for field_name, vocab in data_bundle.iter_vocabs():
pass
返回:
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

set_dataset(dataset, name: str)[源代码]
参数:
  • dataset (DataSet) -- 传递给DataBundle的DataSet
  • name (str) -- dataset的名称
返回:

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

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_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_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_vocab(vocab, field_name)[源代码]

向DataBunlde中增加vocab

参数:
  • vocab (Vocabulary) -- 词表
  • field_name (str) -- 这个vocab对应的field名称
返回:

self