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

训练的LSTM文本分类模型准确率为0.00,求问题排查建议

解决文本分类模型准确率为0.00的问题

核心问题:数据集未打乱导致训练/测试集类别完全分离

你的标签是前15000条为1(有毒),后15000条为0(无毒),但代码直接按顺序截取前80%作为训练集、后20%作为测试集:

split_index = int(0.8 * len(sequences))
x_train, x_test = sequences[:split_index], sequences[split_index:]
y_train, y_test = labels[:split_index], labels[split_index:]

这会造成训练集全是标签1的样本,测试集全是标签0的样本。模型训练时只学会识别类别1,测试时面对全是类别0的样本只能持续预测1,最终准确率为0.00。

解决方案:打乱数据集顺序

划分训练/测试集前必须将文本与标签对应打乱,保证两类样本在两个集合中都有分布,以下两种方法任选其一:

方法1:使用sklearn的train_test_split

先安装scikit-learn(若未安装),再修改代码:

from sklearn.model_selection import train_test_split

# 打乱数据并按比例划分,stratify保证类别比例与原数据集一致
x_train, x_test, y_train, y_test = train_test_split(sequences, labels, test_size=0.2, random_state=42, stratify=labels)

方法2:手动打乱索引

若不想依赖第三方库,可手动生成打乱索引:

import numpy as np

# 生成随机打乱的索引数组
indices = np.arange(len(sequences))
np.random.shuffle(indices)

# 按打乱后的索引重新排列数据
sequences_shuffled = sequences[indices]
labels_shuffled = labels[indices]

# 再进行数据集划分
split_index = int(0.8 * len(sequences_shuffled))
x_train, x_test = sequences_shuffled[:split_index], sequences_shuffled[split_index:]
y_train, y_test = labels_shuffled[:split_index], labels_shuffled[split_index:]

其他需要排查的点

  • 文本预处理质量:确认clean.py的data()函数完成了必要清洗(如小写转换、特殊字符移除、停用词过滤等),噪声过大的文本会严重干扰模型学习。
  • 序列长度合理性:若max_seq_length过大(如超过500),LSTM可能难以捕捉有效特征,可考虑取序列长度的95分位数作为阈值,避免梯度消失或训练低效。
  • 标签编码验证:检查to_categorical转换后的标签格式是否正确,确保one-hot编码与模型输出的类别对应(比如标签1对应[0,1],标签0对应[1,0])。
  • 模型复杂度调整:可先尝试更简单的模型(如TextCNN、MLP)验证数据有效性,再逐步调整LSTM的单元数、Embedding维度等参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:56:08