You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Torchtext Vocab通过索引查词元时触发AttributeError错误

问题分析与解决

问题场景

你编写了以下代码创建词汇表,尝试通过索引查找对应词元:

from torchtext.vocab import Vocab
from collections import Counter

def create_vocab(file_, tokenizer):
    counter_dict = Counter()
    for sentence in file_:
        counter_dict.update(tokenizer(sentence))

    return Vocab(counter_dict)

vocab = create_vocab(w_data, tokenizer)

vocab.lookup_indices([1,2,3])

运行后触发错误:

AttributeError: 'Counter' object has no attribute 'lookup_indices'

问题原因

  1. 方法调用错误:你要实现的是「通过索引找词元」,但lookup_indices的作用是将词元转换为索引,对应的「索引转词元」方法应该是lookup_tokens。
  2. 变量类型异常:错误提示说明vocab实际是Counter对象而非Vocab实例,大概率是create_vocab函数返回值出了问题——要么是Vocab(counter_dict)构造失败,要么是后续代码不小心把vocab重新赋值成了Counter。

解决步骤

  1. 修正方法调用:把vocab.lookup_indices([1,2,3])替换成vocab.lookup_tokens([1,2,3]),这才是索引转词元的正确方法。
  2. 确保vocab是Vocab实例:
    • 检查w_data是否是合法的可迭代对象(比如每个元素是字符串句子),确认tokenizer能正常拆分词元。
    • 在create_vocab返回前加一行print(type(Vocab(counter_dict))),验证返回的是Vocab类型,避免构造失败。
    • 排查后续代码有没有对vocab重新赋值的操作,比如误写vocab = counter_dict。

兼容旧版本补充

如果你的torchtext版本较低,Vocab类可能没有lookup_tokens方法,此时可以直接访问vocab.itos属性(itos是index to string的缩写)实现需求:

[vocab.itos[idx] for idx in [1,2,3]]

内容的提问来源于stack exchange,提问作者Bishwa Karki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:00:57