TorchText Vocab TypeError: Vocab.__init__() got an unexpected keyword argument 'min_freq'

TorchText Vocab TypeError: Vocab.__init__() got an unexpected keyword argument 'min_freq'

我正在研究 CNN 情感分析机器学习模型,该模型使用 Torchtext 库提供的 IMDb 数据集。 在我的一行代码中

vocab = Vocab(counter, min_freq = 1, specials=('\<unk\>', '\<BOS\>', '\<EOS\>', '\<PAD\>'))

我收到 min_freq 参数的 TypeError,尽管我确定它是该函数可接受的参数之一。我还收到 UserWarning Lambda 函数不支持 pickle,请改用常规 python 函数或 functools partial。完整代码

from torchtext.datasets import IMDB
from collections import Counter
from torchtext.data.utils import get_tokenizer
from torchtext.vocab import Vocab
tokenizer = get_tokenizer('basic_english')  
train_iter = IMDB(split='train')
test_iter = IMDB(split='test')
counter = Counter()
for (label, line) in train_iter:
    counter.update(tokenizer(line))
vocab = Vocab(counter, min_freq = 1, specials=('\<unk\>', '\<BOS\>', '\<EOS\>', '\<PAD\>'))

源链接 towardsdatascience github Legacy to new

我已经尝试删除 min_freq 参数并使用如下默认函数

vocab = Vocab(counter, specials=('\<unk\>', '\<BOS\>', '\<EOS\>', '\<PAD\>'))

但是我最终得到了相同类型的错误,但针对的是 specials 参数而不是 min_freq。

任何帮助将不胜感激

谢谢。

https://github.com/pytorch/text/issues/1445所述,您应该将“Vocab”更改为“vocab”。我认为他们 miss-type legacy-to-new 笔记本。

正确代码:

from torchtext.datasets import IMDB
from collections import Counter
from torchtext.data.utils import get_tokenizer
from torchtext.vocab import vocab
tokenizer = get_tokenizer('basic_english')  
train_iter = IMDB(split='train')
test_iter = IMDB(split='test')
counter = Counter()
for (label, line) in train_iter:
    counter.update(tokenizer(line))
vocab = vocab(counter, min_freq = 1, specials=('\<unk\>', '\<BOS\>', '\<EOS\>', '\<PAD\>'))

我的环境:

  • python 3.9.12
  • 火炬文本 0.12.0
  • 火炬 1.11.0

您可以尝试 torchtext.legacy.vocab 而不是 torchtext.vocab,这可能会解决问题。这对我有用:

from torchtext.datasets import IMDB
from collections import Counter
from torchtext.data.utils import get_tokenizer
from torchtext.legacy.vocab import vocab