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
我正在研究 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