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

训练动态伯努利词嵌入(DWB)模型时出现IndexError: index out of range in self错误的求助

训练动态伯努利词嵌入(DWB)模型时出现IndexError: index out of range in self错误的求助

从你给出的错误栈来看,这个问题的核心原因很明确:训练数据里的词索引超出了模型Embedding层的词表范围。具体来说,PyTorch的Embedding层在处理输入时,发现某个词的ID值大于等于词表的总大小(也就是你过滤后的dictionary的长度),导致索引越界。

我之前调试类似的词嵌入模型时也碰到过这种情况,大概率是你在过滤词表后,没有同步清理训练数据里的无效词——也就是那些被dictionary.filter_extremes()移除的词,还留在你的dataset["bow"]里,导致train_model函数在把这些词转成ID时,生成了超出词表范围的索引值。

下面是具体的修复步骤:

1. 同步清理训练数据,只保留词表内的词

你已经创建了过滤后的dictionary,但还需要把dataset里的词列表转换成对应的词ID,同时过滤掉不在词表里的词:

# 把原始词列表转换成词ID,未知词标记为-1
dataset["bow_ids"] = dataset["bow"].progress_apply(lambda x: dictionary.doc2idx(x, unknown_word_index=-1))
# 移除未知词的ID,只保留有效索引
dataset["bow_ids"] = dataset["bow_ids"].progress_apply(lambda x: [id for id in x if id != -1])
# 过滤掉空的词序列(避免后续训练报错)
dataset = dataset[dataset["bow_ids"].apply(len) > 0].reset_index(drop=True)

如果原train_model函数是基于词列表处理的,也可以直接替换bow列:

# 直接生成只保留有效词的bow列
dataset["bow"] = dataset["bow"].progress_apply(lambda x: [word for word in x if word in dictionary.token2id])
dataset = dataset[dataset["bow"].apply(len) > 0].reset_index(drop=True)

2. 验证词表和数据的一致性

在调用train_model之前,先做几个检查,确保数据和词表匹配:

# 打印词表大小和最大的词ID(应该等于词表大小-1)
print(f"词表大小: {len(dictionary)}")
print(f"最大词ID: {max(dictionary.token2id.values())}")

# 随机抽查样本,确认所有词都在词表里
sample_words = dataset["bow"].iloc[0]
missing_words = [word for word in sample_words if word not in dictionary.token2id]
if missing_words:
    print(f"发现不在词表里的词: {missing_words}")
else:
    print("样本所有词都在词表里")

如果最大词ID不等于len(dictionary)-1,可以再调用一次dictionary.compactify()来重新整理ID序列,确保ID从0开始连续排列。

3. 检查train_model的参数传递

确认你传入的dictionary.token2id是过滤后的词表映射,而不是原始的未过滤版本。另外,如果你修改了dataset的列名,要确保train_model函数能正确识别数据列(比如原函数可能默认读取bow列作为文本序列,time列作为时间标记)。

按照上面的步骤处理后,应该就能解决这个索引越界的问题了。如果还是报错,可以再检查训练循环里的target/context生成逻辑,不过大概率是词表和数据不匹配的问题。

备注:内容来源于stack exchange,提问作者ryang6476

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:42:58