神经网络检测“垃圾邮件”?

人工智能 神经网络 前馈神经网络
2021-10-20 06:04:07

我在我工作的公司继承了一个神经网络项目。开发的人给了我一些非常基本的培训,让我能够起床和跑步。我已经维护了一段时间。当前的神经网络能够对电信公司的消息进行分类:它可以将它们发送给不同领域的人们,如“激活”、“无信号”、“互联网”等。网络一直在完美地工作。这个神经网络的结构如下:

 model = Sequential()
 model.add(Dense(500, input_shape=(len(train_x[0]),)))
 model.add(Activation('relu'))
 model.add(Dropout(0.6))
 model.add(Dense(250, input_shape=(500,)))
 model.add(Activation('relu'))
 model.add(Dropout(0.5))
 model.add(Dense(len(train_y[0])))
 model.add(Activation('softmax'))
 model.compile(loss='categorical_crossentropy',
                  optimizer='Adamax',
                  metrics=['accuracy'])

这使用 Word2Vec 嵌入,并使用“干净”文件进行训练:所有特殊字符和数字都从训练文件和输入数据中删除。

现在,我被指派创建一个神经网络来检测一条消息是否会被归类为“审核”(意味着它是侮辱、垃圾邮件,或者只是评论 Facebook 帖子的人)或“操作”,这意味着消息是实际上是公司的问题。

我所做的是从当前模型开始,将类别数量减少到两个。它并不顺利:词嵌入是来自阿根廷的西班牙语,而训练数据是来自秘鲁的西班牙语。我做了一个新的嵌入和准确度提高了一个公平的幅度(我们正在寻找侮辱和其他诅咒词。在西班牙语中,来自一个国家的诅咒词可能是另一个国家的正常词:在西班牙,“coger”的意思是“采取”,在阿根廷,它的意思是“to f__k”。“concha”在大多数国家都是贝壳的意思,但在阿根廷,它的意思是“c__t”。你明白了)。

我用 300.000 条消息训练了网络。其中大约 40% 被归类为“适度”。我尝试了各种周期和时代的组合。准确率慢慢提高到接近 0.9,损失保持在 0.5000 左右。

但是在测试神经网络时,“有效”消息通常似乎被正确分类,准确度在 0.9 左右,但“缓和”消息却没有。它们被分类为大约 0.6 或更低。在某些时候,我在一条消息中尝试了多次侮辱(甚至将示例数据粘贴为输入数据),但它似乎没有改善。

Word2Vec 的效果非常好。这些词正确地“集中”在一起(多亏了它,在秘鲁西班牙语中学会了一些侮辱)。

我将神经网络投入生产一周,以收集统计数据。基本上 90% 的消息未分类,5% 被正确分类,5% 错误。由于网络有两个类别,这似乎意味着神经网络只是给出随机猜测。

所以,问题是:

  • 是否有可能用神经网络完成这项任务?
  • 这个神经网络的结构是否适合这项任务?
  • 30 万条消息是否足以训练神经网络?
  • 我是否需要从大写字母、特殊字符、数字等中清除数据?
2个回答

项目总结

项目目标似乎是一个共同的目标:以有效的方式路由通信以维持良好但低成本的客户和公共关系。提到了该项目的一些特点。

  • 神经网络项目
  • 从前任那里收到了一些设计和项目历史
  • 为电信公司分类消息
  • 将结果发送给适当地区的支持小组
  • 使用 2 个 relu 层,以 softmax 结尾
  • Word2Vec 嵌入
  • 用干净的语言文件训练
  • 删除所有特殊字符和数字

指出了当前发展的要求。目前的工作是开发一个人工网络,将传入的消息准确可靠地归入两个类别之一。

  • 有节制——侮辱性、故意欺诈(垃圾邮件)、琐碎的例行公事
  • Operative——需要内部人员关注的相关问题

研究和开发正沿着合理的路线开始。

  • 训练有 300,000 条消息
  • 使用 Word2Vec
  • 40% 归类为适度
  • 置换周期和时期
  • 准确率达到 90%
  • 损失保持在 0.5 附近
  • 在测试中,操作精度 0.9,调节精度最大 0.6

第一个障碍和可行性

遇到的第一个障碍是,在使用生产环境数据的 QA 中,90% 的消息未分类,5% 的分类准确,其余 5% 的分类不准确。

正确的是,5% 的准确率和 5% 的不准确率的均分表明学习的信息还不能使用真实的生产环境消息转移到质量保证测试阶段。在信息论用语中,没有任何可用信息被传输,熵在第一个实验中保持不变。

在现有商业环境中首次使用 AI 时,这种失望并不少见,因此这一初步结果不应被视为该想法行不通的迹象。这种方法可能会奏效,尤其是粗俗的语言,它不依赖于文化参考、类比或其他语义复杂性。

识别仅用于审计目的的通知,来自社交网络帐户或购买确认,可以通过规则进行处理。理论上,规则创建和维护也可以自动化,并且存在一些可以做到这一点的专有系统。这种自动化可以使用适当的训练数据来学习,但通常采用实时反馈,并且这些系统通常是基于模型的。这是进一步研发道路的一个选择。

该项目的范围可能太小,但这也不足为奇。大多数项目都受到早期过度乐观的影响。Redford 的The Melagro Beanfield War的相关引述阐明了乐观主义的实际目的。

        幻影

我不知道你的朋友是否知道他的目的。

        苋菜

如果他们知道自己在做什么,没有人会做任何事情。

初步评论

没有必要将消息类别的数量减少到两个,但通过提炼方法和最简单的案例进行高级设计开始研发并没有错。

如果对激活函数使用二进制阈值而不是 softmax,则最后一层的训练效率可能更高,因为当只有两个类别时,只需要一位输出。这也迫使网络训练目标成为一个类别的最终选择,这可能有利于研发进度的整体速度。

可能有一些方法可以通过在代码中添加更多指标来改善结果,而不仅仅是“准确性”。其他每天处理此类细节的人可能在这方面拥有更多的领域特定知识。

文化和模式检测

侮辱和诅咒是完全不同的东西。粗俗语言是一种语言符号或短语,适合广播或出版禁令类别。禁止规则在大多数语言中都已经确立,并且可以与每个符号或短语的排列一起保存在配置文件中。sh*t的情况下,相关形式包括sh*ttysh*thead等。

区分粗话的子集也很有用。

  • 诅咒(表示希望灾难降临接受者)
  • 咒骂(一些人认为是亵渎神明)
  • 被出版商和广播公司视为犯规的感叹词
  • 父母不希望他们的孩子听到的附加项目
  • 像废话一样的边缘情况

粗言秽语一词是其中的一个超集。

分布对齐

学习算法和理论基于训练和使用之间特征分布的概率对齐。训练数据的分布必须与后来使用经过训练的 AI 组件时发现的分布非常相似。如果不是这样,学习过程对由增益或损失函数定义的某些最佳行为的收敛可能会成功,但该行为在业务或行业中的执行可能会失败。

国际化

多语言人工智能通常应该完全国际化。训练和使用两种不同方言的训练几乎总是表现不佳。这带来了数据采集挑战。

如上所述,分类和学习依赖于训练中使用的数据和依赖于所学知识的使用的数据处理之间的统计分布的对齐。人类学习也是如此,因此这一要求不太可能很快被克服。

所有这些形式的粗俗语言都必须在这些文化维度上灵活编程。

  • 字符集
  • 整理顺序
  • 方言
  • 其他与语言环境相关的决定因素
  • 教育程度
  • 经济阶层

一旦其中一个包含在模型中(这将是必不可少的),那么就没有理由不能以很小的成本包含其他的,因此从标准的灵活性维度开始是明智的。替代方案可能会导致表示特定规则的分支复杂性代价高昂,而通过预先推广以供国际使用,可以使这些规则更易于维护。

侮辱识别

侮辱需要超越当前技术状态的理解。认知科学可能会在未来改变这一点,但预测只是猜测。

使用带有模糊逻辑比较器的正则表达式引擎是可以实现的,并且可以安抚项目的利益相关者,但此时识别侮辱可能是不可行的,应该与利益相关者一起设定期望以避免以后出现意外。考虑这些例子。

  • 你脸上的鼻子看起来像骆驼。
  • 亲吻我的小白最黑暗的部分。(来自阿凡达剧本)

这些单词组合不太可能出现在您可以用于训练的某些数据集中,因此 Word2Vec 在这些类型的情况下无济于事。附加层可能有助于正确处理侮辱的至少一些语义和指称复杂性,但只是一些。

明确问题的明确答案

是否有可能用神经网络完成这项任务?

是的,结合卓越的更高层次的系统设计和国际化的最佳实践。

这个神经网络的结构是否适合这项任务?

最初的实验看起来像是一个合理的开始,朝着后来足够正确的方向发展。不要气馁,但不要指望这样的事情的第一次通过看起来很像一年后通过用户验收测试的事情。专家们无法降低研发进度的速度,除非他们从以前的工作中破解和拼凑一些东西。

30 万条消息是否足以训练神经网络?

可能不是。事实上,3 亿条消息无法捕捉到文化参考、类比、口语、方言变化、文字游戏以及垃圾邮件发送者为避免被发现而玩的游戏的所有组合。

真正有用的是一种反馈机制,以便生产成果推动培训,而不是必然有限的数据集。罐装数据集通常受限于其对社会现象的概率表示的准确性。没有人可能会推断方言和其他语言环境特征来更好地检测侮辱。巴黎人的侮辱可能与克里奥尔人的侮辱没有任何共同之处。

反馈机制必须以某种方式基于印象,才能变得准确并保持准确。印象必须用所有易于收集并且可能与印象相关的区域设置数据进行标记。

这意味着在系统架构中适当的地方使用规则获取、模糊逻辑控制、强化学习或朴素贝叶斯方法的应用。

我是否需要从大写字母、特殊字符、数字等中清除数据?

数字可能是相关的。由于历史事件和宗教文本,13 和 666 可能分别表示有冒犯性。人们还可以使用数字和标点符号来传达单词内容。以下是一些抗垃圾邮件检测的点击诱饵示例。

  • 我有一个 6ex 机会 4u。
  • 想要69?
  • 价值上涨了50%!我们有 9 种投资选择 4 种供您选择。

术语特殊字符的含义含糊不清。UTF-8 中的任何字符对于当今几乎所有的 Internet 通信都是合法的。HTML5 提供了以 & 符号开头并以分号结尾的其他实体。(见https://dev.w3.org/html5/html-author/charref。)

过滤掉这些是一个错误。垃圾邮件发送者利用这些标准来渗透垃圾邮件检测。在此示例中,可以利用大写 ell (L) 和英镑符号的笔画相似性来产生抗垃圾邮件检测的点击诱饵。

  • 你喜欢热蛋吗?

删除符合 UTF-8 和 HTML 实体的 Internet 标准的特殊字符可能会导致灾难。建议不要沿用前任设计的那部分。

关于表情符号和其他表意文字,这些是可以在文本中表示对语音的音量、音高或音调调制进行编码的语言元素,或者它们可以表示面部或肢体语言。在许多语言中,表意文字被用来代替单词。对于与博客圈并行运行的全球系统,表情符号是语言表达的一部分。

因此,它们与词根、前缀、后缀、变位或词对作为语言元素并没有显着不同,它们也可以表达情感以及逻辑推理。为了让学习算法在存在表意文字的情况下学习分类行为,表意文字必须保留在训练特征中,然后使用训练结果实时处理这些特征。

附加信息

这篇现有文章中介绍了一些附加信息:使用循环神经网络进行垃圾邮件检测

由于垃圾邮件检测与欺诈检测密切相关,欺诈行为的垃圾邮件发送者与他们的收件人已经存在关系,这个现有的帖子可能也有帮助:我们可以为欺诈检测等分类问题实施 GAN(生成对抗神经网络)吗?

另一个可能有帮助的资源是:https ://www.tensorflow.org/tutorials/representation/word2vec

首先你的问题:

是的,可以使用神经网络来完成此操作,这实际上与您当前的工作模型非常相似(想法相同,只是类别不同)。所以,没有真正的理由开始改变架构,特别是如果据我了解,你不是深度学习专家。我的意思是,我确信您可以通过模型来改进它,但这不是您当前关心的问题。现在,您的模型似乎没有正确训练。

我确实认为 300k 消息至少对于一个体面的模型应该足够了(比随机选择好得多)。

您应该对输入文本执行一些标准的预处理步骤(如果您还没有),通常您应该规范化(转换为小写)并从文本中去除噪音(如特殊字符)。您可以在以下链接中阅读有关不同方法的更多信息: Python 中的文本预处理:步骤、工具和示例

建议和问题:

根据您最初的解释,您的新模型有 2 个输出(调节和操作),但是后来您提到 90% 的输入没有分类。那么您是否有第三类(无分类)或者您只是使用某个概率阈值,只有在它之上按摩才被分类?因为如果你只有 2 个类,我建议使用二元交叉熵损失而不是分类。

我强烈怀疑您的训练数据集或过程有问题。请提供有关数据集的更多信息(每个类的样本数量,如何标记)和您的训练过程(您是否使用部分数据进行验证?多少个时期?等)。