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

垃圾邮件分类测试异常:输入均被判定为垃圾邮件的解决办法

解决垃圾邮件分类全识别为垃圾邮件的问题

核心代码错误修正

你的测试代码存在几个关键问题,直接导致无论输入什么都被判定为垃圾邮件:

  1. 未正确处理用户输入
    当前测试代码完全没用到输入的user_input,反而直接复用了测试集的X_test_padded,相当于每次都在对整个测试集做预测,而非用户输入的内容。必须将用户输入经过和训练数据一致的预处理流程:

    # 替换原有测试代码
    user_input = input("请输入邮件内容: ")
    # 按训练时的流程处理输入:分词编码、填充
    user_encoded = tokenizer.texts_to_sequences([user_input])
    user_padded = pad_sequences(user_encoded, maxlen=max_len)
    
  2. 预测结果判断逻辑错误
    使用.all() > 0.5会检查所有预测结果是否都大于0.5,而用户输入是单个样本,应该针对单个预测值做判断:

    # 修正判断逻辑
    prediction = model.predict(user_padded)[0][0]
    if prediction > 0.5:
        print(f"[{user_input}] is spam")
    else:
        print(f"[{user_input}] is non-spam")
    

    注:model.predict返回二维数组,单个样本需通过[0][0]提取对应概率值。

  3. 移除冗余代码
    user_data = [[]]属于无用变量,直接删除即可。

其他排查方向

如果修正后问题仍存在,需检查以下内容:

  • 训练数据平衡性:若训练集中垃圾邮件占比过高,模型会偏向预测垃圾邮件。检查y_train中正负样本比例,必要时采用过采样/欠采样,或调整损失函数权重。
  • 模型训练效果:查看训练时的val_acc和测试集准确率,若准确率极低,说明模型未学到有效特征。可尝试增加训练轮数、调整模型结构(如换成LSTM、提升Embedding维度)、优化文本预处理流程(如更细致的文本清洗)。
  • Tokenizer一致性:确保测试时使用的tokenizer与训练时完全相同(比如训练后保存tokenizer,测试时加载),否则编码规则不一致会导致输入特征无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:40