2021SC@SDUSC
我们继续分析Field类中的其他类函数。首先看preprocess()函数。
def preprocess(self, x):
if self.sequential and isinstance(x, str):
x = self.tokenize(x.rstrip('\n'))
if self.lower:
x = Pipeline(str.lower)(x)
if self.sequential and self.use_vocab and self.stop_words is not None:
x = [w for w in x if w not in self.stop_words]
if self.preprocessing is not None:
return self.preprocessing(x)
else:
return x
这个函数首先判断序列x是否为顺序的字符串类型的数据,如果x满足条件,就被标记。
然后判断序列x是否为小写,如果是的话,就把x传递给用户提供的“预处理”管道。
如果序列x是顺序的序列且是使用Vocab对象的,并且预处理步骤中有需要丢弃的令牌,那么就对x进行数据的清洗。
最后返回预处理后的x或者x。
再看process()函数。
def process(self, batch, device=None):
padded = self.pad(batch)
tensor = self.numericalize(padded, device=device)
return tensor
process函数来处理一系列的例子来创建一个torch.Tensor。对批处理进行pad、数字化和后处理,然后创建一个张量。
参数batch(list(object)):来自一批示例的对象列表。返回的tensor是给定输入的处理对象和自定义后处理管道。
在Field类中还有以下三个函数,接下来我会逐个解释他们的作用。