每个用户可以创建自己的内容(UGC - 用户生成的内容)的服务不仅要解决业务问题,还要在 UGC 中整理事情。 不良或低质量的内容审核最终会降低服务对用户的吸引力,甚至终止其运营。
今天,我们将向您介绍 Yula 和 Odnoklassniki 之间的协同作用,这有助于我们有效地管理 Yula 中的广告。
一般来说,协同是一件非常有用的事情,在现代世界,当技术和趋势变化非常快时,它可以变成救星。 为什么要浪费稀缺的资源和时间来发明一些已经发明并在你脑海中浮现的东西呢?
当我们面临审核用户内容(图片、文本和链接)的全部任务时,我们也有同样的想法。 我们的用户每天向 Yula 上传数百万条内容,如果没有自动处理,则完全不可能手动调节所有这些数据。
因此,我们使用了一个现成的审核平台,当时我们 Odnoklassniki 的同事已经将其完成到了“近乎完美”的状态。
为什么是奥德诺克拉斯尼基?
每天,数以千万计的用户来到社交网络并发布数十亿条内容:从照片到视频和文本。 Odnoklassniki 审核平台有助于检查大量数据并抵制垃圾邮件发送者和机器人。
OK 审核团队已经积累了大量经验,12 年来一直在改进其工具。 重要的是,他们不仅可以分享现成的解决方案,还可以定制其平台架构以适应我们的特定任务。
从现在起,为了简洁起见,我们将 OK 审核平台简称为“平台”。
一切如何运作
Yula 和 Odnoklassniki 之间的数据交换是通过以下方式建立的
我们为什么选择这个工具:
- 在尤拉,所有广告均经过后期审核,因此最初不需要同步响应。
- 如果出现错误段落并且 Yula 或 Odnoklassniki 不可用(包括由于某些峰值负载),那么来自 Kafka 的数据不会在任何地方消失,并且可以稍后读取。
- 该平台已经与 Kafka 集成,因此大多数安全问题都得到了解决。
对于用户在 Yula 中创建或修改的每个广告,都会生成一个包含数据的 JSON,并将其放置在 Kafka 中以供后续审核。 公告从 Kafka 加载到平台中,并在平台上自动或手动进行裁决。 不良广告会被有理由屏蔽,平台未发现违规的广告将被标记为“良好”。 然后,所有决策都会发送回 Yula 并应用到服务中。
最后,对于 Yula 来说,这一切都归结为简单的操作:向 Odnoklassniki 平台发送广告并返回“好的”解决方案,或者为什么不“好的”。
自动加工
广告到达平台后会发生什么? 每个广告分为几个实体:
- 姓名,
- 描述,
- 相片,
- 用户选择的广告类别和子类别,
- 价格。
然后,平台对每个实体执行聚类以查找重复项。 此外,文本和照片根据不同的方案进行聚类。
在聚类之前,文本会被标准化以删除特殊字符、更改的字母和其他垃圾。 接收到的数据被分成 N 元组,每个元组都经过哈希处理。 结果是许多独特的哈希值。 文本之间的相似度由下式确定
人们已经为照片发明了各种粘合图像的选项,从比较 pHash 图片到使用神经网络搜索重复项。
最后一种方法是最“严厉”的。 为了训练模型,选择了三组图像(N、A、P),其中 N 与 A 不相似,P 与 A 相似(是半重复)。 然后神经网络学会让A和P尽可能接近,让A和N尽可能远。 与简单地从预先训练的网络中获取嵌入相比,这会导致误报更少。
当神经网络接收图像作为输入时,它会为每个图像生成一个 N(128) 维向量,并请求评估图像的邻近度。 接下来,计算一个阈值,在该阈值下,接近的图像被视为重复。
该模型能够巧妙地找到专门从不同角度拍摄同一产品的垃圾邮件发送者,以绕过 pHash 比较。
神经网络将垃圾邮件照片粘合在一起作为重复项的示例。
在最后阶段,通过文本和图像同时搜索重复广告。
如果两个或多个广告在一个集群中粘在一起,系统会启动自动阻止,使用某些算法选择要删除的重复项和要保留的重复项。 例如,如果两个用户在广告中使用相同的照片,系统将阻止较新的广告。
创建后,所有集群都会经过一系列自动过滤器。 每个过滤器都会为集群分配一个分数:它包含该过滤器识别的威胁的可能性有多大。
例如,系统分析广告中的描述并为其选择潜在的类别。 然后,它采用概率最大的类别,并将其与广告作者指定的类别进行比较。 如果它们不匹配,则会因错误的类别而屏蔽广告。 由于我们是善良和诚实的,我们直接告诉用户他需要选择哪个类别才能让广告通过审核。
类别不正确的屏蔽通知。
机器学习在我们的平台上感觉就像在家里一样。 例如,在它的帮助下,我们可以搜索俄罗斯联邦禁止的商品的名称和描述。 神经网络模型会仔细地“检查”这些图像,看看它们是否包含 URL、垃圾短信、电话号码和相同的“禁止”信息。
如果他们试图销售伪装成合法产品的违禁产品,并且标题或描述中没有文字,我们会使用图像标签。 对于每个图像,最多可以添加 11 个不同的标签来描述图像中的内容。
他们试图将水烟伪装成茶炊来销售。
与复杂的过滤器并行,简单的过滤器也可以工作,解决与文本相关的明显问题:
- 反物质;
- URL 和电话号码检测器;
- 提及即时通讯工具和其他联系人;
- 减价;
- 不出售任何东西的广告等
如今,每个广告都要经过 50 多个自动过滤器的细筛,试图找出广告中的不良内容。
如果所有检测器都不起作用,则会向尤拉发送一条响应,表明该广告“很可能”处于完美状态。 我们自己使用这个答案,订阅卖家的用户会收到有关新产品上市的通知。
通知卖家有新产品。
因此,每个广告都充满了元数据,其中一些是在创建广告时生成的(作者的 IP 地址、用户代理、平台、地理位置等),其余的是每个过滤器发出的分数。
公告队列
当广告到达平台时,系统会将其放入其中一个队列中。 每个队列都是使用数学公式创建的,该数学公式以检测任何不良模式的方式组合广告元数据。
例如,您可以在“手机”类别中创建一个由据称来自圣彼得堡的 Yula 用户创建的广告队列,但他们的 IP 地址来自莫斯科或其他城市。
一个用户在不同城市发布的广告示例。
或者,您可以根据神经网络分配给广告的分数形成队列,并按降序排列。
每个队列根据自己的公式为广告分配最终分数。 然后您可以通过不同的方式进行:
- 指定广告将受到某种类型的屏蔽的阈值;
- 将队列中的所有广告发送给版主进行人工审核;
- 或结合前面的选项:指定自动屏蔽阈值并将未达到此阈值的广告发送给版主。
为什么需要这些队列? 假设用户上传了一张枪支照片。 神经网络为其分配 95 到 100 之间的分数,并以 99% 的准确度确定图片中存在武器。 但如果分值低于95%,模型的准确率开始下降(这是神经网络模型的一个特点)。
结果,根据分数模型形成一个队列,并且那些收到的在 95 到 100 之间的广告将被自动屏蔽为“禁止产品”。 分数低于 95 分的广告将发送给审核员进行手动处理。
带墨盒的巧克力贝莱塔。 仅适用于手动审核! 🙂
手动审核
2019 年初,Yula 约 94% 的广告都是自动审核的。
如果平台无法决定某些广告,则会将其发送给手动审核。 Odnoklassniki 开发了自己的工具:版主的任务立即显示所有必要的信息以做出快速决定 - 广告是否合适或应该被阻止,并说明原因。
为了确保服务质量在手动审核期间不会受到影响,人们的工作会受到持续监控。 例如,在任务流中,主持人会看到“陷阱”——已经有现成解决方案的广告。 如果主持人的决定与最终的决定不一致,则主持人会被告知错误。
平均而言,审核者会花费 10 秒时间检查一则广告。 此外,错误数量不超过所有已验证广告的0,5%。
人们的节制
Odnoklassniki 的同事更进一步,利用了“观众的帮助”:他们为社交网络编写了一个游戏应用程序,您可以在其中快速标记大量数据,突出显示一些不好的迹象 - Odnoklassniki 版主(
一种游戏,用户可以在其中标记带有电话号码的照片。
平台中的任何广告队列都可以重定向到 Odnoklassniki Moderator 游戏。 游戏用户标记的所有内容都会发送给内部管理员进行审核。 该方案允许您阻止尚未创建过滤器的广告,并同时创建训练样本。
存储审核结果
我们保存审核期间做出的所有决定,以便我们不会重新处理那些我们已经做出决定的广告。
每天基于广告创建数以百万计的集群。 随着时间的推移,每个簇都会被标记为“好”或“坏”。 每个新广告或其修订版进入带有标记的集群后,都会自动从集群本身接收解决方案。 每天大约有 20 万个这样的自动解决方案。
如果没有新的公告到达集群,则会将其从内存中删除,并将其哈希值和解决方案写入 Apache Cassandra。
当平台收到新的广告时,它首先尝试在已创建的广告中找到相似的集群,并从中找到解决方案。 如果没有这样的集群,平台就会前往 Cassandra 并在那里查找。 你找到了吗? 太棒了,将解决方案应用于集群并将其发送给 Yula。 每天平均有 70 万个这样的“重复”决定——占总数的 8%。
总结
我们使用 Odnoklassniki 审核平台已经两年半了。 我们喜欢这样的结果:
- 我们每天自动审核 94% 的广告。
- 审核一则广告的成本从 2 卢布降至 7 戈比。
- 感谢现成的工具,我们忘记了管理版主的问题。
- 在管理员数量和预算相同的情况下,我们将手动处理的广告数量增加了 2,5 倍。 由于自动化控制,手动审核的质量也有所提高,误差在 0,5% 左右波动。
- 我们通过过滤器快速覆盖新型垃圾邮件。
- 我们快速将新部门连接起来进行审核
《尤拉垂直》 。 自 2017 年以来,Yula 增加了房地产、职位空缺和汽车垂直领域。
来源: habr.com