查看原文
其他

反垃圾江湖风云纪事 | 技术头条

爱奇艺技术团队 CSDN 2019-05-25

列位看官,你道此文从何而来?说起根由虽近荒唐,细谙则深有趣味,且听笔者细细道来。

作者 | 爱奇艺技术团队

责编 | 唐小引

出品 | CSDN(ID:CSDNnews)


第一回  风起云涌

怒来无发亦冲冠,剑气能令六月寒


有人的地方,就有江湖;有江湖的地方,就有黑白善恶,也就有了黑白和善恶无尽的斗争。

在互联网的江湖中,有这么一群邪恶的组织,散落在世界各个阴暗角落,为了谋取利益(据传该利益市场有千亿之巨),为非作歹,对江湖各名门大派以及无名小派,进行盗号、薅羊毛、散播病毒、广发垃圾帖、刷单刷量等破坏行为,严重威胁到江湖稳定,甚至有些门派因此被迫退出江湖。

我们称他们为,黑产。

作为互联网视频江湖的重要一脉,爱奇艺自然是黑产重点关注的对象。在黑产的各种破坏行为中,对千千万万享受爱奇艺视频内容服务的老百姓中,产生直接影响的,就是广发垃圾帖,通常都是广告、色情信息内容。

为了社区内容的繁荣稳定,对抗黑产发帖派,钟馗就此诞生。

钟馗(kui),钟馗的钟,钟馗的馗,与中国古代神话人物钟馗重名(如有雷同,纯属故意)。

籍贯,爱奇艺技术团队。

职业,反垃圾。

虽然钟馗出生于互联网时代,但早在几百年前,就有人称赞过钟馗的厉害。有诗为证:“怒来无发亦冲冠,剑气能令六月寒”。从出生起,钟馗就在诸位名师的指点下,苦练本领,希望能成为各业务、各社区的守护神。

除了与黑产发帖派进行对抗,社区里也有很多骂人的、灌水的、发无语义内容的普通用户,这部分内容,通常也是不允许存在的。有时候,钟馗像个警察,除了广告贴、色情贴这种涉黑的刑事案件,各种灌水、骂人扰民的民事纠纷也要管理。

第二回 系统架构

寻龙分金看缠山,一重缠是一重关


当前钟馗采用 QAE 方式部署,便于横向纵向扩展,也支持例行任务批量调用。如下图所示,当前文本反垃圾系统架构分为三层,分别为服务层、算法策略层、模型管理层、监控层。

其中,服务层负责为各业务方提供服务接口,各业务方通过 HTTP 请求形式调用反垃圾服务,传入相应参数即可得到返回结果;

算法策略层为垃圾检测的核心环节,又分为预处理模块、规则模块、关键词模块、风控模块、模型模块等几个部分,每个模块又细分为数个到数十个的子模块。策略组支持按业务需要配置,可针对不同的业务定制不同的算法策略组合,以满足不同业务针对文本特点、响应时长的需求,有很高的配置灵活性。除此之外,策略组还支持短路操作,即有某一策略判定该条文本为垃圾文本,则不再进行后续判断,可以加快响应速度,缩短响应时间;

在算法策略层之下则是一些辅助与交互模块,主要有人工审核数据分析系统、预料标注系统、ML 模型离线训练系统、日志检索引擎与监控报警系统,该部分一方面可进行语料数据集的扩充、标注以及利用其进行相关机器学习、深度学习模型的训练工作,另一方面可以针对反垃圾服务的各项指标如 QPS、调用量等的监控及报警,保证服务稳定性。


第三回 策略介绍

十步杀一人,千里不留行


行走江湖,惩恶扬善,离不开一身过硬的本领。下面,就来介绍钟馗的各种武功:

  • 关键词策略 —— 七伤拳

关键词匹配是识别 Spam 最直接,最简单、最有效,也是最暴力的方法。钟馗拥有一套较为完善的关键词识别算法体系,如硬匹配、跳词匹配、联系方式匹配、拼音匹配、标点符号匹配、长句模糊匹配、完全匹配等。这些不同的匹配算法,在针对不同的垃圾文本中发挥着各自的作用。

这里给大家简单介绍一下两种关键词匹配算法,希望给大家有一个感性的认识。

硬匹配(HardMatch),顾名思义就是一种比较生硬的匹配算法,关键词是啥,识别的内容就要一个字不差的相同。硬匹配还支持多个关键词的匹配,如“售卖,会员”,那么如果一个文本是“低价会员.....售卖,联系我”,那就会被识别出来,不管是“售卖”和“会员”的相对出现顺序是什么。

跳词匹配是在硬匹配上进化而来的一种匹配算法。当我们要识别的内容的每个字都被空格,或者横杠隔开,那么通过硬匹配加词可能就有点不方便了。跳词匹配默认会把关键词中的每个词分开单独匹配。比如我们要识别“找--小–姐,私聊”,那么只要添加“找小姐”,就能够准确命中目标。

通常线上发现一些垃圾文本,运营第一时间会配置一些关键词加以控制,这样是最快速有效的。

关键词策略虽好,但是太过于暴力,稍有不慎,就有误伤,就像七伤拳一样,稍微控制不好,伤人伤己。

  • 规则策略 —— 独孤九剑

单单有关键词,还不足以识别所有的垃圾内容,毕竟关键词识别太具体了,能够识别的内容也是有限的。这个时候就需要编写一些规则去更加普适性的识别垃圾内容。

规则,可以用来解决一类问题,就像独孤九剑一样,有破剑式、破刀式、破鞭式等。钟馗的规则策略,也有破色情式、破广告式、破辱骂式等。只不过,钟馗会的招式更多。经过几年和黑产的斗争,钟馗已经积累的几十个不同的规则。

我们知道,现在很多小朋友在看动画片的时候,拿着 iPad,在键盘上乱敲一通,作为评论发送。其实这些都是属于无语义的内容,并不是啥正儿八经的评论,运营一般都会建议删除类似的评论。钟馗有一个规则叫“最长连续字母”,它是计算一句话中最长的连续的字母有多少,如果有 20 个,想必一般都不会是英文单词,从线上实际情况来看,基本都是无语义。当然也有类似 hahaha 这种,只要额外处理一下就行了。

评论归评论,升级到对明星个人攻击就不对了。我们有一个规则叫“基于依存分词器的情感分析”,专门用来识别这种评论。依存分析的结果是一个树,树的边对应一种语法关系,比如名词修饰,主谓短语。在我们的数据库中,会配置一些演员名,和一些语法关系,比如名词修饰关系 NMOD(傻逼,__ACTORS__),表示但凡有人称呼某个明星是傻逼,我们就认为这句话需要特殊关照一下。

对于不同的业务线,审核的力度和尺度都是有些不同的,所以我们使用的规则会把计算结果和评判的尺度解耦,同样一句话,同样的规则,计算的值肯定是一样的。但是配置不同的尺度,可能在有些业务线被判定为垃圾,有些可以存活下来。

  • 模型策略 —— 九阴真经

《九阴真经》分上下两卷,上卷内功心法、下卷武功招式。机器学习模型,亦是如此。标注语料如同内功心法、算法模型如同武功招式。强大的内功,加上凌厉的招式,方能击退敌人。

模型主要针对的文本类型有色情文本、广告文本、无语义文本、辱骂文本、低俗文本等。而模型类型经过多轮迭代,拥有了 LogisticRegression、LSTM、Convolutional-LSTM、CNN、BiLSTM-Attention、cw2vec-Attention 等众多形式的模型结构,每种模型都在垃圾文本识别中发挥着重要作用。

LogisticRegression 模型:

该模型为线性模型,形式简单,迭代快速,效果一般好,特征项有分词及 n-gram 形式的 BagOfWord 布尔特征、辅以部分规则特征和 1-gram 拼音特征,可在一定程度上捕捉句子结构及同音异形字特征,但该模型受数据集类别平衡性影响较大,需要对训练集做大量标签清洗工作。

上图即为色情 LR 模型示例,其中各字符数量取对数的原因在于使所有特征取值范围相似,提高模型收敛速度。

LSTM 模型:

该模型由一个单层 LSTM 单元构成,拥有 128 维的隐层状态输出及上下文编码输出,LSTM 是一种特殊的 RNN 结构,其提出主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题,相对于普通 RNN 来说,能够在更长的序列中有着更好的表现。

Convolutional-BiLSTM 模型:

众所周知,CNN 在图像领域取得了巨大的成功,其核心之一在于卷积操作可以更好地捕捉局部特征,在文本处理中借鉴这一思想,将局部信息进一步强化,结合双向 LSTM 获取句子的编码表示,相对于单向 LSTM 来说,既包含有上文信息,又包含有下文信息,做到基于上下文语义信息判断文本是否属于垃圾。下图即为该模型结构的一个示例:

CNN 模型:

CNN 模型完全使用卷积操作来提取特征,通过不同的卷积窗口大小来获取视野和序列特征,提供强大的特征表示能力,同时,池化操作能够减少参数数量、降低噪声干扰,起到进一步特征选择的作用。

为了针对黑产经常采用的使用同音字来对汉字进行替换逃避关键词匹配或创造 OOV 条件越过模型检查的手段,如“黄色”就可以被替换为“璜色”、“煌色”、“簧色”等,我们加入了针对拼音维度的考量,拼音特征可以很好地建立替换字与原始字的对应关系,在一定程度上增加模型对替换字的识别能力,最后将汉字特征与拼音特征相结合,能够得到更强的句子表示,提高分类性能。同时,CNN 相对于 LSTM 来说,训练和预测速度更快。

Cw2vec-Attention 模型:

由于黑产经常对汉字进行替换来逃避检测,因此该模型关注的重点在如何找出替换字与原始字除拼音之外的联系,通过观察样本数据,我们发现,黑产除了替换为同音字之外,还会替换为同形字,如“微信”可以被替换为“徽信”、“媺信”、“徵信”、“徾信”等,而汉字笔顺特征可以较好地建立替换字与原始字的联系,因此,引入汉字部件的笔顺信息,可以在一定程度上增加模型对替换字的识别能力。同时借助 Attention 机制来获取多样化的上下文关系,增强部分特征词的作用,提高检测性能。模型架构如下图所示:

  • 风控策略 —— 葵花点穴手

前面的策略,都说的是输出技能。钟馗还会控制技能,手指轻轻一点,就把敌人控制住,让他动弹不得,无法出招。

当前,钟馗所采用的风控策略只是一些简单的针对用户 ID、设备 ID 级别的规则,比如,水贴识别策略,可以判断用户一定周期内发送文本内容的相似度及频率,再决定是否用葵花点穴手将其点住,进行限制。


第四回 无尽之战

路漫漫其修远兮,吾将上下而求索


反垃圾的路,有起点,但没有终点。钟馗在成长、在壮大、在苦练学习各种武功秘籍,但作为对手的黑产们,面临巨额的诱人利益,又何尝不是呢?现在黑产们以及发展出群控、云控技术,甚至也在使用人工智能技术。这注定,不是一条一劳永逸的路,钟馗也将继续勤学苦练,完善自我。魔高一尺,那就让道,高它一丈吧。

声明:本文为原创投稿,作者独立观点,不代表 CSDN 立场。

【END】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

☞为什么是张一鸣?为什么是抖音?

☞Python 爬取途牛网,揭秘哪里人少景美!

☞重磅!Facebook 更新 PyTorch 1.1,打算跨 GPU 分割神经网络 | 技术头条

☞真の硬核粉丝!小学生也参加杨超越杯,作品优秀!

☞ 阿里半跪过,任正非差点跳楼,京东被骗光钱:成年人的生活哪有容易二字?

☞不改变比特币, 如何扩容?

☞强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测

☞17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

☞ 她说:为啥程序员都特想要机械键盘?这答案我服!


System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存