我使用PyTorch创建了几个模型,每个模型都在一个单独的笔记本中运行。
当使用torch文本字段创建词汇时,它会为每个类分配一个正确的编号,而我最初的类标签也是数字。但为每个类分配的标签与原始类标签不同。我想知道是否有一种方法可以为我的标签单词分配一个确切的数字类。
我的创建torch文本字段的代码:
LABEL = data.LabelField()
LABEL.build_vocab(train_data)我的结果是:
print(LABEL.vocab.stoi)
defaultdict(None, {'1': 0, '2': 1, '0': 2})结果是我想要的:
defaultdict(None, {'0': 0, '1': 1, '2': 2})我为解决方案编写了以下代码。创建这样的this是正确的吗?
LABEL.build_vocab({'0': 0, '1': 1, '2': 2})附言:我知道这种赋值只是在模型中使用,一切都很好,但我担心我在测试数据上比较模型结果的时间,每次我看供词矩阵时更担心我的困惑。
发布于 2021-11-01 02:39:35
我不认为这会给你你想要的。如果项出现在数据集中某个min_freq (默认值为min_freq=1)之上,则build_vocab会迭代数据集,并将该项映射到索引。我认为您在上一个示例中给出的内容将告诉build_vocab,项目'0‘出现了0次,因此它不会包含在您的数据集中。
如果你担心在审查过程中把事情搞混,你可以编写一个脚本来获取某个标签的索引,然后获取该索引中的任何内容,并将其映射到具有您想要的索引的新字典。这可能比打乱torchtext构建词汇表的方式容易得多。
EDIT:一个更好的解决方案可能是在定义标签字段时设置use_vocab=False:
LABEL = data.LabelField(use_vocab=False)当你的数据已经是数值型的时候,这在你的例子中是有效的。从torchtext 0.8 docs
use_vocab:是否使用词汇对象。如果为False,则此字段中的数据应该已经是数值数据。默认值:True。
https://stackoverflow.com/questions/69285712
复制相似问题