PinSage是工业界应用图神经网络完成推荐任务的第一个成功案例,其从用户数据中构造图(graph)的方法和应对大规模图而采取的实现技巧都值得我们学习。PinSage被应用在图片推荐类Pinterest上。在Pinterest中,每个用户可以创建并命名图板(board),并将感兴趣的图片(pins)添加进图板。推荐系统的任务是为每个图片生成高质量的表示向量,并据此为每位用户推荐其可能感兴趣的图片。
1.PinSage的模型设计和实现细节
PinSage的输入数据是一张根据用户行为和各类特征生成的大规模网络(graph)。网络的构造主要包含两个步骤:第一步是网络结构方面,如何定义边;第二步是节点特征方面,各种复杂的特征如何表示。
- 对于第一步,Pinterest的应用场景很自然地对应一个二部图,一部分节点是图片(pins),另一部分节点是用户定义的各种图板(boards),二部图的边对应着图片被添加进图板。通过这种方式,全体用户的行为被一个巨大的二部图表示出来。
- 对于第二步,每个图片对应多种特征,包括图片本身的视觉特征、与图片内容相关的文本标注信息、图片的流行度、图板的文本标注信息等。PinSage利用深度神经网络、预训练的词向量等技术将这些特征整合成节点表示向量。值得注意的是,上述的特征提取器是所有图片共享的,因此对于那些没有出现在训练过程中的“新图片”来说,我们也可以利用训练好的特征提取模型来计算该图片的向量表示。换句话说,PinSage不需要在这个巨大的二部图的全图上进行训练,只需要在一个规模较小的子图上进行训练即可。
PinSage基本遵循GraphSAGE的框架,但在以下三个地方有独特的设计:
- 每个节点领域的定义。由于网络规模巨大,如果按照GraphSAGE那样将每个节点的所有邻居节点特征进行融合,则计算量太大。PinSage通过随机游走的方式从每个节点的K度邻居中抽取出T个重要的节点,其中的“重要性”定义为从目标节点出发的随机游走访问到邻居节点的概率。
- aggregate操作的具体实现。具体来说,以加权平均的方式来实现aggregate操作。这里,每个邻居节点的“权重”即为其相对于目标节点的重要性。这一操作为模型效果带来了46%的提升。
- 训练过程中负样本的选取。在训练过程中,PinSage优化一个最大间隔函数(max-margin loss),尽可能地使正样本和负样本的差距大于预设的间距。出于效率的考虑,PinSage为每个正样本抽取500个负样本。不过500个负样本对于庞大的图片集(200万的规模)来说太过渺小,抽取出的负样本与正样本有很大概率完全不相关,这使得学习的过程过于简单,模型的训练效果不好。PinSage采用课程学习(Curriculum Learning)的方式进行训练,在每轮训练中选取难以分辨的负样本。这一操作为模型效果带来了12%的提升。
基于图的机器学习任务主要有:点分类、边预测和图分类3大类。记为节点 i 最终的融合特征,下面分别是这三类任务具体形式化的例子。
- 点分类:
- 边预测:
- 图分类:
除了PinSage模型,图神经网络目前在工业界的应用还不多。不过,学术界对图神经网络在多个领域中的应用已经做出了一些探索,表3-2列出了一些代表性的应用论文,供感兴趣的读者继续探索。
另一个与图神经网络技术十分相关的话题是网络表示学习(Network Representation Learning),也就是为图(graph)中每个节点生成一个固定维数的向量表示,使得节点在图上的临近关系可以通过向量距离表现出来。感兴趣的读者可以进一步思考网络表示学习技术和图神经网络的关系。