目前,全球每天发送的3000亿封邮件中,至少有一半是垃圾邮件。自然,邮件服务商的首要任务就是过滤掉这些垃圾邮件,以保证用户能够快速找到具有实际价值的重要邮件。但是垃圾邮件检测本身就相当复杂。首先,垃圾邮件和非垃圾邮件之间的界限非常模糊,而且标准往往会随着时间而改变。截至目前,各家电子邮件服务商普遍采用自动化垃圾邮件检测方式,机器学习成为最有效、最受欢迎的核心选项。虽然我们仍然会在较小程度上看到垃圾邮件,但由于机器学习算法的强大功能,大多数垃圾邮件已从我们的收件箱中直接清除。那么,机器学习技术如何判断哪些邮件是垃圾邮件,哪些是合法邮件呢?在这篇文章中,我们将讨论它是如何工作的。挑战在于垃圾邮件具有多种不同的风格。有些只是市场调查消息,旨在诱使收件人打开电子邮件或传播虚假信息。但也有一些虚假电子邮件,其目的是引导收件人点击恶意链接或下载恶意软件。但两者的共同点是,与受助人的实际需要无关。垃圾邮件检测算法需要找到可靠的垃圾邮件过滤方法来阻止不必要的内容,同时避免清理用户期望接收和查看的真实电子邮件。此外,算法本身还必须不断适应新的趋势动态——例如新冠疫情引发的人群恐慌、选举新闻,以及加密货币社区的迅速升温。静态规则适合这种需求。例如,一封抄送很多、文本很短且主题全部大写的邮件更有可能是垃圾邮件。此外,某些发件人域可能已被列入垃圾邮件黑名单。但在大多数情况下,垃圾邮件检测主要依赖于对邮件内容的具体分析。朴素贝叶斯机器学习机器学习算法使用统计模型对数据进行分类。在检测垃圾邮件的用例中,经过训练的机器学习模型必须能够根据电子邮件中的单词顺序确定电子邮件可能是垃圾邮件还是非垃圾邮件。不同的机器学习算法都有一定的垃圾邮件检测能力,但最受关注的还是“朴素贝叶斯”算法。顾名思义,朴素贝叶斯算法基于“贝叶斯定理”,它描述了基于先验知识的事件概率。之所以命名为“naive”,是因为它首先假设观察到的特征只独立存在。例如,如果使用朴素贝叶斯机器学习方法来预测是否会下雨,那么只需要湿度和温度等少数特征就可以预测是否会下雨。在检测垃圾邮件时,情况肯定要复杂得多。我们的目标变量是给定的电子邮件是“垃圾邮件”还是“非垃圾邮件”。它的特点是电子邮件正文中包含一个词或词的组合。简而言之,我们要根据文本内容来判断当前邮件是垃圾邮件的可能性。这里需要强调的是,用于检测垃圾邮件的特征不一定相互独立。例如,我们可以将“烤”、“奶酪”和“三明治”这几个词组合起来,它们在邮件语境中的连续存在会表达出完全不同的含义。另一个更明确的例子是“不”和“好玩”,独立分析和依赖分析会得出完全相反的结论。但好消息是,虽然文本数据中的特征独立性通常很复杂,但如果配置得当,朴素贝叶斯分类器对于大多数自然语言处理任务同样有效。数据垃圾邮件检测是一个有监督的机器学习问题。这意味着你需要为机器学习模型提供大量垃圾邮件和好邮件的例子,帮助它找到其中的模式,以准确地区分两者。大多数电子邮件提供商都有自己的已标记电子邮件数据集。例如,每次您在Gmail帐户中将一封电子邮件标记为垃圾邮件时,Google都会使用这些数据来训练自己的机器学习算法。(请注意,谷歌使用比这个例子复杂得多的垃圾邮件检测算法,并且他们有一个完善的机制来防止滥用“报告垃圾邮件”功能。)数据集,例如加州大学欧文分校的垃圾邮件数据库数据集和安然垃圾邮件数据集。但是请注意,这些数据集仅用于教育和测试目的,对于创建生产级机器学习模型的实用价值很小。自托管电子邮件服务器的提供商可以创建专门的数据集并针对特定行业和习语调整机器学习模型。例如,金融服务公司的数据集与建筑公司的数据集内容大不相同。训练机器学习模型尽管近年来自然语言处理技术取得了令人振奋的进步,但人工智能算法本身仍然无法像人类那样流畅地理解语言内容。因此,开发用于垃圾邮件检测的机器学习模型的关键步骤是准备用于统计处理的数据。在训练朴素贝叶斯分类器之前,必须通过特定步骤对垃圾邮件和非垃圾邮件的语料库进行分类。考虑一个包含以下语句的数据集:史蒂夫想为派对买一些烤奶酪三明治莎莉正在烤鸡肉做晚餐我为蛋糕买了奶油奶酪“标记化”,然后添加到机器学习算法中。本质上,标记化是指将文本数据分解成更小的部分。如果按单词拆分上述数据集,您将获得以下词汇表。请注意,每个单词只出现一次。Steve,thinkfor,party,buy,grill,cheese,sandwich,Sally,positive,dinner,barbecue,chicken,me,bought,cream,cake我们可以删除同时出现在垃圾邮件和普通邮件中的词,因为这些词无济于事我们区分电子邮件本身的性质。这些被称为“停用词”,常见的例子包括this、that、is、will等。在上面的数据集中,删除停用词后,我们的词汇量将迅速缩小到5个。我们还可以使用其他技术,例如“词干化”和“词形还原”将词汇转换成更基本的形式。继续我们的示例数据集,“bought”和“buy”具有相同的根,“bake”和“grill”具有相同的根。通过这样做,我们可以进一步简化机器模型。在某些情况下,您还可以考虑使用二元组(双字标记)、三元组(三字标记)或更长的N字标记。例如,使用二元形式对上述数据集进行分词会产生表达式“cheesecake”;三卦形式会产生“烤奶酪三明治”的表达方式。数据处理完成后,您将拥有一个定义机器学习模型特征的术语表。接下来,您需要确定哪些单词或单词序列(如果使用N个单词表示)与垃圾邮件和非垃圾邮件相关联。在训练数据集上训练机器学习模型时,您需要根据不同术语在垃圾邮件和非正常邮件中出现的频率来为其分配权重。例如,如果“中大奖”是其中一个特征,而它只出现在垃圾邮件中,那么任何具有该特征的邮件都可能被归类为垃圾邮件。相反,如果“重要会议”只出现在普通邮件中,那么任何具有此特征的邮件都可能被归类为普通邮件。在处理数据并为特征分配权重后,您的机器学习模型可以过滤垃圾邮件。收到一封新邮件后,其中的文本被标记并根据贝叶斯公式运行。消息文本中的每个术语都乘以其权重,权重之和表示电子邮件是垃圾邮件的可能性。(实际计算过程比较复杂,这里为了简单起见,我们直接对所有权重求和。)使用机器学习技术实现高级垃圾邮件检测听起来很简单,但是朴素贝叶斯机器学习算法很难处理大的一些文本分类任务(包括垃圾邮件检测)取得了良好的效果。但它仍然不完美,这是肯定的。与其他机器学习算法一样,朴素贝叶斯算法无法理解语言的上下文,只能依靠词之间的统计关系来判断一段文本是否属于某一类别。这意味着如果发件人在邮件末尾添加了一些符合正常邮件标准的词,或者将一些符合垃圾邮件特征的术语替换为其他同义词或相关词,那么朴素贝叶斯算法很可能将垃圾邮件错误分类判断为普通邮件。朴素贝叶斯当然不是唯一能够检测垃圾邮件的机器学习算法。其他流行的算法选项包括递归神经网络(RNN)和转换器,它们都可以有效地处理有序数据,例如电子邮件和文本消息。最后一点,垃圾邮件检测一直在发展。随着开发人员使用AI和其他技术来检测和过滤电子邮件中的有害消息,垃圾邮件发送者正在寻找新的方法来欺骗检测系统并将垃圾邮件发送给收件人。这就是电子邮件服务提供商需要不断使用用户数据来改进和更新他们的垃圾邮件检测器的原因。
