AttributeError: 'Vocab'对象无'stoi'属性报错原因及解决方法求问
问题原因
该报错确实由torchtext版本差异导致:
torchtext ≤0.8.x的旧版本中,Vocab对象默认公开stoi字典属性,用于存储词到数字索引的映射;而0.9.0及以上的新版本移除了该公开属性,对应功能替换为get_stoi()方法,也可直接通过vocab[目标词]的方式查询索引。
解决方案
有两种可行修复方式,可根据需求选择:
- 方案1:版本降级,无需修改代码
直接安装适配旧版API的torchtext版本即可,对应适配PyTorch 1.7.x版本,安装命令:pip install torchtext==0.8.1 - 方案2:修改现有代码适配新版torchtext
将_dynamic_dict方法中所有调用src_vocab.stoi[w]的部分,替换为src_vocab[w]或者src_vocab.get_stoi()[w]即可,修改后代码如下:def _dynamic_dict(self, examples_iter): for example in examples_iter: src = example["src"] src_vocab = torchtext.vocab.Vocab(Counter(src)) self.src_vocabs.append(src_vocab) # Mapping source tokens to indices in the dynamic dict. src_map = torch.LongTensor([src_vocab[w] for w in src]) example["src_map"] = src_map if "tgt" in example: tgt = example["tgt"] mask = torch.LongTensor( [0] + [src_vocab[w] for w in tgt] + [0]) example["alignment"] = mask yield example
内容的提问来源于stack exchange,提问作者U. Iceman
相关产品推荐
相关产品推荐

