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

SentenceRecognitionModel运行报KeyError:2,寻求技术协助

问题解决方案

1. 修复KeyError:2问题

  • 该错误说明start_index=2不在label2int字典的键集合中,先检查label2int的所有键,确保需要编码的标签都在映射范围内。
  • 你当前的列表推导逻辑完全错误:[label2int[start_index] for generated_text in input_sentence]是重复取同一个start_index对应的值,且完全没用到input_sentence里的内容。正确逻辑要根据任务调整:
    • 如果input_sentence是标签序列,改成[label2int[label] for label in input_sentence];
    • 如果是原始文本要转成字符/词索引,应该用字符/词到索引的映射(比如char2int/word2int),而非label2int。

2. 解决训练文本为空问题

  • 检查训练数据加载代码,确认文件路径、编码格式、数据分割逻辑是否正确,避免误过滤或读取失败导致样本为空。
  • 添加数据校验:加载完成后立即打印len(train_data),若结果为0,回溯数据加载全流程,排查文件是否存在、数据格式是否匹配预期。

3. 修复模型forward未调用LSTM的问题

  • 在SentenceRecognitionModel的forward方法中明确调用LSTM层,并将输出传递给后续层,示例修正如下:
import torch.nn as nn

class SentenceRecognitionModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super().__init__()
        self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, num_classes)
    
    def forward(self, x):
        # 调用LSTM获取输出
        lstm_out, _ = self.lstm(x)
        # 根据任务需求取最后一个时间步输出或全局池化
        output = self.fc(lstm_out[:, -1, :])
        return output

4. 编码逻辑整体修正建议

  • 严格区分输入文本编码和标签编码:输入文本用char2int/word2int,标签用label2int,禁止混用映射字典。
  • 编码前做数据清洗:移除空文本、无效标签,避免编码时出现未定义的键。
  • 编码时添加容错机制,比如用get方法规避KeyError:[label2int.get(label, unknown_index) for label in input_sentence],其中unknown_index是你预设的未知标签索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:55:18