Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于SPARK的大规模网络表征算法及其在腾讯游戏中的应用

基于SPARK的大规模网络表征算法及其在腾讯游戏中的应用

作者头像
腾讯云开发者
发布于 2024-05-29 04:20:08
发布于 2024-05-29 04:20:08
2140
举报

👉目录

1 背景介绍

2 算法设计

3 应用场景

本文介绍了腾讯游戏社交算法团队研发的能够处理百亿级大规模图数据的分布式网络表征算法,及其在多个游戏业务场景落地应用,并且取得明显的实际业务效果提升。

01、背景介绍

大部分数据都可以用图来表示。如图1所示,在社交网络中,用户可以当做网络中的节点,用户之间的社交关系形成网络中的边;在网页链接网络中,网页形成网络中的节点,网页的超链接构成了网络中的边;在用户购买物品网络中,用户和物品分别形成网络的节点,用户购买物品的行为构成了网络的边。

图1:图数据

在游戏中,我们有大量的图数据,包括游戏中的好友关系、玩家互动关系、玩家与道具的关系等等。不同的图数据代表不同的信息。比如,平台好友关系网络是熟人关系网络,游戏好友关系网络是游戏中的陌生人网络,对局后的点赞行为形成的网络体现了玩家的游戏水平,道具购买网络展现了玩家的付费偏好。在这些图数据上的任务,通常有两种:链路预测和节点分类。在链路预测任务中,我们要预测两个没有连边的节点是否可能构建连边,比如好友推荐任务;在节点分类任务中,给定一些节点的类别,我们要预测其他节点的类别,比如预测玩家是否流失或付费任务。

解决上述图数据上的任务,可以通过机器学习的方法,也就是把节点在图数据中的特征输入到机器学习模型中(比如,XGBoost 或者 MLP),同时结合训练样本,从而得到一个预测模型,如图2所示。

图2:图数据上的任务

网络表征算法(Network Embedding)是目前使用比较广泛的提取图数据上节点特征的技术。这个技术可以为图上的所有节点计算一个指定长度的特征向量,使得在图上距离较近的节点,在特征向量空间中的距离也比较近。这些算法通常可以粗略地分为两种类型:基于随机游走的算法和基于矩阵分解的算法。如图3所示,基于随机游走的算法首先生成大量的随机游走路径,然后最大化节点在路径序列中的似然相似度;基于矩阵分解的算法则将节点的相似矩阵分解为节点特征向量的点乘。

图3:网络表征算法的两种类别及其优化函数

然而,在数据量较大的图数据中,现有的网络表征算法具有较大的计算困难,主要是由于图数据可能较大而在单机内存中不能存储,并且计算算法较为复杂而需要较长的计算时间。另外,在公司中,我们大量的图数据都存储在分布式数据库 TDW。因此,我们创新性地提出采用分布式计算框架 Spark 来计算网络表征。

02、算法设计

为了克服图遍历和模型训练中造成分布式计算中大量的通信代价,我们提出了基于递归图分割的分布式网络表征算法。这个方法,首先是运行递归图分割,其中每次迭代计算中的图分割将一个图分割成多个子图,如图4所示。这些子图主要有两类:基于同一个分区构建的 induced subgraph,和基于跨不同分区的边构建的 border subgraph。如果 border subgraph 的节点数比较多,则我们继续对 border subgraph 进行分割,直到每个子图的节点数量比较近似。

图4:图分割将一个图 G 分割多个 induced subgraphs 和一个 border subgraph

于是,我们可以对图3中给出的优化函数进行改写。对于基于随机游走的算法,优化函数可以分成两部分,一部分是同一个分区的节点之间的似然相似,另一个部分是不同分区的节点之间的释然相似。

相似地,基于矩阵分解的算法的优化函数也可以类似地分解成两部分:

那么,这也就是暗示了我们可以通过每个子图上单独计算网络表征,然后通过融合这些子图的网络表征,可以近似地得到满足优化函数的网络表征。

如图5所示,最终的算法包括三个阶段:

(1)采用递归图分割,将图数据分割成多个大小比较相近的子图;

(2)对每个子图单独运行已有的网络表征算法,我们采用了 node2vec;

(3)将所有子图的表征进行融合,得到每个节点最终的表征。

图5:分布式网络表征算法

03、应用场景

我们已经将本方案的分布式网络表征算法应用到超过5款游戏的多个业务场景中,包括好友推荐和道具推荐。其中,这些游戏来自多个不同的品类,并且大部分游戏的网络边数量超过百亿。表1展示了算法在多个游戏社交网络的运行时间。

游戏

点数 (亿)

边数 (亿)

运行时间 (h)

Game A

2+

80+

10

Game B

7+

200+

16

Game C

6+

300+

21

Game D

1+

200+

23

Game E

0.04

2+

5

Game F

0.05

4+

7

表1:分布式网络表征算法在多个游戏社交网络的运行时间

同时,图6展示了分布式网络表征算法在多个业务场景中的应用效果。

图6:分布式网络表征算法在多个业务场景中相对原有方法的相对提升幅度

团队介绍

腾讯游戏社交算法团队 (https://socialalgo.github.io/)致力于研发高效且有效的社交网络智能算法和分析技术,挖掘海量丰富的图数据,构建高性能的图模型,服务于大量游戏的多样社交场景,旨在提升用户留存和游戏收益。团队负责的场景包括好友推荐、社群推荐、社交传播、社交营销、社交分析等围绕大规模社交网络的应用。团队研发的技术已落地应用于30+款腾讯游戏,包括和平精英、王者荣耀、英雄联盟手游、QQ 飞车手游、元梦之星、金铲铲之战等游戏。目前,团队已获得多项腾讯公司级荣誉奖项,包括卓越运营奖、业务突破奖、腾讯专利奖、腾讯代码奖、犀牛鸟精英人才计划优秀学生和导师等,并且在国际前沿学术会议和期刊上已发表了20+篇论文。

相关论文资料

[1] Wenqing Lin: Large-Scale Network Embedding in Apache Spark. KDD 2021

[2] Wenqing Lin, Feng He, Faqiang Zhang, Xu Cheng, Hongyun Cai: Initialization for Network Embedding: A Graph Partition Approach. WSDM 2020

-End-

原创作者 | 林文清

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】《微信小程序与云开发从入门到实践》032-界面交互相关API的使用
在数字化时代,微信小程序作为一种新兴的应用形态,凭借其轻便、易用的特性,迅速成为了各类企业和开发者的重要工具。为了提升用户体验,微信小程序提供了丰富的界面交互API,使开发者能够更灵活地设计和实现各种交互效果。
愚公搬代码
2025/01/23
3060
uni-app入门教程(6)接口的扩展应用
本文主要介绍了接口的扩展应用:设备相关的接口包括获取系统信息、网络状态、拨打电话、扫码等;导航栏的动态设置;下拉刷新和上拉加载更多的实现;用条件编译实现小程序、APP等多端兼容;提示框、Loading、模态弹窗等的交互反馈。
cutercorley
2021/01/05
1.4K0
uni-app入门教程(6)接口的扩展应用
微信小程序权限接口
  部分接口需要经过用户授权统一才能调用。我们把这些接口按使用范围分成多个scope,用户选择对scope进行授权,当授权给一个scope之后,其对应的所有接口都可以直接使用,此类接口调用时:
别团等shy哥发育
2023/02/25
2.9K0
微信小程序权限接口
微信小程序快速入门开发指南(二)
微信小程序的程序语法格式类似json格式,服务器也要采用结果以json的形式返回给小程序,这种格式需要对特殊字符进行编码,如下举例一个json字符串。
初九之潜龙勿用
2024/06/20
1850
微信小程序快速入门开发指南(二)
微信小程序获取用户收货地址与指纹验证接口(安卓和iphone)
wx.chooseAddress(Object object)获取用户收货地址,此接口调用的是微信的收货地址。微信收货地址不同于微信设置的省和市地址,它默认是不存在的。在某个小程序中,当用户第一次调用wx.chooseAddress(Object object)接口时,会被要求填写微信收货地址;当用户第二次访问wx.chooseAddress(Object object)接口时,则可以看到自己以前填写的收货地址。这里说的第二次可以是不同的小程序,例如用户在访问A小程序时填写了微信收货地址,则用户在访问带有wx.chooseAddress(Object object)接口的B或者C小程序时都可以看到以前填写的微信收货地址。
别团等shy哥发育
2023/02/25
2.6K0
微信小程序获取用户收货地址与指纹验证接口(安卓和iphone)
群用户通过微信小程序可以更好地协作了
  今天,小程序向开发者开放了群ID的接口能力。简单地说,就是当你把小程序分享在群聊中,被点击后开发者可获取群ID和群名称,也方便更好地针对群场景提供个性化服务。不同的群有各自的群ID,那么这个新能力开发者该怎么使用? 群用户间可以更好地协作 大家都知道,小程序可以方便地在群聊中分享,但开发者难以识别不同用户的点击路径。 现在,通过最新的接口能力,开发者可以通过群ID判断用户是否来自同一个微信群,同一个群内的用户之间可以更好地使用小程序进行协作,例如共同编辑文档、协同合作、共同点餐等等。 提供更个性化的服
ytkah
2018/03/06
1.5K0
微信小程序常用组件
https://developers.weixin.qq.com/miniprogram/dev/component/map.html
wsuo
2020/09/22
1K0
微信小程序地图与位置相关操作
map组件的两个属性longitude和latitude表示当前地图中心的经度和纬度,和当前用户所在位置的经度和纬度是不同概念,无直接关系。例如,某然在广东省东菀市,但是可以打开北京天安门为中心的一幅地图,map的longitude和latitude是用来控制地图中心的参数,并不是用户实时的地理位置。
别团等shy哥发育
2023/02/25
2.7K0
微信小程序地图与位置相关操作
微信小程序开发之多图片上传+服务端接收
  业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存。
追逐时光者
2019/08/28
2.3K0
微信小程序开发之多图片上传+服务端接收
微信小程序展示弹窗的几种方式
https://img-blog.csdnimg.cn/20200824143538219.gif#pic_center
peng_tianyu
2022/12/15
5.4K0
微信小程序展示弹窗的几种方式
微信小程序发起请求
一.示例代码 wx.request({ url: 'test.php', // 仅为示例,并非真实的接口地址 data: { x: '', y: '' }, header: { 'content-type': 'application/json' // 默认值 }, success(res) { console.log(res.data) } }) 注意:如果进行本地测试请在右上角详情>本地设置>不校验合法性打钩 二.参数 微信官方解释 参数 属性
小小咸鱼YwY
2020/06/19
9080
微信小程序视频基本操作
  小程序提供了wx.createVideoContext(string id,Object this)、wx.chooseVideo(Object object)、wx.saveVideoToPhotosAlbum(Object object)等接口对手机视频进行操作。
别团等shy哥发育
2023/02/25
2.9K0
微信小程序视频基本操作
微信小程序获取用户信息(wx.getUserInfo)
微信小程序获取用户信息API:wx.getUserInfo(Object object)
德顺
2019/11/13
2.6K0
微信小程序获取用户信息(wx.getUserInfo)
10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)
10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)
度假的小鱼
2023/11/30
4110
10-微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)
小程序开发-页面事件之上拉触底实战案例
在实现这个小程序实战案例的过程中,我们遵循了以下六个核心步骤。这些步骤不仅涵盖了基础的开发流程,还融入了一些优化技巧,以提升用户体验和性能。
小白的大数据之旅
2025/01/10
1240
小程序开发-页面事件之上拉触底实战案例
微信小程序-常用弹窗
showToast showModal showLoading showActionSheet 页面结构文件: <!--index.wxml--> <button bindtap="onShowToast">showToast</button> <button bindtap="onShowLoading">showLoading</button> <button bindtap="onShowModal">showModal</button> <button bindtap="onShow
程序员NEO
2023/05/22
5870
微信小程序-常用弹窗
微信小程序路由跳转
保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。
小小咸鱼YwY
2020/06/19
1.3K0
小程序拍摄或者在相册中选择图片
wx.chooseImage(Object object) :从本地相册选择图片或使用相机拍照。
德顺
2019/11/13
6560
如何在小程序中实现文件上传下载
在如何实现小程序登录鉴权这篇文章中,我们实现了小程序的wx.request请求操作,除了request之外,小程序还有文件下载wx.downloadFile和文件上传wx.uploadFile请求接口。那么这两个请求如何使用呢?请看本篇文章。
六个六
2018/11/13
23.5K4
如何在小程序中实现文件上传下载
小程序的各种弹窗(微信小程序弹窗怎么关)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125413.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/02
4.4K0
推荐阅读
相关推荐
【愚公系列】《微信小程序与云开发从入门到实践》032-界面交互相关API的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档