训练并推断 11 亿节点的图,闲鱼垃圾评论过滤系统也用上了最前沿的图卷积神经网络。阿里巴巴的这项研究获得了 ACM CIKM 2019 最佳应用论文奖,这足以说明图卷积在传统任务中的强大潜力。
垃圾信息过滤一直是我们关注的问题,虽然表面上它只是一个最简单的二分类问题,但要做好还是非常困难的。尤其是闲鱼这种开放性评论机制,评论的维度及角度非常多种多样,再来筛选垃圾信息就非常困难了。
从最开始我们通过关键字判断垃圾信息,到采用朴素贝叶斯等浅层模型,再到 TextCNN 等深度神经网络,我们已经采用很多算法从文本层面判断评论是不是垃圾评论。
但很多时候,光使用文本是不够的,因为在闲鱼的场景中,灰产和模型一直在对抗,垃圾评论变异得很快,闲鱼需要结合一些难以变异的特征判断评论是不是垃圾评论,这些难以变异的信息包括发送这条评论的用户信息、接收这条评论的商品特征,甚至是发送这条信息的用户,他的其它评论行为;以及与它类似的文本都有什么特征。
如果要利用这些多模态信息与复杂的图结构信息,我们就需要更强大的前沿模型——图卷积神经网络。
在这篇文章中,机器之心将介绍阿里如何把图卷积网络用于闲鱼的垃圾评论过滤。目前该系统已经部署到了闲鱼使用环境中,它每天能处理百万级的闲鱼评论,并在其他强有力的深度学习模型基础上,额外筛选出一千多条非常隐秘的垃圾评论。
阿里研究者表示:「基于图卷积的垃圾信息筛选是一种非常通用的思想,它的应用范围远不止垃圾评论过滤,淘宝信息的知识产权保护、淘宝商品管控和用户恶意评价等方面都可以采用。本身阿里的业务场景非常广,再加上图神经网络可以利用复杂图数据的结构信息和多模态属性信息,图神经网络还是非常有前景的。」
闲鱼评论过滤为什么难?
闲鱼是国内最大的二手交易平台,我们可以浏览卖家发布的各种商品,并根据描述与评论选择合适的物品。然而,这个每天交易超过 20 万商品的平台,却会受到垃圾评论的困扰。这主要是因为它与淘宝不一样,淘宝只有买过商品才能评价,但是对于闲鱼,评论充当着买卖双方的沟通工具,很多评论行为发生在购买之前。
正式这种提前沟通与议价的机制,为垃圾评论提供了合适的平台。想象一下,如果灰产用户在许多受关注的商品中留言自己的广告,这样岂不是非常「划算」?为此,阿里的研究者一直与垃圾评论做着对抗,垃圾评论越来越「隐秘」,而判别算法也越来越「聪明」。
我们先看看广告评论怎样越来越隐秘:
换个说法:使用不同的方式表达相同的意思,例如「拨打电话获得更多兼职信息」和「闲余时间挣点钱?联系我」,这两者都引导我们关注相同的兼职广告。
关键字替换:使用少见的中文字符、笔误,甚至表情符号替换关键字,例如「加我的 VX/V/WX」都表示加我的微信。
垃圾评论发布者的这些小技巧很容易欺骗一般的机器学习系统,与此同时,如果发布者发现这些方法不太管用,他们又会挖掘一些新技巧。因此这样总是防不胜防,已经部署的防控算法的效果也会逐步降低。所以如果是一个好的垃圾评论过滤系统,它首先要捕捉到现有的各种模式,与此同时还应该降低对抗行为对系统的影响。
解决思路是什么?
解决垃圾信息过滤的核心思想在于上下文,我们只有把文本信息放入对应的环境,才能准确判断它到底是不是垃圾评论。阿里研究者定义了两种上下文,即局部上下文和全局上下文。其中局部上下文包含发这条评论的买家特征及行为和这条评论对应的商品特征等信息,而全局上下文表示当前评论在全部评论中的扮演的角色。
论文:Spam Review Detection with Graph Convolutional Networks
论文地址:https://arxiv.org/abs/1908.10679
以两种上下文信息为出发点,研究者设计了名为 GCN-based Anti-Spam System(GAS) 的垃圾评论过滤系统。如下所示为 GAS 的整体概览,其中模型会从左侧图抽取出表示商品、用户和评论的信息,从右侧抽取出类似评论表示的意义。最后结合这些信息进行分类,模型就能很好地识别垃圾信息了。
研究者表示:「GAS 会使用两个图来引入不同的上下文的信息。闲鱼 Graph 是一个异构图,它引入局部上下文信息,另一个是同构图 Comment Graph,它引入了全局上下文信息。在这两个图上,研究者分别运行不同的图卷积算法,并最终融合两个图模型的上下文信息,从而共同判断一个评论是不是有问题。」
这项研究比较重要的地方在于,研究者基于他们对业务的理解,所设计的图网络结构能够完成两种上下文信息的抽取,从而真正提升业务场景的效果。研究者说:「这是我们论文最主要的贡献之一,我们会把传统的文本分类的问题抽象成异构图上的边分类问题,把图卷积算法和文本分类做一个很好的结合。」
不光是在做垃圾检测的过程当中,阿里在研究与业务中都会遇到很多特定问题。研究者表示:「很多情况下,我们很难从学术界直接套用一些好的方法,因此经常要把成熟或新颖的算法匹配到业务上,这些匹配很可能做出一些新的贡献。」
如何优雅地理解图卷积
图卷积是非常神奇的一个模型,它能处理图这种结构化的数据。但是如果要理解图卷积,我们又会发现它要求的数学基础似乎非常高,傅立叶变换、拉普拉斯算子等一大波数学在等着我们,这就是最初的频域思路。
阿里研究者说:「自 ICLR 2017 Kipf 的文章发表以来,图卷积才逐渐受到更多的关注,该论文从频域的角度将 CNN 转移到了 Graph,并推导出了非常简单优雅的形式。后来研究者又从空域的角度提出了 GraphSAGE,它利用直观的节点采样与特征聚合高效地生成节点向量,后面还有 Bengio 组的 GAT 与 MIT 的 jumping knowledge net。想了解图卷积的同学可以从这几篇文章入手。」
图卷积开山之作:Semi-Supervised Classification with Graph Convolutional Networks
论文地址:https://arxiv.org/abs/1609.02907
图卷积的核心思想是希望利用近邻节点的信息进行聚合而生成当前节点的新表征,这样的节点表示可以进一步用于下游任务。如果我们直接从核心表达式出发,跳过推导过程,其实能更容易地理解。如下所示为两层图卷积网络之间的传播方法,它看起来只不过比常规的神经网络多了 D tilde 与 A tilde 这几项。
如果我们的图有 n 个节点,那么节点与节点之间的关系可以用 n*n 的邻接矩阵表示,它再加上由节点特征向量组成的矩阵 H 就是图卷积的输入。在上式中,A tilde 以及 D tilde 就是由邻接矩阵算出来的东西,它对于同一张图是不变的,因此可以预先计算好。
现在,剩下的 H×W 就是输入Embedding H经过一层全连接层了,以这样方式进行层级传播的卷积网络就是图卷积,我们可以将传播理解为每个节点拿到邻居节点信息,并聚合到自身嵌入向量上。
如上图所示,图卷积网络的输入是表示节点及边的特征向量,经过一系列隐藏层的变换,可以计算出每个节点的深度表征。这样的 Z 再来做预测或生成就会非常有效。直观而言,图卷积将图片的 RGB 像素值替换成节点特征,并且通过边的关系引入了邻居的概念,完成卷积运算。
异构图上的图卷积
阿里 GAS 一共有两种输入图,它们分别用来表示局部信息与全局信息。首先我们看看异构图,一般只要边的种类加上节点的种类大于 2,我们就可以称之为异构图。如下所示闲鱼 Graph 为一个标准的异构图,目前图卷积网络大部分都关注更简单的同构图,闲鱼 Graph 这种异构图很难处理。
从上图我们可以看到,闲鱼 Graph 有商品 I 和用户 U 这两种节点,它们的边为评论 E。如上,e2、e4 和 e5 都是垃圾评论,它们都来自于同一用户。利用图来判断垃圾评论,能利用更多的额外信息,准确率也会比纯文本好得多。
现在回到图卷积,一般图卷积的层级可以分为聚合(aggregation)与结合(combination)两大操作。其中 AGG 会聚合邻近节点的嵌入向量,例如最大池化或基于注意力权重的加权和等。COMBINE 操作会结合自身的嵌入向量与前面聚合的嵌入向量,很多 GCN 方法将 COMBINE 操作放到了 AGG 里面。
在阿里的 GAS 中,研究者使用拼接的方式将信息聚合到边上。比如说如果 GAS 需要将信息聚合到不同的边(即评论)上,那么比较核心的表达式可以写为:
其中 h^l 表示第 l 层边的隐藏向量,它需要聚合 l-1 层自身的特征向量以及与它相连的两个节点向量,聚合的方法是拼接三个向量。W^l 表示该神经网络层所需要学习的权重,σ 表示激活函数。看上去它其实和一般的卷积网络并没有什么差别,只不过输入都是图的各种信息,这样也能基于局部上下文判断该评论是否是垃圾评论。
当然上面只是展示了边的聚合案例,其它节点的 AGG 操作和 COMBINE 运算在原论文中都有详细的介绍。
此外,如果从异构图卷积网络的输入与输出来考虑,阿里研究者说:「对于单个用户节点,输入就是邻近商品节点以及邻近评价边的特征。例如一个用户评论了 10 件商品,那么每一个商品向量拼接上对应评论向量,这 10 个特征向量就可以作为输入,后续图卷积就会对它们进行基于注意力机制的聚合等一系列操作。」
同构图上的图卷积
对于闲鱼 Graph 这种大型图,我们能处理邻近节点这些局部信息,但与此同时还应该能处理全局信息,这样才能有效地减轻用户的对抗行为。为此,模型应该站在所有评论的角度,看看与当前相似的评论都是什么样,它们是不是垃圾评论。
阿里的研究者基于闲鱼 Graph 构建了一种新的 Comment Graph,它是一种同构图,每一个节点为评论内容,节点之间的边为两条评论之间的相似性。因为相似的评论距离非常近,因此模型可以考虑与当前评论相近的评论,从而更好地判断当前评论是不是垃圾评论。
如上所示为一小部分 Comment Graph,如果说局部模型无法根据「add v」判断出意思是加微信,那么放在 Comment Graph 中就非常明确了,它与类似的说法都应该被判断为垃圾评论。
简单而言,Comment Graph 的构建主要分为四个步骤:移除所有重复的评论;通过词嵌入模型为评论生成嵌入向量;利用 KNN Graph 算法获得相似的评论对;移除同一用户提出的评论对,或者同一卖家提出的评论,因为之前的闲鱼 Graph 已经考虑了这些信息。
构建了 Comment Graph,再用图卷积就能抽取节点信息了,因为每一个节点输出向量都聚合了周围节点的信息,它就能代表全局上这一些相似评论的意义。
最后,结合异构图卷积与同构图卷积的结果,再来做个简单的分类就很合理了。
从部署到产品
除了模型与研究上的创新,阿里研究者在工程上也做了很多努力。因为对于闲鱼 Graph 这种超过 10 亿商品与 1 亿用户的节点量,要做训练和推断都是比较复杂的。
目前该系统已经基于 TensorFlow 分布式框架部署在服务端,研究者说:「最开始没有成熟的大规模图框架,我们团队就尝试基于 TensorFlow 的参数服务器框架自己写一个。我们会将图和特征放到参数服务器上,而后最核心的采样与卷积操作都是从上面获取数据,整个就是一个分布式系统。」
当然后来阿里内部研发了大规模图框架 AliGraph,研究团队将系统迁移到 AliGraph 后进一步提升了效率。
此外,如上所述,GAS 的核心思想还能用于广阔的任务。阿里研究者表示:「整个团队将近 30 人,我们的业务主要分为几类:首先是假货或与知识产权相关的业务,其次还有商品的禁限售管控,这两类都属于商品相关;还有另外一块即营商环境相关的业务,比如恶意评价或投诉等买家和卖家交互的业务。」
这一领域的应用很广阔,阿里也希望有更多关注图卷积或安全方面的人才能共同探索新应用。如果你至少有一篇高质量机器学习算法一作论文,在图卷积网络和自监督深度学习有深入研究或非常感兴趣,阿里现在也招聘研究实习生和正式研究者(三年以上 ML 经验),感兴趣的读者可联系 shiping@alibaba-inc.com。
获奖论文:Spam Review Detection with Graph Convolutional Networks
论文地址:https://arxiv.org/abs/1908.10679