Pinterest 推出的基于 GCN 的召回算法 PinSAGE,被誉为"GCN 在工业级推荐系统上的首次成功运用"。最近我也在搞基于 GCN 的召回算法,在学习 DGL 的过程中,发现 DGL 官方案例库中提供一个PinSAGE 的实现,赶紧下载下来,仔细研读了一番,感觉收获满满。尽管不是 Pinterest“原装”的实现,在很多技术细节上还缺乏工业级实现所必需的精雕细琢,但是 PinSAGE 的核心模块,比如基于 Random Walk 的重要邻居采样、Mini-Batch 训练、hinge loss、多模态特征接入、...,也都具备了。另外,DGL 这个 PinSAGE 实现,还演示了如何自定义 neighbor sampling、如何自定义 negative sampling、如何随机游走、...等 DGL 的高级功能,对于深入理解、熟练掌握 DGL 也极具参考价值。
本文是针对 DGL PinSAGE Example 的源码阅读笔记,先简单介绍一下 GraphSAGE 和 PinSAGE 的基础知识,接下来再按“训练数据供应”、"模型各模块"、“训练”三个环节解释其源代码。本文是第一部分。
GraphSAGE 是 Graph Convolution Network(GCN)的一种实现。GCN 是当下非常热门的一项技术,介绍的资料汗牛充栋,可以非常学术和复杂,离散卷积、拓扑空间、拉普拉斯矩阵、谱分解、图上傅里叶变换、......,这样的大词不绝于耳,让人闻而生畏;也可以非常简单,比如这篇知乎回答中,就用非常接地气的“计算朋友圈平均”这样的例子,形象地阐释了 GCN 的核心思想:利用『边的信息』对『节点信息』进行『聚合』从而生成新的『节点表示』。
总之,如果想在推荐领域实践 GCN 或 GraphSAGE,我推荐读 Uber 的这一篇 blog <Food Discovery with Uber Eats: Using Graph Learning to Power Recommendations>就够了。GCN 或 GraphSAGE 的基本原理,用以下公式就能够解释了
多层卷积的流程更可以用下图来直观表示
那么 GCN 相比于传统机器学习算法的优势在哪里?
PinSAGE 是 Pinterest 公司基于 GraphSAGE 实现的召回算法。主要思想是通过 GraphSAGE 得到 pin(Pinterest 中的书签,可以理解为普通推荐系统中的 item)的向量表示,然后可以基于 pin embedding 做 item2item 的召回。PinSAGE 底层算法就是 GraphSAGE,只不过为了将其落地于一个 web-scale 的工业级推荐系统,PinSAGE 做了一系列的改进。PinSAGE 原文,没有复杂的数据公式,都是来源于一线实践的落地干货,满满工业风,强烈建议阅读。为了后续行文的完整性,这里将 PinSAGE 的特点(有很多也并非 PinSAGE 首创)做一个简单介绍:
PinSAGE 中单层卷积就是 GraphSAGE 常见手法,没什么特别的,在第二篇中我们可以直接看代码。
dgl.sampling.PinSAGESampler
中,下面会用到。
训练采用了所谓 unsupervised learning,使用了 margin hinge loss。其中, 是 PinSage 得到的 query item 的 embedding, 是 PinSage 得到的"相关 item“的 embedding, 负采样得到”不相关 item“的 embedding
提到负采样,Pinterest 团队同样注意到 hard negative sample 的重要性。对 easy negative, hard negative 不熟悉的同学,请出门左转看我之前的文章《负样本为王:评 Facebook 的向量化召回算法》。
还有一点是 DGL example 中实现了 ,但是在原论文中却没有提到的,就是如何避免“信息泄漏”
q
与i
之间是实实在在存在边的,q
与i
节点上的信息沿着边相互传统,q
与i
之间的点积自然很大。这样的信息泄漏使模型根本学不到有用的信息。
GCN 和 PinSAGE 的基本原理就简单介绍完毕了。下一章将正式进入源码解析部分,先讲解 DGL PinSAGE Example 中是如何将训练数据喂入模型的。
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏