针对社区网站的作弊行为大致可以分为两种,一种是个人在社区中发布的所谓的不和谐内容;另一种是利用社区的信息传播机制向社区内的其他用户进行的广告推广活动,社区进行SEO,信息诈骗,垃圾灌水等行为也属于此类。前者在西方国家算不算是作弊还不好说,但是广告贴,垃圾贴,却是任何社区都要认真对待的问题。单位时间内,垃圾信息的发布量要远大于正常用户,如果一个社区没有基本的反作弊系统,那么很可能出现正常信息被垃圾信息淹没的情况,这对于社区的危害是相当严重的。
不过在国内,这两种作弊究竟哪个更严重,还要根据具体情况而定。在某些敏感时期,如果不对第一类作弊行为严肃处理,很可能就要面对关站的风险,好多网站都曾上演过两会期间紧急删贴的好戏。所以需要一个强大的反作弊系统对这两种行为加以控制,将其对社区的影响减小到可以接受的范围。下面,笔者将之前工作中对于社区反作弊的一点心得体会写出来,与大家分享。我暂且管他们叫做社区反作弊的“七武器”。
武器一,多模式匹配算法
毋庸置疑,多模式匹配算法是反作弊工作最核心也是最基本的工具,几乎所有基于内容的反作弊系统都需要多模式匹配算法的支持。在我以前的文章中,也介绍过AC,WM这两个经典的多模式匹配算法。对于中小网站而言,一个好用的多模式匹配程序,往往就能够解决他们所遇到的绝大多数作弊问题。而在成熟的大型社区网站,无论是同步过滤,还是异步召回,没有多模式匹配算法的支持,基本的反作弊工作也将难以开展。
优秀的多模式匹配算法还可以大幅提高用户提交文本的分析效率,对于每天百万提交的网站而言,分析效率的提升所带来的收益是相当可观的。如果一个社区没有在多模式匹配算法方面做过投入,那么他们基本也就等同于没有搞过反作弊。但是遗憾的是,国内的好多社区网站在如此重要的环节,做的也不理想,好多网站目前还在用Trie来执行多模式匹配运算。
武器二,文本预处理
对于所谓的不和谐内容而言,其发布者往往认为自己是“人间正道”,一般不会对自己所发内容做太大的修饰。但是对于广告推广和水军作弊来说,为了要达到推广效果,内容中往往会夹带手机,QQ号,Email,URL,超链接这样的能够直接指向受益者的信息。作弊者往往会绞尽脑汁,修饰这些内容,利用程序和人的差异性,逃避反作弊系统的检测。比较典型的例子就是在数字书写中,用小写字母'l'代替数字1,用大写字母'O'代替数字0。这样的转义修饰五花八门,往往会让基于内容的反作弊系统一筹莫展。此时就必须要有足够强劲的文本预处理系统来降低修饰对于内容分析的影响。基本的预处理操作包括空格压缩,简繁体转换,全半角转换,特殊字符替换,火星文转换等等。不过即便是进行了上述处理,也只能解决一部分的内容修饰问题。从根本上说,预处理与内容修饰是“道高一尺,魔高一丈”的关系,作弊用户总会通过自己孜孜不倦的尝试,找到程序无法理解而又不影响人类阅读的书写方式(比如说经典的文本竖排)。但是这并不意味着我们就可以忽视文本预处理在反作弊工作中的重要性。有一点我们要牢记,推广类作弊是由利益链条支撑的,当作弊用户将自己的内容改的面目全非之时,同时也意味着其推广作用的下降。因为这既增加了其他用户阅读难度,又使得社区的其他系统难以识别。
武器三,文本相似度算法
对于广告推广类作弊,无论是机器发帖还是人肉发帖,其内容都会围绕一个原始模板。所以文本相似度计算在基于内容的反作弊中,作用不可估量。举个最简单的例子,一个人在自己的主页发布一些广告贴,单从一篇内容来分析,可能找不到什么明显的作弊迹象,但是很可能他一天之内所发的若干篇帖子的标题都是相似的。所以文本相似度算法适合于使用在对某一维度下的内容的相似度分析之中。广告推广由于其利益要求,内容相似的比例很高,或多或少都会被文本相似算法抓到,而正常用户所发布的内容,除非是转帖,否则各文章之间的相似性可以忽略不计。
从技术上讲,文本相似度分为两个层面,第一个层面,是基于编辑距离的文本相似度计算,这种算法是根据一段文字如何经过添加,删除,移动转化为另一段文字的操作步数,来计算两段文字的相似程度,运算的时间和空间复杂度都很高,对于长文本不太适用,而且没有考虑文本中意群的重要性,但是对于评论,标题这样的短文本往往能获得不错的效果。第二个层面涉及到自然语言处理的相关知识,需要在原始文本中切分出有意义的Term,然后对于两篇文章的Term集合,运算得出文本的相似程度。从复杂性上要高于前者,但是在处理长文本的方面有优势,而且更有可能从意义的角度识别出相似的文本族。
武器四,机器学习
从某种意义上说,基于机器学习的反作弊系统是内容反作弊的最高境界。机器学习理论用于反作弊,最早始于反垃圾邮件,国外学者在这方面做了大量的研究,Jonathan Zdziarski的《Ending Spam》一书是这方面的集大成者。机器学习反作弊的核心思路在于,对于用户文本的所有分词,有一些出现在作弊文本中的可能性要明显大于其他,我们对于一篇文本中,出现在作弊文本中可能性最大的一批分词,使用公式运算,来判断文本是否作弊。通俗的讲“减肥”,“发票”这样的词条出现在作弊内容中的可能性要远远大于“吃饭”,“喝水”,但是出现了“减肥”的内容又未见得真是一篇作弊文章,也许用户真的要征求好的减肥意见,而不是推广某某减肥药,但是真正要推广减肥药的帖子,其内容中肯定不止包含“减肥”这么一个高危词,同时肯定还会伴随其他的高危词条,甚至还可能有电话,QQ等联系方式,通过综合分析文本内容,就可以给出正确度较高的判断。
但是某一个分词是否是作弊高危词是动态变化的,某些之前的高危词由于不断打击,可能现在变成了普通词,而另一些却由普通词变成了高危词,这时就需要引入机器学习的概念来动态调整系统的知识库。机器学习系统利用一个训练集,由人先来告诉他,那些词条出现在文章中作弊的可能性较大,通过训练集规模的不断增长,不断修正自己的数据库中,各词条的作弊倾向性,实现类似于智能的反馈互动,动态应对文本的反作弊任务。
反作弊中有一种比较棘手的情况,就是对于突发的新词条作弊(比如某个新注册的品牌)往往响应不及时,机器学习系统在这方面具有一定的适应性,只要及时的用一个包含新词的训练集强化系统,机器学习系统就可以获得对新词的反作弊能力。当然社区反作弊相比于反垃圾邮件,要复杂的多,机器学习也不是解决社区作弊的万灵药,例如对于评论这样的短文本,机器学习系统的作弊识别效果就要逊于长文本。
武器五,正则表达式
既然是基于内容的反作弊,那就不得不提一下文本处理的利器——正则表达式,正则表达式是我们日常工作中处理文本的得力助手,但是在反作弊工作中的作用比较有限。之所如此,是因为现在的作弊群体,往往也拥有一定的技术背景,他们也知道正则表达式是一种基本的文本处理工具,所以会煞费苦心的对发布内容进行修饰,逃避正则表达式的检测。而如果将正则表达式的识别范围改的过于宽泛,又很可能发生误识别,将不是作弊特征的内容,识别为作弊,得不偿失。所以在实际工作中,正则表达式除了能识别一些富文本中的超链接之外,比较乏力。
前面所罗列的五种武器,都是基于内容的反作弊工具。不过,基于内容的反作弊只是整个反作弊系统的一个方面,这类工具也存在着一定的瓶颈。举个简单的例子,如果用户将要推广的内容写在一张jpg图片中,然后将这张图片发布到相册里来进行推广作弊,那么前面所提到的所有工具都会一筹莫展。也许你会说,还可以利用OCR工具识别图片中的文字信息,然后再使用上面的工具来处理。那么作弊者还可以对图片扭曲,错位,变色,直到你的OCR工具也望洋兴叹为止。以目前的技术水平,机器还达不到人的识别能力。不过实践中,除非迫不得已,一般很少会大批量的用图片作为作弊媒介。道理很简单,图片虽然可以愚弄社区的作弊系统,但是同样也会愚弄检索系统和推荐系统,目前还没有哪个搜索引擎为图片中的文字做索引,所以使用图片来进行广告推广,同时也意味着丧失了利用社区中的其他系统,扩大推广效果的机会。还是那句话,作弊者也是拥有技术背景的,他们也会考虑作弊的投入产出比问题,所以除非是恶意破坏,否则用图片来进行作弊推广实乃下策。下面我来介绍两个基于行为的反作弊武器。
武器六,频度控制
基本的频度控制,是防止灌水,维护社区秩序与安全的重要基石。同时,频度控制也是社区反作弊的重要手段。在实践中,频度控制之于反作弊系统的价值,不在于防止作弊内容的产生,而是提高作弊成本。举个例子,对于某社区网站,可能限制单个账户每天发布十个帖子,对于正常用户来说,很少情况会达到控制的上限。而对于作弊用户,为了达到推广的效果,必须要有量的支撑,所以如果一个作弊用户有一万个帐号储备的话,他可以在每天某个时刻,用自动化发帖工具,让这一万个帐号各发10篇广告贴,那么他今天10万贴的灌水推广任务就完成了。但是如果我们细化发帖的频度控制粒度,在每天10篇的基础上,同时限定每小时最多3篇,那么这个作弊用户就不得不分3次完成一天的作弊任务,这就变相提高了他的作弊成本。
当然,如此简单的情况他也可以想办法自动化完成,但是有一点需要注意,除非他在这个网站有内线,否则一个网站具体的频度控制策略如何,作弊用户一般是不知道的,他需要花费一定的精力去了解某个社区网站的频度控制策略。如果我们将社区的频度控制做的灵活多变,层次分明,就会让作弊者摸不着头脑,不得不放弃对网站频度控制策略的探查,转而使用暴力的人工作弊方式,这样作弊者的人工成本就会大大增加,人工成本的增加往往也意味着金钱投入的增加,当作弊者觉得他的投入和收益不成比例的时候,甚至会放弃对该社区的作弊活动转投他处。
武器七,行为挖掘
对于作弊用户来说,最难模仿的不是文章,图片,分享或者评论的内容——这些都可以通过伪装,在一定程度上骗过内容反作弊系统——而是正常用户的行为。在我所列的反作弊七武器之中,我将用户的行为挖掘列在首位,行为挖掘毫无争议,是社区反作弊最有效,最犀利的工具。
对于作弊用户来说,由于是利益驱动,所以一般不会花大精力维护少数帐号,而是会聚敛相当数量的帐号作为帐号池,在有作弊需求的时候,从其中取出一部分未被列入黑名单的帐号进行集中的作弊活动,所以作弊帐号在社区中的行为往往呈现一种突发性。比如,某帐号自申请之日两个月内都没有任何活动,在第三月却突然发帖500篇。
对于作弊者手头的成百上千个帐号,要让这些帐号每周都登陆几次,浏览一下别人的文章,图片,发几篇评论,分享几个热点视频,规律性还不能太强,对于他们来说将是极大的负担,不会有人愿意出这份力气。即使真有人把自己手头的几百个帐号都整得像模像样,那么此时这些帐号对于他们的价值也将大大提升,他们将不会再愿意冒帐号被封禁的风险,进行大规模的作弊活动。相较于内容反作弊费尽心思在用户发送的一两篇帖子中寻找蛛丝马迹,行为挖掘显然更为痛快。发帖时间间隔过短,发帖的时间过于规律,只发帖从不浏览别人的帖子,只浏览别人的帖子从不自己发帖,从不装扮自己的主页这样行为,往往可以和作弊帐号关联起来,如果某一个行为不能够说明问题,那么综合考虑一个帐号在几个维度的行为特征,识别其中的作弊者简直易如反掌。待识别出作弊帐号之后,再根据该帐号所发布内容,召回其他帐号的作弊贴,这才是社区反作弊的人间正道。
而且行为挖掘不但可以有效的反作弊,更可以实现对帐号的分类,挖掘潜在的优质用户和风险用户。对于风险帐号,我们严密监控,一旦发现其越雷池半步,马上进行严格控制,甚至封禁帐号,这使得我们的反作弊工作能够有所侧重;而对于优质帐号,我们可以放宽限制,提供更高的自由度,鼓励他们在社区做多动,培养潜在的活跃用户。
行为挖掘说起来如此美好,但是也是整个反作弊体系中最难以达到的境界。用户的行为涉及到一个社区的方方面面,一个用户在几个子系统中活动的综合体才能作为行为挖掘的原料。行为挖掘能不能搞,是检验一个社区网站架构的试金石,对于那些体系结构羸弱不堪的社区,很可能连最起码的数据,你都得不到,更遑论挖掘。国外成熟的社区网站我不是很清楚,但是国内的几乎所有社区网站,在这方面都没有什么建树。
备选武器
下面列出几个在社区反作弊中也很常用备选武器,这些武器的重要性不及前面七种,但是有的仍不可或缺。
验证码,验证码对于防止机器灌水,发挥着重要的作用。但是随着目前国内网站作弊的泛滥,验证码的地位变得比较尴尬。一方面,对于机器自动作弊,一定强度的验证码系统完全可以应付;但是对于人肉作弊,再复杂验证码系统也无济于事。现在国内的社区网站,在反作弊整体规划方面往往惜墨如金,但是对于验证码系统却下得起血本。各大网站的验证码系统,花样翻新,层出不穷,好多做到连人也很难识别,更有甚者搞出了中文验证码,问答验证码等等神奇。我想如果哪个作弊团伙能够开发一个智能程序来解决问答验证码,那么他就解决了图灵的人机问答问题。但是为什么各大网站的灌水现象还是十分严重呢。两方面原因,一方面,国内互联网公司的人员流动频繁,很可能在此过程中,泄露了验证码的核心机密,如果这个东西泄露了,那别说是问答验证码,就是数学题验证码也解决不了灌水的问题。另一方面,是作弊组织的分工细化,据说有人专门负责填写验证码,每天可以人肉填写几千到上万个验证码,正确率可以达到9成,填写一个可以有几分钱的收益。
帐号绑定,反作弊最为头痛的就是,作弊者往往拥有数量庞大的帐号,即使封禁其中的一部分,作弊者也觉得不痛不痒,正所谓“帐号在手,天下我有”。帐号绑定正是在这方面增加作弊用户帐号持有成本的一种手段。通过将社区帐号,与邮箱,手机等实体的绑定,限制用户的帐号拥有量,甚至有的帐号还需要定期激活。但是帐号绑定是一把双刃剑,他既增加了作弊者的帐号持有成本,也增加了正常用户的持有成本,对于刚创出点名堂的小社区,如果帐号的持有成本较高,很可能会为此失去很多的潜在用户,对于社区的快速成长是相当不利的。另一方面,如果作弊者在你的社区可以获得足够多的利益,那么即使你将帐号与身份证绑定,也同样无法阻止他们。
提示系统,在国内的社区网站活动,如果无意中输入了某些被屏蔽内容,就会得到一条提示——“你所发的信息中包含非法内容”,但是却不告诉我们到底是那些内容非法了。这样做的本意是防止作弊用户通过不断调整内容,规避反作弊系统。但是对于正常用户,这实际上是一种伤害,因为我们往往不知道,自己所发的内容中到底是那些出了问题,正常用户与作弊用户是有区别的,他们没有与反作弊系统长期斗争的经验,很难通过简单的调整使自己的内容得到通过,而对于作弊用户而言,这却是易如反掌的事情,如此提示极大的损害了正常用户的使用体验。同时,这也反映了一个更深层面的问题,那就是国内社区产品在反作弊方面的无能。这句提示语相当于告诉我们,如果你设法绕过了这一关,后面就没有进一步的过滤系统了,你的数据就可以驰骋社区,畅通无阻了,你作弊推广的目的达到了。实际上,对于一个拥有完备反作弊系统的社区,我们大可以把用户数据究竟是哪部分非法了告诉他,对于正常用户,这是一种善意的提示,而对于心怀叵测的用户,这也是一种自信的表现。“躲得过初一,躲不了十五”,绕过了这一关,总有一关你是绕不过去的。
人工审核,人工审核是反作弊工作的最后一道防线,虽然反作弊的目标是用机器尽量代替人的劳动,节约人力成本,但是必要的人工介入还是不可缺少的,特别是像帐号封禁这样的用户数据攸关的情境,必须要人来把关,在控制作弊的前提下,尽一切可能保证用户的帐号和数据安全。对于用户数据,我们要抱有足够的敬畏,宁可放过一千,决不能错杀一个,不到万不得已,慎言一个“删”字。
在百度一年的反作弊工作,留下更多的是无奈与遗憾,上面我写了这么多,读者可能会惊讶,这一年我所负责的虽然是反作弊工作,但是与前面的那些内容几乎毫无关系。对于一个成熟社区,反作弊可以起到锦上添花的效果,但是对于那些连基本系统都不完善的网站,你又怎么能指望让反作弊系统雪中送炭呢。如果不能卖钱,对于一个衣不遮体的人来说,裤衩背心肯定比项链更重要。在此即将离开之际,写下此文,来纪念我在百度的那段岁月,今后不管是不是还会继续从事反作弊工作,这段时光都将是我珍贵的回忆。