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

PyTorch运行LSTM槽位标注任务报IndexError: index out of range in self求解

问题根因定位与修复方案

1. 直接报错原因:词嵌入索引越界

从给出的运行信息可以直接定位触发报错的核心原因:

  • 模型的词嵌入层为 Embedding(1148, 560),即词汇表总大小为1148,合法的索引取值范围是 0~1147
  • 输入的inputs张量中存在大量1150的数值,已经超出嵌入层的合法索引范围,因此触发IndexError

异常索引来源排查

该问题通常是序列填充逻辑导致的:你在做句子长度统一填充时,用的<PAD>填充标记没有加入到vocab2sent词表中,或是填充用的索引值设置超出了词表的大小范围。

修复方案

  • 将填充标记<PAD>加入vocab2sent词表,确保它的编号小于1148
  • 若存在未登录词(OOV)的场景,同时预留OOV标记的词表位置,所有不在词表中的词统一映射到OOV的合法索引,不要直接使用超出词表范围的编号
  • 若不需要调整词表,初始化模型时将词表大小参数改为len(vocab2sent) + 特殊标记数量,例如仅用到PAD和OOV两个特殊标记就加2

2. 代码隐藏逻辑错误

解决索引越界问题后还会触发损失计算报错,需要同步修改:
原损失计算代码写错了入参:

loss = loss_function(sentence_in, targets)

nn.NLLLoss的第一个入参要求传入模型输出的预测结果tag_scores,不是输入句子张量sentence_in,修改为如下即可:

loss = loss_function(tag_scores, targets)

3. 可选优化建议

你测试推理阶段存在两处数据处理逻辑不一致的问题:第一次推理直接用torch.tensor(training_data[0][0])转张量,第二次推理用了prepare_sequence工具函数,建议统一前后处理逻辑,避免出现索引不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:36:01