类型错误:"词汇"对象不可调用



我正在遵循1.9 pytorch上发布的火炬文本转换器教程。但是,因为我正在使用Tegra TX2,所以我坚持使用torchtext 0.6.0,而不是0.10.0(我认为教程使用的是0.10.0)。

在本教程之后,将抛出一个错误:

data = [torch.tensor(vocab(tokenizer(item)), dtype=torch.long) for item in raw_text_iter]
return torch.cat(tuple(filter(lambda t: t.numel() > 0, data)))

错误是:

TypeError: 'Vocab' object is not callable

我明白错误的意思,我不知道的是,在这种情况下,这是Vocab的预期回报吗?

查看TorchText 0.6.0的文档,我看到它有:

  • stoi
  • itos
  • freqs
  • vectors

该示例是否期望Vocab中的vectors?

<标题>

编辑:我查了0.10.0文档,它没有__call__

查看0.10.0中Vocab实现的源代码,显然它是torch.nn.Module的子类,这意味着它从那里继承了__call__(调用它大致相当于调用它的forward()方法,但有一些额外的机制来实现钩子等)。

我们还可以看到它封装了一些底层的VocabPyBind对象(相当于旧版本中的Vocab类),并且它的forward()方法只是调用它的lookup_indices方法。

所以简而言之,在旧版本的标准库中,似乎等效的是调用vocab.lookup_indices(tokenizer(item))

更新:显然,在0.6.0中,Vocab类甚至没有lookup_indices方法,但阅读源代码,这相当于:

[vocab[token] for token in tokenizer]

如果您能够升级,为了向前兼容,您可以编写这样的包装器:

from torchtext.vocab import Vocab as _Vocab
class Vocab(_Vocab):
def lookup_indices(self, tokens):
return [vocab[token] for token in tokens]
def __call__(self, tokens):
return self.lookup_indices(tokens)

相关内容

  • 没有找到相关文章

最新更新