Angel推荐算法在游戏推荐中的应用

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"导读:","attrs":{}},{"type":"text","text":"Angel是腾讯自研的分布式高性能的机器学习平台,支持机器学习、深度学习、图计算以及联邦学习等场景。Angel的深度学习平台已应用在腾讯的很多个场景中。本次分享为大家介绍Angel推荐算法在游戏推荐中的应用。主要内容包括:游戏平台上的游戏推荐、Tesla平台上的推荐算法、经典算法的线性特点、DeepFM算法的非线性特点、DeepFM应用过程。","attrs":{}}]}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"游戏平台上的游戏推荐","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/26/26b940d43271615781f27467e968c2ab.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这张图看到的是Steam平台上的一个游戏推荐的应用。Steam平台主要是使用标签的推荐方法,它的标签主要是基于用户选择去收集的信息。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/53/53e24436b47a12a3719a9d10d78871e5.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Steam平台的特点在于游戏的内容比较多,深度也比较深一些。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果item比较多,而且使用用户比较多,那就可以通过用户来选择一些标签,能够抽象出其实本来是需要协同过滤ALS的算法计算的因变量的特征向量。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"也就是说,Steam是用人工选择的方式,用集体智慧的方式来抽象出特征向量。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b3/b33da44a5bd61b5b1fda47436dec59a7.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这是Wegame平台上的一个活动。它的推荐算法并没有使用人工抽取标签的方式,而使用了CF算法,以及在用户行为数据的基础上使用Deep FM算法。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Tesla平台上的推荐算法","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/54/543d2c8c63865c0be8350d1b41660a73.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这个是特斯拉平台上的推荐算法。如果你要在外网试用,可以到下面的网址进行试用:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https://cloud.tencent.com","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在试用的过程中,根据wiki文档生成相关的模型,定义相关的参数,就可以使用了。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d9/d9f92e430aaad420d234ee49cd468f13.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"特斯拉平台上也可以使用一些传统的算法,就像CF-ALS算法,可以把Rank、Lambda、Alpha这几个重要的参数,通过一个迭代的方式去选择合适的超参数,就可以使用了。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"经典算法的线性特征","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/78/780f9cbd530396e91d916bf5e515ea99.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果是基于内容的标签推荐,不用集体智慧的抽象,在很多情况下就是一个主观的先行判断。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一种是协同过滤——或基于物品,或基于用户,或者是联合的协同过滤,会存在稀疏矩阵和长尾推荐的问题。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ac/ac7111110e5f4c1d5eb3bcb11c8471c4.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此时会出现一个问题:这是基于物品点击率比较高的协同过滤,但游戏大部分推荐的并不是都是热门物品。如果我们想在经典算法的基础上对一些点击比较少的物品进行推荐,也就是对这些长尾的物品进行推荐,如何去实现呢?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此时可以先做一个聚类,再应用一个协同过滤的算法。如果是经典的算法,有一个很大的核心的问题:怎么去结合用户画像,还有物品画像,参与到DeepFM的建立?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"DeepFM的非线性特征","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f3/f3fdcaf8685c556f8b69c14ce1a022e5.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其实CF算法中输入的是Item Id和 User ID,但是Deep FM在输入UserID和Item Id之外,还可以输入用户或者物品特征。另外也可以对特征进行一个二次交叉:二次标签的特征组合,在本质上还是比较依赖于原来所采集的特征,而且特征组合也仅仅是二次的一个特征表达。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c6/c6404900f4e8c94d72660f1c5b82a5f7.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DeepFM的各种非线性特征,其实比较类似于CNN算法里面,在识别分类过程中所作的权重分解。上图是在CNN的过程中,做的一个热力图。其中CNN是对图像做了一个分类。这个分类依据,是Class之前所做的权重分布,从Deep FM的一部分的模型研发而来的一部分。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/2a/2a3cbf4caabd533443fba10f3564cc49.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deep FM模型的random部分有很多类别特征的。类别特征是用人工选择出来的categorical Features。而Deep FM在自动归类分群的过程中,有一个自动embedding 离散维度的推荐过程。一般我们可以根据误差的自动调整,来调整这个特征的维度组合。类似于推荐过程中自动聚类分群的过程,这就解决了传统算法的问题。如果只输入一个User ID或者是Item ID,就无法使用用户画像和物品画像,进行信息的分群,这样Deep FM就成为了一个可以根据误差进行自动调整,自动聚类分群的推荐工具。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"DeepFM应用过程","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/10/105ac1f58bb5a13ba09f3fc01a54c475.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一种情形则是在Deep FM的过程中进行编码,如果有单列的类别值,如何进行、转换成一个稀疏矩阵?一般来说可以使用手工编码,但这个方式比较低效。这时可以使用Feature Hasher,可以自动把几列类别值转换成一个技术矩阵,把稀疏矩阵和由连续值组成的vector和Hash feature组成vector,合成一个Vector,再把这个Vector作为一个Deep FM的输入,就可以比较方便进行数据计算了。","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ae/aefec1bd3642564ff230489462b8cdf9.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这里面有几个经验:","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Validation AUC与点击率的对应关系:就是说在算法的训练的过程中,会输出一个Validation AUC,这个AUC很大情况下会和点击率有对应关系。在算法的模型训练过程中AUC比较低的话,点击率可能比较高,但是如果AUC比较高,其点击率一般情况下也比较高。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"特定场景下的target 数据产生的模型只能应用到特定场景下的点击率评估:你可能会需要使用到3个采集位置。这三个位置前面的Target数据就是用户在item下面点击数据,如果你运用3个模型,每一个模型应用在3个特定位置下,应该会得到一个更好的效果,而尽量不要把3个位置下的Target的数据合并为一个Target数据。因为这和Deep FM的特征的抽象能力相关,也就是说Deep FM有比较强的特征抽取能力,Target数据会反向传递到特征的采集过程中,会比较依赖于这个特征的场景。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Deep FM 的参数调整比较简单,因为一旦收敛,AUC 的提升跟训练数据集的大小最密且:因为增加更多的训练数据,AUC提升会比较明显一点。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"数据精排需要过滤已拥有,已玩过,并且根据业务需要重排数据,比如重点展示新游,热销等。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"FM 需要输入 user_id 作为训练数据:Deep FM是从FM演化过来的,FM的训练和使用的过程中,一般会是要用User Id做一个输入,真正FM的User ID会在大数据情况下形成一个大的标签。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"FM 的user_id 在大数据环境下会形成很大的标签数据,例如:如果有1000万用户,一台一个输入进去,在水平层这边特征就会比较大。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"FM 的user_id 会形成冷启动的瓶颈,并且导致更新频率受到限制:传统的FM算法和CM算法,是一定要输入User ID的,那样就会产生一个冷启动的问题。也就是说,如果用户没有参与到每天的活动中,其实是没法在预测阶段做输入的。但是Deep FM则不同,如果对自己的特征比较自信,也就是说你的输入除了User ID之外,还有很多特征。因为Deep FM还会有比较强的特征抽取的能力,也就是自动特征组合能力。此时可以不输入User ID,只输入用户的特征或者是物品的特征,就会避免冷启动问题,而且更新频率会更快。","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DeepFM 的特征输入可以替代user_id 的输入:比如在一个活动刚开始没多久,收集了一定数量的数据的情况下,特征是比较丰满的,就可以对用户和User ID,Item ID等没有接触到的数据进行一个预测。","attrs":{}}]}],"attrs":{}}],"attrs":{}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4b/4baa92592d220e5cf3de32ae55947894.png","alt":"图片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"以上就是今天的分享,谢谢大家。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"王培军,腾讯高级工程师,主要负责wegame平台的广告系统和深度学习与系统的结合探索。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文链接:","attrs":{}},{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/jtUh-f9zrTtLdW4zc6w8FQ","title":""},"content":[{"type":"text","text":"Angel推荐算法在游戏推荐中的应用","attrs":{}}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章