假设您可以访问一个电子邮件帐户,其中包含过去几年收到的电子邮件的历史记录(~10k封电子邮件),分为2组
真正的邮箱
垃圾邮件
您将如何处理创建可用于垃圾邮件检测的神经网络解决方案的任务 - 基本上将任何电子邮件分类为垃圾邮件或非垃圾邮件?
我们假设电子邮件提取已经到位,我们只需要关注分类部分.
我希望得到回答的要点是:
选择哪个参数作为NN的输入,为什么?
NN的哪种结构最有可能最适合这样的任务?
此外,任何资源建议或现有实现(最好是在C#中)都非常受欢迎
谢谢
编辑
我开始使用神经网络,因为该项目的主要方面是测试NN方法如何用于垃圾邮件检测
此外,仅仅是探索神经网络和垃圾邮件的主题是一个"玩具问题"
Osama Al-Maa.. 24
如果你坚持使用NN ......我会为每封电子邮件计算一些功能
基于角色,基于单词和词汇的功能(我估计这些约为97):
字符总数(C)
alpha字母总数/ C字母字符比率
总数没有数字字符/ C.
空白字符总数/ C
每个字母/ C的频率(键盘的36个字母 - AZ,0-9)
特殊字符的频率(10个字符:*,_,+,=,%,$,@,\,/)
总字数(M)
短字总数/ M两个字母或更少
单词/ C中的字符总数
平均字长
平均.字句长度
平均.句子长度用词
单词长度频率.分布/ M长度为n的单词的比率,n在1和15之间
类型令牌比率.唯一字数/ M
Hapax Legomena Freq.曾经发生过的话
Hapax Dislegomena Freq.两次出现的单词
尤尔的K量度
辛普森的D测量
Sichel的S测量
布鲁内特的W措施
Honore的R测量
标点符号的频率18个标点符号:.,; ?!:() - "«»<> [] {}
您还可以根据格式添加更多功能:颜色,字体,大小......使用.
大多数这些措施可以在网上,论文中,甚至维基百科上找到(它们都是简单的计算,可能基于其他功能).
因此,使用大约100个功能,您需要100个输入,隐藏层中的一些节点数和一个输出节点.
输入需要根据您当前预先分类的语料库进行标准化.
我将它分成两组,一组作为训练组,另一组作为测试组,从不混合它们.也许是50/50比率的列车/测试组具有相似的垃圾邮件/非垃圾邮件比率.
如果你坚持使用NN ......我会为每封电子邮件计算一些功能
基于角色,基于单词和词汇的功能(我估计这些约为97):
字符总数(C)
alpha字母总数/ C字母字符比率
总数没有数字字符/ C.
空白字符总数/ C
每个字母/ C的频率(键盘的36个字母 - AZ,0-9)
特殊字符的频率(10个字符:*,_,+,=,%,$,@,\,/)
总字数(M)
短字总数/ M两个字母或更少
单词/ C中的字符总数
平均字长
平均.字句长度
平均.句子长度用词
单词长度频率.分布/ M长度为n的单词的比率,n在1和15之间
类型令牌比率.唯一字数/ M
Hapax Legomena Freq.曾经发生过的话
Hapax Dislegomena Freq.两次出现的单词
尤尔的K量度
辛普森的D测量
Sichel的S测量
布鲁内特的W措施
Honore的R测量
标点符号的频率18个标点符号:.,; ?!:() - "«»<> [] {}
您还可以根据格式添加更多功能:颜色,字体,大小......使用.
大多数这些措施可以在网上,论文中,甚至维基百科上找到(它们都是简单的计算,可能基于其他功能).
因此,使用大约100个功能,您需要100个输入,隐藏层中的一些节点数和一个输出节点.
输入需要根据您当前预先分类的语料库进行标准化.
我将它分成两组,一组作为训练组,另一组作为测试组,从不混合它们.也许是50/50比率的列车/测试组具有相似的垃圾邮件/非垃圾邮件比率.
您是否开始使用神经网络?听起来你使用贝叶斯分类很好,这在Paul Graham的几篇文章中有很好的概述:
垃圾邮件计划
更好的贝叶斯过滤
您可以访问的分类历史记录将使用非常强大的语料库来提供贝叶斯算法,您最终可能会获得非常有效的结果.