fastNLP.core.field¶
-
class
fastNLP.core.field.
Padder
(pad_val=0, **kwargs)[源代码]¶ 别名
fastNLP.Padder
fastNLP.core.field.Padder
所有padder都需要继承这个类,并覆盖__call__方法。 用于对batch进行padding操作。传入的element是inplace的,即直接修改element可能导致数据变化,建议inplace修改之前deepcopy一份。
-
__call__(self, contents, field_name, field_ele_dtype):
-
-
class
fastNLP.core.field.
AutoPadder
(pad_val=0)[源代码]¶ -
别名
fastNLP.AutoPadder
fastNLP.core.field.AutoPadder
根据contents的数据自动判定是否需要做padding。
1 如果元素类型(元素类型是指field中最里层元素的数据类型, 可以通过FieldArray.dtype查看,比如['This', 'is', ...]的元素类 型为str, [[1,2], ...]的元素类型为int)的数据不为数值类型则不会进行pad
2 如果元素类型为数值类型,比如np.int64, np.float64, int, float, torch.int64等
2.1 如果该field的内容为数值类型(包括int, float等),比如为seq_len, 则不进行padding
2.2 如果该field的内容等价于一维list, 那么会将Batch中的List pad为一样长。
- 2.3 如果该field的内容等价于二维list,那么会按照英语character padding的方式进行padding。如果是character padding建议使用
class: fastNLP.EngChar2DPadder. - 2.4 如果该field的内容等价于三维list,则如果每个instance在每个维度上相等,会组成一个batch的tensor返回,这种情况应该是为图片
- 的情况。
3 其它情况不进行处理,返回一个np.array类型。
-
class
fastNLP.core.field.
EngChar2DPadder
(pad_val=0, pad_length=0)[源代码]¶ -
别名
fastNLP.EngChar2DPadder
fastNLP.core.field.EngChar2DPadder
用于为英语执行character级别的2D padding操作。对应的field内容应该类似[['T', 'h', 'i', 's'], ['a'], ['d', 'e', 'm', 'o']], 但这个Padder只能处理index为int的情况。
padded过后的batch内容,形状为(batch_size, max_sentence_length, max_word_length). max_sentence_length为这个batch中最大句 子长度;max_word_length为这个batch中最长的word的长度:
from fastNLP import DataSet from fastNLP import EngChar2DPadder from fastNLP import Vocabulary dataset = DataSet({'sent': ['This is the first demo', 'This is the second demo']}) dataset.apply(lambda ins:[list(word) for word in ins['sent'].split()], new_field_name='chars') vocab = Vocabulary() vocab.from_dataset(dataset, field_name='chars') vocab.index_dataset(dataset, field_name='chars') dataset.set_input('chars') padder = EngChar2DPadder() dataset.set_padder('chars', padder) # chars这个field的设置为了EnChar2DPadder