技术广义多目标算法探索实践
分享嘉宾:周建斌 58同城 算法高级架构师
编辑整理:吴雪松 小米
出品平台:DataFunTalk
导读: 58部落是面向58同城同镇用户的内容社区,主要产品形态为PGC、UGC的信息流,样式丰富。基于业务和背景,如何提升定义信息流价值内容占比,提升点击率、留存率、互动率等多个目标?今天就和大家分享基于58部落业务目标,特色广义多目标算法的探索过程与实践。主要内容包括:① 58部落业务和背景;② 58部落的业务目标演化;③ 58部落特色广义多目标算法探索过程与实践。
01 58部落业务和背景
首先和大家分享下58部落的业务和背景。
58部落是面向58同城同镇用户的内容社区,它的主要产品形态是PGC、UGC的信息流,其中物料主要有图文、视频、语音等,主要的展现形式则为图中的信息流,可以看到样式是比较丰富的。
58部落的业务使命是全链路打通58所有服务场景,连接用户的多维度需求,从使命也就自然而然的可以联想到部落的定位:部落和58的房产、招聘、汽车、本地生活是共存的关系,但是58部落也有其不同点,和几大业务相互关联,并在其中起到了桥梁的作用。
通过合作,为提升58APP的用户体验而努力。
02 58部落业务目标演化
一开始的时候,58部落的业务目标比较简单,也比较明确,就是要提升信息流的点击率,通常的优化点为单目标的排序。
后来发现,作为一个内容社区来说,不光要考虑点击率,用户的互动、点赞、评论、回复等行为的影响因素会越来越高,产品也会更加关注互动率、点赞率这些指标。此时的目标特点是,虽然有多个目标,但是各个目标的Label是明确的,通常的优化点是采用多目标的排序模型,比如共享底层的ESSM或者基于多专家模型的MMOE等。
而58部落最先要关注的目标是:
- 价值内容占比,产品希望占比提升的同时,点击率也要保持稳定;
- 点击率互动率稳定的同时,保证用户留存率的提升。
这两个目标的特点在于,价值内容占比是一个事后数据统计的数据,很难明确找到目标对应的label;而用户的留存率更是一个长期的目标,很难通过一次点击或者互动去界定。
对于以上这两个目标在58部落的实现,就是我今天想要跟大家探索的主要内容。
03 58部落特色广义多目标算法探索过程与实践
什么是价值内容?在这里定义为和58业务关系紧密的内容,包括标签体系也是按照这样进行划分的。如房、车、招聘、本地生活,定义为价值内容,都是和58的主业务线关系非常紧密的,所以产品把它定义为我们的价值内容。除此,价值内容之外还有如娱乐、心情、社会等其它内容,虽然在58部落上也有很高的用户接收度,但没有把这些划为价值内容。
为什么定这个作为目标呢,这是58部落的定位决定的,就是要作为58各个业务的桥梁,要和各个业务线进行合作,所以为各个业务导流直接决定个对于58大APP的贡献,价值占比这个目标也就应运而生了。
提升价值内容占比,通常有什么方式?
最简单的方式就是通过规则,强行提高价值内容的占比,但是缺点就是对点击率的影响较大。而我们认为理想的切入点是改进排序模型,把价值内容自然而然的排上来。思考点就是,利用跨域推荐的思想,把用户在58其他业务的行为作为目标域行为进行引入,相当于是增加了58其它业务和58部落的内在联系,基于这种假设,希望把价值内容排序上来。
具体做法:
首先介绍下58部落的主排序模型:是DeepFM+Din的融合模型,那如何在此基础上进行优化,快速引入其它业务的用户行为呢?
第一版朴素的想法是,借助Din序列进行特征工程的特征简化,减少了一定的工作量。然后将Embedding中的Concat改为Pooling,方便进行异构实体的Embedding对齐。
第一版的朴素模型也暴露了不少问题,训练慢,也没有什么提升,虽然加了其它业务线的一些特征,但是训练之后,上层的特征权重是非常小的,也就是说整体上基本是不起作用的。针对于这个问题,我们思考了几个可能的原因:
新添加业务行为序列Item,和候选的Item差异较大。因为内容是完全不同的,候选的物品都是部落内容,业务线的点击序列却是各业务线帖子的访问序列。
业务线行为序列的Item非常的稀疏,统计过,20天有大约1亿,但是大部分Id就只有个位数的访问。
其它业务数据量的总和是部落数据量的将近10倍,如果只用部落的一些点击、未点击等数据,数据量是不太够的。
所以,我们的优化方向是尝试找到一个可以跨多个域的Embedding预训练方式,对DIN进行Embedding的初始化,学习到其它业务的一个向量关系。
为了训练学习到跨域的知识,我们调研了很多方式,从阿里的EGES模型获得了一些启发。EGES模型比较适合跨多域的预训练方式,模型的底层是非常常见的的embedding的表结构,通过加上权重的Pooling,最后得到Embedding的表达,使用到了属性值,对于冷启动和稀疏性的处理也非常的友好。
我们根据EGES的构造方法,进行了三个部分的改造:
第一,边缘信息如何获取?每个业务选取2-3个核心属性作为边缘信息。我们不可能对每个业务线进行特征工程,但是每个业务线的核心属性是能够找到的,来表达业务线的核心内容。
第二,参考Airbnb对于Id的处理方式,将几个属性值合在一起,作为新的Id,也可以称为压缩的Id,通过这种方式,可以把上亿的帖子Id,压缩到百万的量级,对应的稀疏性也就缩减了几个数量级。
第三,因为目标是比较明确的,就是为了训练出业务域到部落的关联行为。所以在构造图的时候,就会增加一些跳跃的采样方式,即业务到部落的前一个点也可以新加一次关联,这样在统计用户行为边权重的时候,也就会增加很多业务到部落的权重。
模型的训练就是参照论文,采用DeepWalk的训练方式,首先统计用户行为序列,把所有用户行为对统计频率,频率就作为用户边缘图的权重,接着使用随机的方法在这张图中进行随机的游走,产生新的用户行为序列,可以把新的行为序列想象成word2vec的那种方式,来训练出物品的embedding。另外,这样的好处是,在训练物品Item的时候,也一并把物品的边缘信息的Item也训练出来了,边缘信息的Item是在一个空间里面的,对于使用边缘信息的Embedding和物品的Embedding会非常友好,把这些预训练的Embedding迁移到DNN中也会非常的友好。
模型的版本二,就是用跨域的EGES训练生成的Embedding表示,替换版本一中序列Item Pooling的Embedding表示。通过这种预训练的方式,可以提前学习到业务线和部落的一些关联关系。最终,部落的点击率和价值内容占比都获得了一定的提升。
上线后的结果是价值内容点击占比从12%提升到28%,同时点击率也有小量的提升,满足产品的预设目标的。回顾一些这个方法的思路,模型融合了DeepFM、DIN、EGES,同时也借鉴了Airbnb中Id的处理技巧,使得价值内容占比和点击率获得了提升。其实这个模型的核心总结来看,是一种借助有交叉业务域用户行为提升目标域推荐效果的一种跨域推荐方法,刚好适合推荐的交叉业务域相关的内容,本事上可以理解为增加了相关域的特征,但即便抛开价值内容占比这个目标,对点击率的提升也是有促进的。
第二个产品目标是用户留存率提升,同时点击率互动率稳定,这也是比较特殊的一个目标,因为这个是一个长期的目标,如果说次日留存第二天才能看到。而且用户留存率和很多目标都有一定的联系,比如说内容质量、多样性、互动等等,看似有很多地方需要做,但是如何找切入点呢?
下面是整理的一些思考方法:
想要用户的留存率提升,首先要进行留存分析,也就是通过数据或常识找到可能的特征,但是不能确定其影响程度;然后根据留存的分析进行策略的制定,来对结果进行干预,也就是通过某种方式达成留存分析中的特征,并能参数化;最后将制定的多个策略组合进行优化,用最终目标定义reward和约束,进行在线的参数优化,达到最终目标提升。
具体是怎么做的?这里以信息流的场景为例:
首先通过数据分析,找到有过互动的用户,次日留存率会明显的高过没有互动过的用户,从数据上看是这样的,从常识上也是能理解的。然后2、3的指标是我们发现比较特殊的两点,分别为首访内容类型权重、尾访内容类型权重。比如尾访内容类型权重,就是前一天最后一次访问该内容类型今天又来的访问人数/前一天最后一次访问该类型内容的人数;首访内容权重就是使用前一天第一次访问。
为什么有这样的假设?我们使用了归因链的思想,通常在电商场景的购物车的转化上有应用。浏览了某个物品,同时加购物车,关注了,看了商家,到最后购买了。那行为链中哪个行为是影响用户最终转化的行为?确定这条行为链权重的方法目前来看有四种:
- 直接取用户的最后一次行为,这次行为是造成他购买的原因,但这种方法不是很严谨。
- 平均权重,任务这条行为链上的行为都对最后的购买有贡献。
- 衰减权重,行为链上最近的行为影响最大,逐渐往前进行衰减。
- 马鞍形式的权重,也是在产品上比较认同的。行为链最后一次和首次的用户意图是最强的,中间是最弱的。
通过使用这种归因链进行统计,对于留存来说,用户前一天最后一次访问的内容类型,和前一天第一次访问该的内容类型,对部落的用户留存有一定的相关性。比如某个新用户在58上第一天访问本地资讯类型的内容,会发现该用户过两天再来58的概率会高过看其它类型内容的新用户,所以我们把尾访内容类型权重、首访内容类型权重作为用户留存分析的两个重要特征。
最后一点是多样性,多样性在一定程度上会影响UV的转化率,但是其也会影响点击率,多样性太高或者太低,和点击率不一定成线性关系。
对于留存分析,我们将互动率、尾访内容类型权重、首访内容类型权重、多样性作为留存分析比较重要的四点。
有了这四个参数,如何来制定优化策略呢?
这里相当于定义了一种重排序的策略,通过重排的方法,照顾上述的四个因素,相关性分数=点击率预估分数+a 互动率预估分数+b 首访内容类型权重+c*尾访内容类型权重;有了相关性分数,参考Hulu laming老师的多样性dpp算法,使用多样性调节因子θ,以此调节相关性和多样性的程度,这里也就相当于定义了一个四个超参数(a,b,c,θ)的重排序算法。
定义了策略方案,我们需要定义一个评估或者说目标回报,因为目标是提升用户的留存率,所以把次日留存率权重设置为5,点击率提升率,互动率提升率也放到回报里面;同时也把点击率提升率、互动率提升率、次日留存率提升率作为约束放在里面,对于负向的提升也是有一定容忍的,因为目标是提升用户的留存率,所以次日留存率提升率是要大于0的。这样问题的转化就变成了找到使得reward最大的(a,b,c,θ)的组合方式。
如何找到这种组合方式?
设想如果是单参数的,可以使用abtest的方式,把参数都试一遍,找最优的参数;但如果是多参数,使用abtest的方式,实验数量要指数增长,会浪费大量流量,针对于这个问题,我们找到一种调参方式,使用CEM自动调参,优点就是可以直接优化线上目标,实现长期的迭代。
CEM算法是如何实现的呢,这里简单介绍下:
首先CEM是一个在线的自动调参方法,会使用线上数据快速对参数进行评估,进而实现自动化参数调节。首先,我们拍一组比较合适的参数作为初始化参数,我们这里使用的是高斯分布,根据均值或者方差会对参数做一个采样,然后采样出的多组参数在线上进行等比例的分流实验,两天后观察各个流量的收益,也就是reward,然后对reward进行从高到底进行排序,截取top-k的reward进行评估,同时参数也会进行相应的裁剪,最后将选出top-k的参数进行聚集。下面同样的重复这个过程,每次进行迭代的时候,会给方差加上一个量值,防止函数过早的收敛到局部的最优解。
具体实现:
使用线上大概10%的流量进行探测,参数采样是给定初始点和标准差,采样数量为15个,裁剪top5,每两天进行一次,因为优化目标是留存,所以在第二天的时候,可以知道用户留存的一些指标。
如图中右侧坐标图,最开始的时候参数范围可能比较大,但是随着每次采样并进行top5的裁剪,参数会收敛到比较小的区域,但是这个区域并不一定是稳定的,会随着迭代有不停的波动,可能是和正常的业务流量波动是有关系的,所以说参数调整不是一蹴而就的,调整完就放在那里不动的。最好就是常年有流量探测在线上,不停探测最优的权重。
有几个需要注意的点:
- 探测流量的大小,如果流量太小,结果置信度会有影响。
- 指标的波动性也会影响结果,所以说对于一些比较小的指标如互动率,比如几个回复、几十个回复,可能就会对互动率这个指标产生比较大的影响。
- 我们会使用一些规则,如果指标的波动性太大,会进行剔除,以此增加鲁棒性。
经过差不多10轮迭代,使得用户次日留存提升了1%,同时点击率和互动率保持稳定,在这之中�
- 原文作者:知识铺
- 原文链接:https://geek.zshipu.com/post/%E4%BA%92%E8%81%94%E7%BD%91/%E6%8A%80%E6%9C%AF%E5%B9%BF%E4%B9%89%E5%A4%9A%E7%9B%AE%E6%A0%87%E7%AE%97%E6%B3%95%E6%8E%A2%E7%B4%A2%E5%AE%9E%E8%B7%B5/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com