在过去的几年里,质量控制作为微信看一看推荐的基石,我们在不断的迭代升级中积累了一定的技术和经验。本文主要跟大家分享一下总体框架的设计思路,以及如何通过平台通用化来解决组合爆炸的问题。文章为了尽可能的给读者描述一个完整质量控制体系的框架,这里既有技术上,架构上考虑,也会有产品上,业务上的考虑。
一、看一看介绍
1.1 看一看的场景
微信作为国内最大用户群体的应用,在人们的生活,工作,学习中提供社交功能的同时,还提供了工具,游戏,购物,支付,内容,搜索,小程序等服务。看一看作为微信的重要组成部分,在原有公众平台资讯阅读的基础上,为用户提供中心化的内容消费平台,旨在提升内容发现效率,优化内容质量,丰富内容种类。
1.2 看一看的质量控制
与其他很多资讯产品上线初的野蛮生长不一样,质量控制一开始就作为看一看上线标准被提出并进行了大量的投入。质量控制的必要性是由于多方面的因素决定的。
- (内在属性)一个产品的出身和环境决定了其的调性,微信内在也决定了看一看的调性。在这里,调性这个词更多的是形容内容质量可以被用户接受的底线。用户对微信的期待也提高了这个底线。
- (外部压力)微信的每一次改动都会受到广泛的关注,在功能上线初期面临着比其他应用更大的舆论压力和监管压力。
- (黑产对抗)因为用户多,流量大,强大的经济效益引来黑产的参与,使得内容生产的大环境很差,低质量数据充斥各个角落;问题也在不断地的变化,识别控制难度也在持续加大。
二、总体框架
既然质量控制作为推荐系统必不可少的一部分,那么在推荐系统中处质量控制处于什么位置,包含哪些子模块,又是从哪几方面方面进行控制?
首先,我们先看一下内容数据在推荐系统的一生。
2.1 数据的一生
- 数据从内容生产方发表产生,由平台收集数据。这里生产方来自四面八方,生产的内容五花八门,质量也是参差不齐。所以,平台将数据接入之后第一件事情就是将这些内容进行格式化和特征提取,方便后面的流程能通用化地处理这些内容数据。
- 内容经过前面的初步处理后,质量控制模块根据已有的特征对内容进行过滤,主要是过滤不符合平台规则的低质量数据和提供后面排序需要考虑的质量因子。这里面涉及到过滤效率的问题,一般会分为粗过滤还有细过滤。排序推荐模块将根据内容特征还有用户行为对数据进行排序。
- 最后,平台将内容推荐给用户进行消费,消费的过程中会与内容产生很多交互行为。这些行为数据,可以用于平台的质量控制和推荐排序;也可以反馈给生产者,让生产者能够了解到内容被消费的情况,生产更多符合用户需求的内容。
2.2 多维度控制
数据的一生中,我们可以看到平台都是通过对发表内容本身进行检测来进行质量控制,这显然是不够的。一个控制框架的有效运行不能仅仅在一个地方进行监控,需要全面,多维度共同作用。我们可以抽象一下平台,生产,还有用户。我们会发现其实除了对平台自身检测能力进行提升外,
也可以对生产者和用户进行引导,评估。
- 根据生产者生产内容的质量,还有用户对内容的反馈,平台可以对生产者进行分级分类。对不同等级的生产者,使用不同质量控制策略,如,高质量的账号颁发个免检标签,在质量控制的时候避免误伤。而对于一些已经被检测到有低质量内容的账号进行一定时间的封禁,减少相似问题的爆发,增加长尾问题的召回,提升系统的响应速度。不同类目也是同样的道理,比如高危的内容类(社会民生,养生健康,娱乐)需要加强控制。
- 而对于用户,我们同样可以根据一下用户的基础数据(地域,年龄,性别)和用户在微信内的一下阅读信息,对用户进行分类。不同用户可以使用不同的控制策略。这样在保证了用户对体验有不同要求的前提下,尽可能地保证推荐系统的效率。
2.3 辅助模块
除了上面说的三个部分之外,还有几个同样非常重要的质量控制辅助模块,这些模块对保证整个质量控制的正常运行至关重要。
- 监控系统:监控系统需要对平台,生产,用户的各个方面进行监控,有些数值监控指标可以通过机器持续监控,而有些数据本身的问题则需要人工的轮询与审核,还有就是新问题的发现与归纳汇总。其中最重要的是能够进行全方位覆盖,不同范围,不同领域,有时候问题可能隐藏的茫茫大盘数据中。
- 干预系统:干预系统是对问题出现后,进行快速处理的手段。这样能够在模型策略迭代较慢的时候暂时压制问题,减少影响范围。干预系统除了生效快之外,还有一个重要的能力是相似内容的查找(去重指纹),如相似标题的封禁和相似图片的封禁。
- 标注系统:标注系统作为一个提升样本收集效率的平台,不仅能有效提升标注人员的标注效率,进而有效提升模型的迭代效率;而且标注系统方便对问题的收集,总结,归纳,形成各个领域的知识库。
三、数据与质量
前面介绍了质量控制的必要性,也介绍了质量控制的大体框架。那么到底数据是指哪些数据?所谓的质量又指的是哪些质量指标?这些数据跟这些质量指标带给我们什么问题与挑战呢?
3.1 内容数据源
看一看的数据从来源上分包括公众平台,腾讯新闻,腾讯视频,企鹅号,微视,快手等。从内容形式上分有文章,新闻,视频,图片等。样式丰富的数据在满足不同用户的内容需求的同时也加大了监管的难度。
3.2 质量指标
同时,看一看以用户的体验为出发点结合具体业务需要建立了一套质量指标体系。这里指标随着业务的发展不断在增加,含义也在不断的丰富。多维度的指标可以为业务的质量过滤和推荐排序提供更多的个性化的选择。
3.3 问题与挑战
那么,我们的问题和挑战是什么呢?我们先来看一下日常工作中经常遇到的一些对话。事情的本质往往隐藏在复杂的表面下。
丰富的数据源,多维度的质量指标,个性化的业务场景带来的其实是组合爆炸问题。如果对每一种组合都单独处理,不仅导致大量人力的浪费;同时,也无法对速度要求高的质量控制问题进行快速响应。毫无疑问从体系上进行通用化,模板化,可复用,可迁移是我们解决问题的方向。下一节,我们会从一个普通任务的迭代周期出发,分析上面对话对应的迭代过程的那一部分,并对相应的部分进行相应的通用化。
四、体系演进
4.1 规则,特征,样本,模型
下图展示了一个迭代周期里面几个关键的过程。
1.规则制定:规则制定可以说是质量问题解决中最重要的工作,问题分析清楚了,解法也就出来了。这里简单列几个小原则,不进行展开。
- 主要组成:需要对问题进行全面的分析,包括场景数据是什么,问题有多少子类型,问题比例有多大,影响范围有多广,业界是否也有同样的问题,做法是什么。
- 基于需求:这个阶段更应该从需求出发进行问题的分解,尽量减少技术性的考虑。很多时候人会往往会混淆“需要做”和“怎么做”。因为觉得这个东西难做,或者不能做而将这个东西认为不需要做。
- 基于数据:规则的制订需要结合数据进行讨论,不能几个人凭主观想法就定下规则。数据往往会提供很多我们意想不到的冲突情况。
- 衡量标准:规则必须能在人与人之间传递。
2.特征提取:这里涉及如何将业务需求转化为技术需求。根据问题分析的结论,对直接特征进行提取,如标题,正文,封面图,隐藏内容,页面结构,跳转链接,锚文本,账号,统计特征等。
3.样本收集:根据需要从原始数据中收集一定量的正负样本,这些样本可以通过相似样本挖掘,也可以通过人工标注。
4. 模型训练:使用模型对提取的特征进行组合,并对收集的样本分布进行拟合。
- 特征组合:模型将问题需要考虑的特征进行组合。有些问题只需要考虑标题(标题党),有些问题需要考虑文章标题的匹配程度(文不对题),有些问题需要同时考虑文本与图片的结合(低俗色情);有些问题只需要考虑主题词(广告),有些问题需要考虑上下文语境(假新闻)。
- 数据分布:模型会尽可能贴合样本数据的分布,降低 Loss。有些数据源问题比例高,有些数据源问题比例低。切换数据源的时候,如果样本分布与目标数据源的分布不一致,效果往往有较大的差异。
4.2 通用化
看完上一小节的描述,不知道大家有没有把对话跟迭代周期的过程对应起来。接下来尝试对迭代周期里面的各个部分进行通用化,包括细粒度化,共享特征,样本增强,模型复用,模型迁移。
1.细粒度化:在进行规则制定阶段,要避免指定一个很大的质量问题进行优化,尽量把问题定义成“独立”,“明确”,“与业务无关”的细粒度问题。这样可以减少后面因为业务变化导致的不确定监督问题,提升模型适用性。举个例子:我们之前有个质量问题是黑四类(广告,活动,通知,招聘),标注的时候没有区分,训练的时候也是用一个模型。这样在有新的业务出现的时候突然发现我们不需要黑四类,而是黑三类。还有其他一些不建议的问题类型:"标题不规范","正文质量差","内容不优质"。
2.共享特征:虽然不同数据源的样式不一样,这样需要对不同的数据源通过页面解析进行特征抽取,统计。但是对于同一个数据源,不同的质量问题,往往会用到很多相同的特征。一个数据源抽取后的结果可以保存在结构化的数据结构中方便各个质量模型,还有其他的业务模型使用。如文本的位置,是否有链接,是否隐藏,是否模板内容等。
3.样本增强:通过相似样本挖掘和人工标注容易导致过拟合,标注效率低的问题。这里可以结合数据增强提升模型的鲁棒性,结合主动学习提升标注效率。
4.3 模型复用
在处理不同的质量问题的时候,我们发现有些问题用到的特征,拟合的方法都是相似的。像越来越多平台算法库对基础模型提供支持一样,通过从具体问题中抽象问题,构建通用模型框架可以有效提高我们的工作效率。而构建通用模型框架需要结合的前面提到的共享特征在设计之初就其保证通用性,适配性,可扩展性。
4.3.1 通用模型
4.3.2 广告模型
这里介绍一下广告识别模型在构建过程中,涉及的几个通用问题模型。广告模型主要是负责识别文章里面的广告内容。从内容上,分为文字广告,图片广告,图文广告。从位置上分顶部广告,中间广告,底部广告。从篇幅上分主体广告,插播广告。那么这里可以抽象成 3 个通用的问题:
1.问题内容的定位(插播广告);2. 多类型特征的融合(图文广告);3.文章结构的序列化(顶部,中部,尾部,篇幅)。
- 问题内容的定位:这类问题与图像中的物体检测相似,都是需要识别相应目标及其对应的位置。据此,我们提供一个全新的用于文本问题检测的框架 TADL。通过滑动窗口的检测方法将大段文本切分成多个小片段,并对每个小片段进行广告概率打分和反推定位,从而在一个模型框架内同时实现了广告文字的识别和定位,并且只需要文章级别的标注就能完成训练。
- 多类型特征的融合:图片广告定义广泛,广告的程度需要同时考虑多种类型的特征(文本大小,文本位置,文本语义,图片场景,图片内容)。相对于端到端的需要大规模标注的深度模型,对问题进行分而治之的 wide&deep 模型框架具有更好的解释性,更高的召回。
- 文章结构的序列化:一篇文章是否有广告问题,需要对整篇文章中多模态广告的占比,位置进行综合考虑。将不同广告文章中的文本广告概率和图片广告概率进行序列化的可视化展示,发现通过对有限的序列模式进行识别检测可以用来解决多模态文章分类问题。模型通过 Multi-CNN 检测异常“突起”,通过 BiLSTM 检测概率变化趋势。
4.4 模型迁移
数据源之间的数据分布一定是会存在差异的。模型迁移主要是想要解决数据分布不一致的问题。这里我们以色情低俗识别为例子,分“词向量”和“特征分布”两个方面来考虑迁移问题。
4.4.1 词向量统一
词向量在不同的场景中会表现不一样的语义,如“下面”在图文和视频标题里面就有不同的语义。多数据源数据训练的词向量因为获得了更多的信息量要好于多个数据源单独训练的向量。到后来基于更大量训练集的 bert 的出现更是极大的丰富了词向量的信息量。
4.4.2 特征空间统一
这里面的方法主要有 finetune,多任务学习,还有对抗学习。
- Finetune 的目的是使用已有模型的特征提取能力,然后目标数据源进行组合调整达到较好的效果。这个模型在源领域数据标注量要比较大,模型框架能够表示足够多的共同特征时比较有效,如 bert。
- 多任务学习通过不同任务间建立共享层,学习不同 domain 之间的共享知识,进而实现双赢。缺点是需要大量的目标领域的有标数据。
- 对抗学习充分利用了大量的无标数据消除一些邻域间分布不同的差异。
五、持续对抗
5.1 动态数据
前面所提到的多样化的问题,更多的是平台内部因为业务需求主动引入更多的数据和质量指标导致。这些问题相对来说是静态的。在业务上线之前,平台会进行摸底优化,不会有太多的意外。
接下来我们讨论数据动态变化的问题。在日常的内容生产过程中,内容生产者根据平台的环境和用户的反馈不断修改内容的样式,类目。这些变化会改变数据的分布,从而导致平台对新数据出现漏召或者误判。其中,黑产的持续不断的有意对抗最为频繁,花样最多,也是我们最为关注的。这些对抗具有形式类目多,迭代周期多的特征。
形式类目多:问题数据类型不断变化演进,从文本,图片,视频一直到链接。类目上也是在多个高危类目上来回切换,不断创新。
- 迭代周期短:某个特殊的色情标题党样式,在某一时间短获得不错的曝光后,黑产立即进行了大规模的投产,而在受到打压后又迅速的转向其他类型的 case。
5.2 解决体系
由于敌暗我明,完全杜绝几乎是不可能的。原则上是提高黑产的作弊成本,降低平台的维护成本。我们还是从前面提到质量控制体系的三部分入手。
平台:每天都有少量的标注人工对线上数据进行轮询,对有问题的数据进行屏蔽收集。
用户:对大量用户反馈有问题的数据进行限制。
生产:
- 黑名单:对历史上劣迹斑斑的账号进行封禁,同时,对跟这些账号关联紧密的账号进行挖掘封禁。
- 沙盒机制:对新注册的,发文较少,未被平台验证的账号,限制其推广范围。
样本扩散,模型迭代:
- 用户反馈和平台监控,虽然能发现新的问题,但是泛化性不够。
- 账号打压虽然具有泛化性,但是无法将新问题,新账号发现。
- 为了解决原有体系的不足,我们尝试结合两部分,通过人工监控跟负反馈收集样本进行扩散,然后提供给模型进行迭代提升召回。最后再从账号维度进行泛化打击。这里跟前文提到的样本增强的区别在于样本扩散更多的是对新问题样本的收集。
5.3 扩散迭代
5.3.1 正常流程
那么怎么进行样本扩散,加快模型的迭代周期呢?下面是一个样本收集周期里面大概需要做些什么事情。
- 首先根据发现的问题数据通过相似度计算,我们在源数据(source data)找到一批跟问题数据(sample data)相似度较高的未标注数据(unlabeled data)。
- 账号:一个账号的内容大部分比较相似,同一个黑产内容跟也往往相同。
- 类目:对问题比较集中的类目进行数据挖掘。
- 关键词:用一些匹配式框定一个范围。
- 聚类模型:简单的计算样本内容的文本相似性。
- 分类模型:构建简单的分类模型进行初筛。
- 然后对这批未标注的数据进行人工标注,这样可以筛选出一批能有效提升模型对新问题识别效率的标注样本(selected data)。
- 最后将筛选的样本跟原有的标注数据(labeld data)进行合并作为训练样本进行模型训练。训练好模型之后在测试数据(test data)上面进行测试效果。
5.3.2 加速流程
工作周期主要的工作量是在两个部分,一是相似样本的挖掘,二是人工标注样本;相似样本挖掘的精度越高,覆盖的样式越全,人工标注的样本量就越少。而这两方面我们可以使用半监督学习跟强化学习的方法来进行优化。
5.3.3 自动化流程
更进一步我们尝试使用强化学习代替整个问题样本的挖掘过程,强化学习选择器从源数据里面选择样本,跟已有标注样本送入判别器训练,然后将判别器在测试数据和问题数据的表现当成 Reward 反馈给强化学习选择器。
六、总结展望
前面讨论了框架内部的通用性,那么这个框架整体是否具有通用性,能否在其他平台适用呢?其实因为各类内容平台在问题类型跟数据类型本身就存在大量的共性;所以看一看的控制框架和技术,在面对如搜一搜,公众平台,朋友圈等其他场景时,依然可以提供相应的经验和能力。近半年来,搜一搜作为用户获取内容重要场景,我们在复用看一看能力的基础上也构建了类似的控制框架。
虽然我们已经掌握了各式各样的能力,能够解决很多问题,但是相比起知道的知识,我们不了解的内容更多,经常会出现让我们意想不到的状况。质量控制,乃至于机器学习的主要矛盾在于用有限的知识处理无限的未知。持续的知识获取意味着自主学习,也意味着持续的与现实交互。
一个平台的质量控制系统就像是人体的免疫组织,当病毒来临,免疫细胞产生抗体,消灭病毒。人类在漫长的进化过程中,构建了复杂的免疫系统,同时,病毒也在不断的进步。越是复杂的系统,出现问题的可能性越高,出现问题后解决问题的成本难度也越大。在构建强健的内部免疫系统的同时,我们同样需要营造良好的外部环境,让更多优质的内容生产者进来,才是解决质量问题之根本。