texts_to_matrix训练的新闻分类模型,推理时如何正确做新文本tokenize
推理阶段正确的文本向量化与预测实现
两类异常的产生根源
texts_to_matrix方法强制要求入参为字符串组成的可迭代序列(如列表、numpy数组),不支持直接传入单个字符串。直接传入单字符串时,方法会将字符串逐字符拆分为多个独立的“文本条目”,最终输出形状为(字符串字符长度, num_words),与单文本预期的单条特征向量形状完全不符。- 错误的输入形状导致模型输出结构偏离预期:模型训练时的输入为二维张量
(样本数, 1000),对应输出为(样本数, 类别数);但嵌套错误的三维输入后,模型输出形状变为三维,此时未指定维度的np.argmax会将整个数组拉平为一维计算最大值位置,最终得到的索引远超text_labels的长度范围,触发越界报错。
正确的推理代码实现
推理阶段需严格对齐训练时的向量化逻辑与张量形状,完整可运行的流程如下:
test_text = 'Im super insecure AND unsure of everything' # 将单条待预测文本包裹为列表,传入已完成词表学习的tokenizer test_vec = tokenize.texts_to_matrix([test_text]) print(test_vec.shape) # 输出形状为 (1, 1000),与训练输入维度完全匹配 # 直接传入向量完成预测,无需额外嵌套数组维度 test_pred = model.predict(test_vec) # 沿类别维度计算最大概率对应的索引,匹配标签集合 pred_idx = np.argmax(test_pred, axis=1)[0] predict_result = text_labels[pred_idx]
关键操作规范
- 推理阶段必须直接使用训练阶段已经通过
fit_on_texts完成词表构建的同一个tokenizer实例,严禁重新初始化、重新拟合分词器,否则词表不统一会导致向量化结果完全失效。 - 批量预测多条文本时,直接将所有待预测文本组成列表传入即可,例如
tokenize.texts_to_matrix([text1, text2, text3]),输出形状为(文本条数, 1000),可直接输入模型完成批量推理。 - 提前校验模型输出层维度与标签集合长度一致:如果标签共6类,模型最后一层Dense层的输出单元数必须为6,否则即使输入形状正确也会出现索引越界问题。
内容的提问来源于stack exchange,提问作者GUNTER
相关产品推荐
相关产品推荐

