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
相关产品推荐
相关产品推荐

