Code前端首页关于Code前端联系我们

个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

terry 2年前 (2023-09-27) 阅读数 65 #数据结构与算法
个性化推荐如何满足用户的口味?微信的“看看”人工智能技术就做到了这一点。用户可以通过关注公众号、转发朋友圈、聊天等渠道阅读文章。除了上述方法外,用户很难通过其他方式找到更有趣的文章。因此,请查看我们的个性化建议。我们利用用户在微信上的阅读、关注、分享等信息,结合最新的深度学习算法,推荐最符合用户兴趣的文章。除了文章之外,我们还触达了腾讯视频、企鹅、垂直短视频等内容,极大丰富了推荐内容的多样性。

2。看一下整体架构

看一下整体架构如图:个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

和大多数推荐系统一样,我们底层使用的是经典的召回、粗排序、精排序。在层结构中,每个部分处理的候选集的数量逐层减少。要点是在实时性能和影响力之间做出权衡。其特点是在细粒化后,添加了含量不均匀的混合层。这主要是因为不同的内容来源有不同的点击率和优化目标,因此很难进行比较。目前正在混合订单侧实施强化学习模型,以优化长期回报并实现快速实时反馈。

3。基础数据和召回率

推荐系统的上限是数据。简单来说,推荐系统根据用户的行为,从数千万个候选集中为用户选择最好的topN结果。对数据的评估越准确、越详细,数据的表现力就越强,推荐也就越准确。总体而言,数据可以分为用户数据和内容数据。

通过基础数据,我们可以从多个维度判断用户需求,包括用户的一级品类兴趣、二级品类兴趣、兴趣关键词、主题分布等。同时,在embedding调用下,我们使用深度网络对图像进行多级嵌入。

内容数据一般是指与所有文档相关的数据。从业务角度来看,内容数据可以分为图片、视频、新闻、短视频、人工干预等几大类。每个业务都是一个独立的池,具有独立的数据清理和质量评估流程。甚至还有一个独立的分类系统。内容数据从来源上分为公众平台文章、企鹅文章、外链相关文章、短视频和短视频。从时间上来看,内容数据分为实时数据、15天全量数据、高质量历史数据。

每个文档都有丰富的基础属性,包括一级分类、二级分类、标签、实体词、主题、展示数、点击数、质量分、色情分、垃圾分。我们还创新性地提出了人物排名算法,利用每个人的社会影响力将每个人的社会影响力反馈给文章,从而形成文章的权威分和精英分,可以更好地提炼出高质量的文章。

Recall的主要任务是从庞大的百万级候选池中选出万级候选池进行粗排序。回忆主要分为兴趣画像、协作、公众号、社交回忆等几大类。兴趣画像回忆主要基于主/次类别、主题、地区、关键词等。包括回忆。协作回忆包括元素协作、内容协作、用户协作等;回调公众号包括后续公众号,扩展回调公众号。为了增加多样性,除了上述回调之外,还有一些尝试和冷启动回调来探索用户兴趣。

4。排序

排序基本上由两个阶段组成:精排序和粗排序。两者的主要区别在于候选池的大小不同。粗排序有 10,000 个级别的输入候选集,而精排序只有 1,000 个级别。候选集数量的差异决定了粗排序需要更多的性能。因此,在特征侧只能选择少量粗粒度、高分化的特征。在模型页面上只能选择线性或低复杂度模型。深度模型。粗排序的其余部分与精排序类似,因此我们在这里重点讨论精排序。

精排序阶段需要对粗排序候选组中的 ItemList 进行评分。该分数基于每个用户对候选文章被点击可能性的预测,即 Ctr 估计。鉴于业务中的日常活跃用户数量巨大,这些巨大的日志可用于训练模型来对偏好进行建模。

在LR/FM大规模Ctr预测系统中,逻辑回归因其简单性、易扩展性和可解释性成为早期使用最广泛的模型。 Ctr预测模型的公式如下: 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

我们的第一阶段模型采用大规模分布式LR,使用自主研发的PanguX分布式训练平台,通过手动特征设计提取亿级特征进行离线训练。然而LR是一个比较强的记忆模型。特别是,它记录了每个功能之前的点击率。泛化误差较大,需要大量的人工特征设计来提高泛化能力。而且,这种线性模型的特征在模型中是相互独立的,无法学习到训练集中没有出现的交叉信息。因此,我们在第二阶段改用FM(因式分解机)。该模型可以通过很少的特征设计来学习特征的嵌套表示,从而学习训练集中从未出现过的组合特征。 FM的模型公式如下: 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

虽然理论上FM能够对高阶特征进行组合建模,但由于计算复杂度和参数大小的限制,我们通常只使用二阶特征。高阶属性组合当然也可以用多层神经网络来解决。

Wide&deep

Google 2016年提出的wide和deep模型开启了深度学习在点击率预测领域的大规模应用。该模型由两部分组成:线性模型

  • DNN 部分和通过叉积的宽泛部分。该变换为记忆添加了低阶非线性,而深层部分则侧重于泛化,结合特征的密集嵌入来隐藏更深层。特征。在我们的实际应用中,广义部分增加了产品间变换的组合特征,深层部分主要包括离散特征和连续特征的嵌入。我们学习离散特征的低维嵌入向量(密集表示)。嵌入向量随机初始化后,根据最终的损失进行反向训练和更新。对同一字段中的嵌入向量进行求和,并将不同字段获得的向量连接起来作为第一隐藏层的输入。作为我们第一个进入深度学习领域的模型,wide&deep 在微调领域取得了很好的成绩。

DeepFM​​宽深模型全模型后,点击率相比FM等浅层模型有明显提升,但宽部分仍然需要大量的人工规划来引入低-订单组合信息。我们参考DeepFM将分解机部分引入到网络结构中,通过交叉学习FM特征来学习浅层组合,而dnn部分挖掘特征之间的深层非线性相关性。标准的DeepFM网络结构如下: 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

引入FM Layer后,不同字段的交集不再使用点积运算,而是通过Hadamard积接收一个向量,用于多模块融合。顶层。同时引入了全域层,防止了分割嵌入的失真。对于Show/Clk/Ctr等统计服务,我们放弃了将单独的离线统计信息加载到字典中的方式,直接在PanguX训练平台的框架层面实现了此类统计信息。服务器保存每个函数的实时全局show clk信息。并且这些数据随着训练的进行不断积累和减少。最终的模型框架如下: 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

目前优化后的DeepFM已经全面运用在精细排序业务中,并取得了非常好的效果。

5。多用途

在微信看一看排名中,除了前面提到的ctr估算外,我们非常重视多用途推荐效果的优化。这里的多目标是指除了点击目标之外的其他与用户体验密切相关的推荐指标,包括时长、分享、点赞、评论等。仅仅针对 pctr 会导致点击诱饵问题。从平台的角度来说,我们希望不仅打造一款大众化的阅读产品,更希望提升产品的社交属性。因此,除了阅读之外,从用户体验的角度来看,用户的其他交互行为也是一个重要的衡量标准。从内容的角度来看,用户点赞、分享、评论的内容,以及长期保留的内容,往往质量较高。因此,实现这些目标可以避免在推荐过程中显示标题等低质量内容。从用户的角度来看,提升整体用户体验包括阅读、分享、点赞、评论等。提升产品对用户的粘性。从创作者的角度来看,作者希望通过几个指标来提高自己的内容作品在微信平台上的反馈效果。

工业上,解决多目标问题一般有两种方法:

1。多任务联合建模:

在估算广告点击率时,阿里妈妈建议计算点击率。对转化率进行联合建模,转化率是点击率乘以点击后转化率,从而将目标输出层上的两个任务关联起来。这样做的好处是多个任务可以互相利用信息,并且点击数据弥补了转化数据过度稀疏导致的不稳定估计问题。缺点是该模型严重依赖业务发展关系中的点击转化目标,无法直接扩展。其他复杂场景。

2。每个任务独立建模:

一些业界推荐的信息流产品对点击、时长、点赞、评论等目标采用独立的训练模型,并通过模型组合方案在线组合。优点是每个任务完全解耦,加快了模型的迭代速度,有利于每个任务的特性独立优化。缺点是任务之间不能互相借用信息。

3。其他方法:

一些通过修改样本权重体现多目标损失函数重要性的方法,还有一些由于迭代的灵活性和模型效果而通过添加正则项来体现多目标损失函数值的方法。以上都没有优势,这里不再赘述。

看看与其他推荐产品类似但又各有特色的推荐场景。比如点击目标和阅读时长、分享,甚至关注公众号目标在业务场景中形成递进关系,这是常见的;但推出“好看”后,不需要用户的点赞和评论。也可能会出现点击依赖性,这些目标与点击目标具有递进、平行的关系。 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

此外,用户阅读时的社交互动行为数据也是微信看看的一大特色。来自一起阅读过文章或观看过视频的朋友的上下文信息在引导用户行为方面发挥着重要作用。

看一下多目标优化方法:

1。多目标模型的网络结构:个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

在综合多目标建模方法论层面,我们同样采用多任务通用建模方案,每个任务共享的底层特征是嵌入表示,独占使用自己的神经网络和目标输出。

关于多个目标之间的连接方式,除了对点击目标进行完整的空间建模以及点击后的渐进行为之外,我们还为不依赖于点击行为的目标添加了独立的输出。我们以“好看”商店为例,图中显示了点击(A+B)、点击加点赞(B)、点赞(B+C)三个输出。这样做的好处是不仅受益于点击目标和渐进式点击后目标的相互借用信息,而且通过独立网络充分考虑了不依赖于点击的行为目标。

从展示底层特征的角度,我们将特征类型分为三部分进行研究,包括用户属性和兴趣特征、内容属性特征和社交关系上下文特征。我们目前使用模型来自动学习用于各种目的的预测任务。如何配置服务之间的交互连接?这部分的可扩展性可以说是非常强大的。例如,可以添加人工先验知识或者可以使用定制的网络结构来选择特征组。

2。多目标在线融合方法:

多目标估计的在线融合方法非常重要。这是决定检查产品整体用户体验的最后一步。我们通过离线和在线两个实验获得了它。最终加权融合参数。在离线阶段,我们通过网格搜索设置多个融合权重方案,观察每个目标的每个融合参数的离线排名AUC分数,选择一些权重组合作为标记有相对平衡的AUC权衡的集合,并进行ABTEST。在线的。线上阶段,通过观察每次实验的留存率、产品使用时长、用户行为互动率以及内容分布的数量和种类,选择最符合产品价值取向的权重组合作为最终的权重组合。整合计划。

6. 重排序和多样性

重排序主要负责多通道异构推荐结果的混合排序,最终确定推荐给用户的10个结果。除了重排序之外还负责策略混合、综合多样性控制、规则重排序、人工干预等。也有责任。这里的重组是业务的最终退出,我们的最终目标是增加发行量,即pv+vv。

在重新整理的过程中会遇到几个困难:

  • 数据异构,包含很多不同的业务。不同的业务数据有不同的特点,点击率也有很大差异;
  • 不同内容的优化目标不一样,很难形成统一的内容排名;
  • 不同的内容有不同的点击率。例如,某视频点击率超过20%,将点击率低的商家排挤掉。

我们尝试用pctr来统一排序:个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

看这个,视频最高,新闻最低。如果我们提高视频曝光率,总点击量不会继续增加,但会出现一个拐点。同样,如果新闻占比不断降低,点击量也会达到拐点。因此,增加点击率高的业务,减少点击率低的业务,会增加你的内容总点击率,但不会增加总点击次数。

基于以上考虑,我们选择强化学习来进行多服务混合。在推荐场景中,用户浏览可以被建模为ov进程。 Agent是我们的推荐系统,Action是我们推荐什么内容,Reward是用户的反馈信息,包括点击、差评、退出等。每次我们的推荐系统执行某个动作并向用户推荐内容时,用户都会给我们适当的反馈,以便我们通过优化总点击次数来达到最佳结果。 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

未来存在不确定因素,所以未来的收益应该会减少:个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

DQN梯度下降解决MSE LOSS:个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

DQN第一版上线后,总点击量相比之前大幅增长到基线。为了利用会话的短期信息,我们用 RNN 的隐藏值来描述 DQN 的状态。结构如下: 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

采用RNN结构的强化学习模型上线后效果进一步提升。基于 RL shuffle,我们进行了多次奖励设计迭代,例如添加持续时间、负反馈和多样性。接下来,我们重点关注多样性。

多样性是推荐系统中重要的优化目标,但相比ctr等指标,学术界和工业界都没有明确的多样性优化指标。为了更好地理解、分析和优化多样性策略,我们设计了10多个多样性相关指标,如展示/点击类别数、展示类别熵、用户主要兴趣覆盖率、与用户兴趣相匹配的文章比例等。主要兴趣等

多样性策略的第一个版本使用启发式方法来查找相同的类别/主题/标签等。限制其数量上限,并根据离线平台/abtest数据设置参数。这里最大的问题是个性化策略是全局的而不是个人的。 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

利用Submodular的边际效应递减特性,我们抑制了高度重复的类别和关键词,同时引入了pctr,体现了一定程度的个性化。此次投放取得了良好的效果,点击率损失也较小。多样性有了很大改善。

进一步分析发现,Submodular基本上是基于先验知识的规则,用户的及时反馈没有得到足够有效的利用。上面的公式中,还有很多超参数需要手动设置,迭代效率较慢。基于以上考虑以及之前强化学习混合的结果,我们想到应用强化学习来优化多样性并添加多样性作为奖励。最终我们实现了点击率和多样性的双赢。

7。工程挑战

看一下分类工作。在迭代过程中,我们遇到了几个比较大的工程挑战。

第一个是算法平台。最初使用spark mllib开始编译,很快就可以启动lr模型。然而,我们很快就遇到了计算能力的瓶颈。我们尝试了一些开源算法平台,但都无法满足业务需求。最终,我们决定开发基于ps-lite的大规模分布式深度学习平台PanguX。 PanguX平台支持百亿级稀有特征实时训练,支持低频特征过滤、动态特征过期,支持LR、W&D、DeepFM、RNN、MTL等通用算法,稳定支持看看、搜一搜在线企业。 个性化推荐如何满足用户口味?微信「看一看」 AI技术这样做

第二个是线上服务瓶颈,包括内存和性能瓶颈。至于内存瓶颈,当模型特征扩展到数百亿时,每个特征对应一个n维嵌入。单机无法加载模型,必须对模型进行拆分。这包括更复杂的工程细节,例如模型一致性。安全、版本控制、网络带宽和其他问题。我们利用微信技术架构部门丰富的kv经验,实现了一个高性能的FeatureKV来统一存储模型,解决模型的在线存储问题。单机支持1kW以上密钥,操作系统支持版本控制、快速回滚等功能。模型切换到深度模型后,预测时间显着增加。第一个版本使用 tf-server 模型。虽然取得了不错的效果,但是用了将近1秒的时间,完全不可能完成。最后借助数据平台团队的DeepX超高性能深度算法组件和Sage向量运算库,将耗时压缩到了极致,最终满足了线上要求。

最后,在线服务提取的性能和模型可扩展性存在问题。使用perf,我们发现服务提取器中的字符串匹配和哈希会消耗大量CPU时间,因此ctr预测吞吐量永远不会增加。痛定思痛,我们彻底重构了函数提取模块,彻底消除了字符串复制粘贴,优化了哈希算法,性能提升了一倍。在扩展性方面,由于业务增长太快,每一项早期新业务上线后都会进行复制和优化。后来随着业务的增长,选型对象增多,车型数量增多,问题就显现出来了。尤其是当一种新算法在一次业务迭代中取得成果,想要推广到另一项业务时,需要复制大量的代码,往往需要较长的时延。因此,我们对ctrsvr进行了大力重构,将在线预测评分逻辑抽象为特征提取、评分算法、模型存储等几个核心组件,并以可配置的方式组装起来,大大提高了迭代效率。

8.后记

看一下排序页面,上线以来逐渐从线性模型转向深度模型,引入了强化学习、多目标学习等方法,改进了诸如作为。如点击率、持续时间和多样性。显着发展。在逐步迭代中,要实现模型算法的最大效果,需要在算法的工程结构上下功夫,充分挖掘性能,提高计算能力,以实现效益最大化,是一个比较大的体会算法的广度和深度。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门