torchtext 0.6.0跑Transformer教程报Vocab对象不可调用如何解决
核心功能说明
你提到的vocab(tokenizer(item))写法的预期作用,是将分词后得到的token列表映射为词汇表对应的整数索引,并非调用vectors属性。vectors属性用于存储预训练词向量,和此处的ID映射需求无关。
报错原因
不管是torchtext 0.6.0还是0.10.0版本,原生的Vocab类都没有实现__call__方法,不支持直接调用。教程中出现的可调用写法,要么是对Vocab实例做了自定义封装,要么是搭配了torchtext提供的转换包装类使用,原生场景下无法直接使用该写法。
适配torchtext 0.6.0的修改方案
直接使用0.6.0版本Vocab暴露的stoi属性(字符串到索引的映射字典)完成转换即可,修改后的代码如下:
# 可提前配置未登录词的默认索引,避免出现KeyError unk_idx = vocab.stoi.get('<unk>', 0) data = [torch.tensor([vocab.stoi.get(token, unk_idx) for token in tokenizer(item)], dtype=torch.long) for item in raw_text_iter] return torch.cat(tuple(filter(lambda t: t.numel() > 0, data)))
内容的提问来源于stack exchange,提问作者Ælex
相关产品推荐
相关产品推荐

