如何打开评论而不被垃圾邮件淹没

如何打开评论而不被垃圾邮件淹没

当你的工作是创造美丽的东西时,你不必谈论太多,因为结果就在每个人的眼前。 但如果你擦掉栅栏上的铭文,只要栅栏看起来不错,或者直到你擦掉错误的地方,就没有人会注意到你的工作。

任何可以发表评论、评论、发送消息或上传图片的服务迟早都会面临垃圾邮件、欺诈和淫秽的问题。 这是无法避免的,但必须应对。

我叫 Mikhail,在反垃圾邮件团队工作,该团队致力于保护 Yandex 服务的用户免受此类问题的困扰。 我们的工作很少受到关注(这是一件好事!),所以今天我将向您介绍更多相关信息。 您将了解到什么时候节制是无用的,以及为什么准确性不是其有效性的唯一指标。 我们还将使用猫和狗的例子来讨论脏话,以及为什么“像脏话者一样思考”有时很有用。

Yandex 中出现了越来越多的服务,用户可以在其中发布内容。 您可以在 Yandex.Q 中提出问题或撰写答案,在 Yandex.District 中讨论船厂新闻,在 Yandex.Maps 上的对话中分享交通状况。 但当该服务的受众增长时,它就会对诈骗者和垃圾邮件发送者产生吸引力。 他们过来填写评论:他们提供轻松赚钱、宣传神奇疗法并承诺社会福利。 由于垃圾邮件发送者的存在,一些用户损失了金钱,而另一些用户则失去了花时间在充斥着垃圾邮件的杂乱服务上的欲望。

这并不是唯一的问题。 我们不仅努力保护用户免受诈骗,而且还努力营造舒适的沟通氛围。 如果人们在评论中遇到咒骂和侮辱,他们很可能会离开,再也不会回来。 这意味着您还需要能够处理这个问题。

清洁网络

正如我们经常遇到的情况一样,第一个发展诞生于搜索,即打击搜索结果中的垃圾邮件的部分。 大约十年前,出现了针对家庭搜索和不需要 18 岁以上类别答案的查询过滤成人内容的任务。 这就是第一部手动输入的色情和脏话词典的出现方式,并由分析师进行补充。 主要任务是将请求分为可以接受显示成人内容的请求和不可以接受的请求。 对于此任务,收集了标记、构建了启发式方法并训练了模型。 这就是过滤不需要内容的第一个进展的出现。

随着时间的推移,UGC(用户生成的内容)开始出现在 Yandex 中 - 由用户自己编写的消息,Yandex 只发布。 由于上述原因,许多消息无法在不查看的情况下发布 - 需要审核。 然后,他们决定创建一项服务,为所有 Yandex UGC 产品提供针对垃圾邮件和攻击者的保护,并利用开发来过滤搜索中不需要的内容。 该服务被称为“清洁网络”。

新任务和推动者的帮助

起初,只有简单的自动化对我们有用:服务向我们发送文本,我们在它们上运行淫秽词典、色情词典和正则表达式 - 分析师手动编译所有内容。 但随着时间的推移,该服务被越来越多的 Yandex 产品使用,我们必须学会解决新问题。

通常,用户不是发表评论,而是发布一组毫无意义的信件,试图提高自己的成就,有时他们在竞争对手公司的评论中为自己的公司做广告,有时他们只是简单地混淆组织并在有关宠物店的评论中写道:“鱼煮得很完美!” 也许有一天人工智能会学会完美地掌握任何文本的含义,但现在自动化有时比人类处理得更糟糕。

很明显,如果没有手动标记,我们就无法做到这一点,因此我们在电路中添加了第二级 - 将其发送给人员进行手动检查。 那些分类器没有发现任何问题的已发表文本都包含在那里。 这样的任务规模可想而知,所以我们不仅依靠评估人员,还利用了“群众的智慧”,即向托洛克人寻求帮助。 他们帮助我们识别机器错过了什么,从而教导它。

智能缓存和 LSH 哈希

我们在处理评论时遇到的另一个问题是垃圾邮件,或更准确地说,是垃圾邮件的数量和传播速度。 当 Yandex.Region 受众开始快速增长时,垃圾邮件发送者就来到了那里。 他们学会了通过稍微改变文本来绕过正则表达式。 当然,垃圾邮件仍然会被发现并删除,但在 Yandex 的规模上,一条不可接受的消息即使发布 5 分钟也可能被数百人看到。

如何打开评论而不被垃圾邮件淹没

当然这不适合我们,我们基于LSH做了智能文本缓存(局部敏感哈希)。 它的工作原理如下:我们对文本进行规范化,删除其中的链接并将其切成 n 元语法(n 个字母的序列)。 接下来,计算 n 元语法的哈希值,并根据它们构建文档的 LSH 向量。 关键是,相似的文本,即使稍微改变一下,也会变成相似的向量。

该解决方案使得重用分类器和分类器对相似文本的判决成为可能。 在垃圾邮件攻击期间,一旦第一条邮件通过扫描并以“垃圾邮件”判决进入缓存,所有新的类似邮件(甚至修改过的邮件)都会收到相同的判决并被自动删除。 后来,我们学习了如何训练和自动重新训练垃圾邮件分类器,但这个“智能缓存”一直伴随着我们,并且仍然经常帮助我们。

良好的文本分类器

没有时间停下来对抗垃圾邮件,我们意识到 95% 的内容都是手动审核的:分类器仅对违规行为做出反应,而且大多数文本都是好的。 我们雇用的清洁工在 95 名清洁工中,有 100 名给出了“一切正常”的评价。 我必须做一项不寻常的工作 - 制作优质内容的分类器,幸运的是这段时间积累了足够的标记。

第一个分类器看起来像这样:我们对文本进行词形还原(将单词还原为其初始形式),扔掉所有辅助词性并使用预先准备好的“好引理词典”。 如果文本中的所有词都是“好”,那么整个文本不包含任何违规行为。 在不同的服务上,这种方法立即实现了 25% 到 35% 的手动标记自动化。 当然,这种方法并不理想:很容易将几个无辜的单词组合在一起并得到非常令人反感的语句,但它使我们能够快速达到良好的自动化水平,并给我们时间来训练更复杂的模型。

优秀文本分类器的下一个版本已经包括线性模型、决策树及其组合。 例如,为了标记粗鲁和侮辱,我们尝试使用 BERT 神经网络。 掌握上下文中单词的含义以及不同句子中单词之间的联系非常重要,BERT 在这方面做得很好。 (顺便说一句,最近新闻的同事 告诉,如何将技术用于非标准任务 - 查找标头中的错误。)因此,可以实现高达 90% 的流程自动化,具体取决于服务。

准确性、完整性和速度

为了进行开发,您需要了解某些自动分类器带来的好处、它们的变化以及手动检查的质量是否下降。 为此,我们使用精确度和召回率指标。

准确率是指所有不良内容判断中正确判断的比例。 准确率越高,误报越少。 如果你不注重准确性,那么理论上你可以删除所有垃圾邮件和淫秽信息,以及一半的好消息。 另一方面,如果你只依赖准确性,那么最好的技术将是根本抓不到任何人的技术。 因此,还有一个完整性指标:已识别的不良内容占不良内容总量的比例。 这两个指标相互平衡。

为了进行测量,我们对每项服务的整个传入流进行采样,并向评估人员提供内容样本,以供专家评估并与机器解决方案进行比较。

但还有另一个重要指标。

我在上面写过,一条不可接受的消息即使在5分钟内也可能被数百人看到。 因此,我们会计算在隐藏不良内容之前向人们展示了多少次。 这很重要,因为仅仅高效工作是不够的 - 您还需要快速工作。 当我们建立起针对脏话的防御措施时,我们充分感受到了这一点。

以猫和狗为例的反物质主义

一个小小的抒情题外话。 有些人可能会说,淫秽和侮辱不像恶意链接那么危险,也不像垃圾邮件那么烦人。 但我们努力为数百万用户维持舒适的沟通条件,人们不喜欢回到他们受到侮辱的地方。 许多社区(包括哈布雷社区)的规则中都明确禁止咒骂和侮辱,这并非没有道理。 但我们离题了。

脏话词典无法应对俄语的所有丰富性。 尽管只有四个主要的脏话词根,但您可以用它们组成无数的单词,而这些单词是任何常规引擎无法捕获的。 此外,还可以音译写出单词的一部分、用相似的组合替换字母、重新排列字母、添加星号等。有时,在没有上下文的情况下,基本上无法确定用户指的是脏话。 我们尊重哈布尔的规则,因此我们不会用活生生的例子来证明这一点,而是用猫和狗来证明这一点。

如何打开评论而不被垃圾邮件淹没

“法律,”猫说。 但我们知道猫说的是不同的词......

我们开始考虑字典的“模糊匹配”算法以及更智能的预处理:我们提供音译、将空格和标点符号粘合在一起、寻找模式并在其上编写单独的正则表达式。 这种方法带来了结果,但通常会降低准确性,并且无法提供所需的完整性。

然后我们决定“像脏话者一样思考”。 我们开始自己向数据中引入噪音:重新排列字母、生成拼写错误、用相似的拼写替换字母等等。 最初的标记是通过将 mat 字典应用于大型文本语料库来实现的。 如果你用一个句子并以多种方式扭曲它,你最终会得到很多句子。 这样就可以将训练样本增加数十倍。 剩下的就是在生成的池上训练一些或多或少考虑上下文的​​智能模型。

如何打开评论而不被垃圾邮件淹没

现在谈论最终决定还为时过早。 我们仍在尝试解决这个问题的方法,但我们已经可以看到,一个简单的多层符号卷积网络明显优于字典和常规引擎:可以提高准确性和召回率。

当然,我们知道,即使是最先进的自动化,也总有办法绕过,尤其是当事情如此危险时:以愚蠢的机器无法理解的方式编写。 在这里,就像打击垃圾邮件一样,我们的目标不是消除编写淫秽内容的可能性;我们的任务是确保游戏得不偿失。

提供分享观点、沟通和评论的机会并不困难。 实现安全、舒适的条件和对人的尊重要困难得多。 如果没有这一点,任何社区都不会发展。

来源: habr.com

添加评论