【问题标题】:Neural networks for email spam detection用于电子邮件垃圾邮件检测的神经网络
【发布时间】:2010-10-20 16:37:02
【问题描述】:

假设您可以访问一个电子邮件帐户,该帐户将过去几年收到的电子邮件(约 1 万封电子邮件)的历史分为 2 个组

  • 真正的电子邮件
  • 垃圾邮件

您将如何处理创建可用于垃圾邮件检测的神经网络解决方案的任务 - 基本上将任何电子邮件分类为垃圾邮件或非垃圾邮件?

假设电子邮件提取已经到位,我们只需要关注分类部分。

我希望得到回答的要点是:

  1. 选择哪些参数作为 NN 的输入,为什么?
  2. NN 的哪种结构最有可能最适合此类任务?

此外,任何资源建议或现有实现(最好是 C#)都非常受欢迎

谢谢

编辑

  • 我将使用神经网络作为该项目的主要方面是测试 NN 方法如何用于垃圾邮件检测
  • 这也是一个“玩具问题”,只是探索神经网络和垃圾邮件的主题

【问题讨论】:

    标签: machine-learning neural-network classification spam-prevention


    【解决方案1】:

    如果你坚持使用神经网络......我会为每封电子邮件计算一些特征

    基于字符、基于单词和词汇的功能(据我统计,大约有 97 个):

    1. 字符总数 (C)
    2. alpha 字符的总数/alpha 字符的 C 比率
    3. 数字字符总数/C
    4. 空白字符总数/C
    5. 每个字母/C 的频率(键盘的 36 个字母 - A-Z、0-9)
    6. 特殊字符的频率(10 个字符:*、_、+、=、%、$、@、ـ、\、/)
    7. 总字数(M)
    8. 总短字数/M 两个字母以内
    9. 单词/C 中的字符总数
    10. 平均字长
    11. 平均以字符为单位的句子长度
    12. 平均单词的句子长度
    13. 字长频率。 distribution/M 长度为 n,n 介于 1 和 15 之间的单词的比率
    14. Type Token Ratio No. Of unique Words/M
    15. Hapax Legomena 频率。一次出现的单词
    16. Hapax Dislegomena 频率。出现两次的单词
    17. 尤尔的 K 度量
    18. 辛普森的 D 度量
    19. Sichel 的 S 度量
    20. 布鲁内特的 W 测量
    21. Honor 的 R 小节
    22. 标点符号 18 个标点符号的频率:. ; ; ? ! : ( ) – “ « » [ ] { }

    您还可以根据格式添加更多功能:颜色、字体、大小等。

    这些度量中的大多数都可以在网上、论文甚至维基百科中找到(它们都是简单的计算,可能基于其他特征)。

    因此,对于大约 100 个特征,您需要 100 个输入、隐藏层中的一些节点和一个输出节点。

    需要根据您当前的预分类语料库对输入进行归一化。

    我会将它分成两组,一组作为训练组,另一组作为测试组,从不混合使用。也许在具有相似垃圾邮件/非垃圾邮件比率的训练/测试组的比例为 50/50。

    【讨论】:

      【解决方案2】:

      您打算用神经网络来做这件事吗?听起来您已经准备好使用Bayesian classification,这在 Paul Graham 的几篇文章中得到了很好的概述:

      您可以访问的分类历史将成为非常强大的语料库以提供给贝叶斯算法,您最终可能会得到相当有效的结果。

      【讨论】:

      • 谢谢 Chad,是的,我已经准备好用 NN 来做这件事了,这是一个要求,而且真的是要测试 NN 方法是否适用于这种情况。
      【解决方案3】:
      1. 基本上你会遇到一个与设计和训练神经网络类似的范围内的特征提取问题。如果我是你,我将从哪里开始,以多种方式对输入文本进行切片和切块,每一种都是潜在的特征输入,类似于“如果出现‘价格’和‘伟哥’,这个神经元发出 1.0 信号3 个字以内”,并根据与垃圾邮件识别的最佳绝对相关性剔除那些。
      2. 我首先将我最好的 50 到 200 个输入特征神经元连接到单个输出神经元(针对 1.0 = 垃圾邮件,-1.0 = 非垃圾邮件训练的值),即单层感知器。如果效果不佳,我可能会尝试使用多层反向传播网络,但我不会屏息以待取得好结果。

      一般来说,我的经验使我相信神经网络在这项任务中最多只能表现出平庸的表现,如果这不是探索神经网络的玩具问题,我肯定会推荐一些贝叶斯算法,正如 Chad Birch 所建议的那样网。

      【讨论】:

      • 干杯混乱,好点。我也将特征提取视为与 NN 本身具有相似复杂性的问题。是的,这确实是探索神经网络的玩具问题
      【解决方案4】:

      Chad,到目前为止你得到的答案是合理的,但我会回复你的更新:

      我将使用神经网络作为项目的主要方面是测试 NN 方法如何用于垃圾邮件检测。

      那么你有一个问题:像这样的经验测试不能证明不适合。

      您最好了解一下 NN 实际做什么和不做什么,看看为什么它们对于这类分类问题不是一个特别好的主意。考虑它们的一种有用方法可能是作为通用函数逼近器。但如果想了解这一切如何在分类领域结合在一起(这就是垃圾邮件过滤问题),浏览像 pattern classification 这样的介绍文本可能会有所帮助。

      如果您在看到它运行时已经死心塌地,那么只需将任何通用 NN 库用于网络本身即可。无论如何,您的大部分问题将是如何表示输入数据。 “最好的”结构并不明显,它可能并不重要。输入必须是语料库本身的一些(标准化)测量(特征)。有些是显而易见的(“垃圾邮件”词的数量等),有些则不那么明显。这是您真正可以尝试的部分,但由于问题的性质,您应该期望与贝叶斯过滤器(这里有自己的问题)相比做得很差。

      【讨论】:

      • 谢谢西蒙,当我听到这个想法时,我首先想到的是:输入可以使用什么样的参数。您也说得对,这种测试不能真正证明不适合。我可能应该补充一点,这实际上只是一个练习,只是为在 AI 领域非常新的人玩 NN 和垃圾邮件检测问题 - 我将更新我的问题以进一步阐明这一点:)
      猜你喜欢
      • 2016-04-12
      • 2015-03-27
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 2013-08-02
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多