Press "Enter" to skip to content

推荐系统难精准?试试这个图学习模型

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

在“精准推荐者得民心”的今天, 推荐系统 已成为各大互联网公司的标配。但由于现实中很多数据是非欧氏空间生成的(例如,社交网络、信息网络等),一些复杂场景下的业务需求很难通过协同过滤等基于历史行为挖掘用户或产品相似性的传统算法来满足。图神经网络作为一种约束性较少、极其灵活的数据表征方式,在深度学习各主要领域中崭露头角,一系列图学习模型涌现并得到越来越多的应用。

 

01

 

网易云在推荐领域的探索

 

 

作为国民级的音乐App,网易云音乐很久之前就将定位从传统的音乐工具软件转移到音乐内容社区,致力于联结泛音乐产品与用户,打造最懂用户的音乐 App。在音乐内容社区中,直播可以说是用户参与度极高的场景了,云音乐内部投入了大量的人力物力以求将匹配度更高的主播推荐给用户,但仍然面临多重严峻的挑战。

 

如何破解历史评论行为稀少的用户冷启动问题

 

众所周知,推荐系统的整体框架主要包括召回、粗排和精排3个部分。其中,最底层的召回模型具有举足轻重的作用,而成功的召回推理需要依赖充足的历史数据。但在云音乐的业务场景中,通过站内广告看到直播推荐的用户很大比例是直播功能的新用户,即没有产生过观看直播行为数据的用户。如何向这类数据稀疏的用户推荐合适的内容成了亟待解决的难题,这类问题也通常被称为冷启动。

 

 

大规模图模型如何训练

 

云音乐现有计算资源已全面实现容器化部署,对于各个业务团队来说,计算资源都是有限的,需要以最高效合理的方式利用有限的资源。如何在有限的分布式资源调控策略下低本高效地完成大规模图神经网络的模型训练,成为必须攻克的难题。

 

PGL图神经网络助力推荐场景落地

 

为了解决以上问题,网易云音乐的研发团队调研了大量开源方案,最终选择了对大规模图训练更加友好的百度 飞桨分布式图学习框架PGL ,作为云音乐的基础框架。

 

基于PGL的行为域知识迁移解决冷启动问题

 

云音乐直播场景的新用户中,有很多在音乐、歌单、Mlog 等业务中产生过较丰富的历史行为,能否通过将这部分历史行为知识映射到直播领域,来解决“行为”数据不足的问题呢?

 

带着疑问,云音乐引入了图模型结构,以多种不同类型的实体(如歌曲、DJ、Query、RadioID 等)为节点,通过用户与主播、用户与歌曲、Query与主播等历史行为关系,构建了一张统一的图关系网络。

 

然后,基于飞桨图学习框架 PGL对图模型进行训练。先采用 DeepWalk、Metapath2Vec、GraphSage等模型学习出足够强大的Graph Embedding表示来建模实体ID;再通过向量召回,将用户在歌曲、Query等处的行为迁移到主播领域,达到召回合适主播的目的。

 

 

02

 

基于PGL通用的分布式能力进行训练

 

云音乐的数据规模非常庞大,数据关系即使经过裁剪也高达亿级别以上。在常用的硬件资源配备情况下,此等量级规模的数据早已成为某些开源的图神经网络框架的瓶颈,需要使用极其昂贵的计算资源才能解决。对于数据规模必将持续增大的云音乐来说,相较于使用什幺类型的模型,能否在这种数据规模下训练出模型才是优先要考虑的关键问题,也是网易云音乐与PGL成功牵手的关键因素!

 

百度飞桨深度学习平台PaddlePaddle 2019年开源的 分布式图学习框架PGL ,原生支持图学习中较为独特的分布式图存储(Distributed Graph Storage)和分布式采样(Distributed Sampling),可以方便地通过上层Python接口,将图的特征(如Side Feature等)存储在不同的Server上,也支持通用的分布式采样接口,将不同子图的采样分布式处理,并基于PaddlePaddle Fleet API来完成分布式训练(Distributed Training),实现在分布式的“瘦计算节点”上加速计算。这些能力对云音乐内容社区直播推荐遇到的训练问题来说,极具魅力!

 

实验对比显示,在主播推荐场景采用图计算带来有效观看大幅提升,尤其在新用户和新主播冷启动上引入其它域数据后有了明显提升。

 

 

在应用经典模型的基础上,引入更复杂的模型结构,比如Attention机制,以期达到更好的实体建模效果。

 

利用PGL的分布式能力,减少数据阈值,引入更多领域的行为数据、行为实体。

 

直播业务之外,尝试在更多场景利用图神经网络,例如:

 

搜索Query归一化:通用引入Query共性行为信息,联合Text Embedding,Query词归一化映射;

 

MLOG向量化召回:利用Graph Embedding,联合内容特征、行为特征,统一MLOG Embedding召回。

 

在网易云音乐内部强化平台化能力输出,将PGL封装为组件,无代码修改的模型训练,应用门槛进一步降低。

 

03

 

能力领先的飞桨PGL图学习框架

 

完整覆盖主流模型和场景

 

飞桨PGL已经在搜索、广告、信息流推荐、金融风控、贴吧、用户画像、智能地图等多个场景全面落地,可支持百亿巨图场景。飞桨PGL模型完备,多类别主流模型和自研特色模型,涵盖了社交网络、、生物计算等多种场景。

 

 

 

HeterGraph支持异构图

 

PGL通过HeterGraph接口支持了异构图,即支持图中的节点、边分别具有不同的类型。比如在网易云音乐中就支持了包括用户、主播、音乐、搜索词等异构节点,以及关注、收藏、查询等异构边关系。在此基础上,异构图的message passing支持根据边类型来对邻居消息进行聚合。

 

动态图调试更简单更灵活

 

基于最新开源的PGL V2.0版本,PGL全面支持动态图机制,动态图具有所见即所得的优点,方便初学者调试。如下所示,仅需几行PGL代码即可实现图卷积网络:

 

import paddle
import pgl
edges = paddle.to_tensor([[0, 1], [1, 2], [3, 2], [1, 3]])
feat = paddle.randn([4, 128])
g = pgl.Graph(edges, node_feat={"h": feat})
out = pgl.nn.GCNConv(128, 10)(g, g.node_feat["h"])

 

除了动态图机制,PGL也保留了原有的静态图机制。动静结合的双机制,使用户在获得动态图调试方便的同时,仅需通过简单的代码修改就能支持静态图,并能方便高效的使用分布式训练以及线上的部署能力。

 

支持百亿级别大图训练

 

飞桨PGL具有高可扩展性,最大支持百亿级别大图训练,在网易云音乐中就支持了海量的用户行为数据。飞桨开源核心框架的分布式能力为PGL提供坚实的底座,它可以提供两种常见的并行训练实现架构,即中心化的参数服务器架构、去中心化的集合通信架构。其中参数服务器架构帮助PGL仅通过几行代码即可轻松完成配置,具备通用的高性能训练能力。飞桨框架 个性化推荐任务中的模型由于需要保存的海量稀疏特征对应的模型参数,通常采用参数服务器架构。 这是因为参数服务器架构可以对模型参数进行分布式保存,尤其对于存储超大规模模型参数的训练场景十分友好。 神经网络模型的前向、后向放在设备中执行,模型的更新部分放在参数服务器一端。

 

 

飞桨从开源伊始就重视分布式能力的构建,基于百度内部大规模业务实践的打磨,形成一套简单易用的高层分布式接口Fleet API。Fleet象征一个舰队中的多只双桨船协同工作,集成高性能、高扩展的能力。在易用性方面进行了精心的优化,从单机到多机,仅需三步修改即可开启分布式训练,示例如下:

 

import paddle
import paddle.distributed.fleet as fleet
import paddle.fluid as fluid
import paddle.distributed.fleet.base.role_maker as role_maker
# step1 初始化
role = role_maker.PaddleCloudRoleMaker()
fleet.init(role)
...
# step2 分布式优化器
optimizer = fluid.optimizer.Adam(learning_rate=0.0001)
optimizer = fleet.distributed_optimizer(optimizer, fleet.DistributedStrategy())
optimizer.minimize(model.loss)
...
# step3 第三步:开始训练
if fleet.is_server():
    fleet.init_server()
    fleet.run_server()
else:
    fleet.init_worker()
    # model train

 

另外,DistributedStrategy作为用户配置并行策略的统一入口,支持大规模异步训练、自动混合精度、深度梯度压缩、重计算、梯度累计、计算算子自动融合、通信梯度智能融合以及自动并行等功能,极大的满足了研究人员日常训练的加速需求。飞桨框架的最新版本同时也开放了能够面向高级编程用户的分布式底层通信接口paddle.distrbuted,使用户能够自主构建诸如自动并行、模型并行等高级并行训练功能。

 

在近期发布的飞桨框架2.0版本,创新性地实现了业界首个通用异构参数服务器架构。该架构支持异构硬件自由混布、数据独立存取传输、流水线机制和多种通信方式组合等多项特色技术,一举解除了传统参数服务器必须严格使用同一种硬件款型训练节点的枷锁,训练任务对硬件型号不敏感,可以同时使用不同的硬件进行混合异构训练,如CPU、v100、P40、K40、昆仑芯片等。目前在真实业务模型上,使用单台 GPU / 昆仑芯片机器 + 10 台 CPU 机器,可以完成千万数据千亿参数点击率模型的分钟级训练。

 

在严格的内部测试验证中,异构参数服务器架构对于大规模稀疏特征特点的模型训练场景,可以大幅提升训练效率,尤其是针对带有复杂计算网络的模型训练,训练速度可以提升65%。在硬件成本方面,使用异构参数服务器架构时,在2 GPU节点+2 CPU节点的组网环境下,训练速度就可以比肩传统参数服务器架构在4 GPU节点组网上所能达到的训练速度,但是硬件成本却可以大大降低,让用户的硬件资源真正做到物尽其用,实现训练效率最优化。

 

 

03

 

写在最后

 

图学习作为通用人工智能算法之一,势必成为这个时代新的基础设施,赋能各行各业,助推智能经济腾飞。飞桨深度学习平台及其PGL框架将持续开源开放,欢迎开发者们使用并贡献你的奇思妙想。期待有志之士加入开源社区,一同共建未来。

 

更多资料请关注

 

PGL图学习框架Github代码仓库:

 

https://github.com/PaddlePaddle/PGL

 

飞桨推荐系统:

 

https://github.com/PaddlePaddle/paddlerec

 

飞桨分布式:

 

https://www.paddlepaddle.org.cn/tutorials/projectdetail/1499143

 

https://fleet-x.readthedocs.io/en/latest/

 

飞桨深度学习框架Github代码仓库:

 

https://github.com/PaddlePaddle/Paddle

 

对于想要了解图神经网络及其分布式应用的小伙伴,可以围观PGL团队倾力开发的图神经网络课程,带你七天高效入门:

 

https://github.com/PaddlePaddle/PGL/tree/main/course

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注