游戏迷提供最新游戏下载和手游攻略!

Dragonfly FM实时推荐系统的发展与演变

发布时间:2024-10-21浏览:76

蜻蜓FM——是中国移动互联网音频的领军者,也是国内首个音频媒体平台。它以锐利而独特的视觉效果传播世界的声音。打造PUGC专业主播生态圈,打造优质音频内容体系。上架10年,2017年用户数突破4.5亿,生态流量月活跃用户数1.3亿。

2. 推荐业务场景

目前推荐场景分布在首页推流、超级会员页猜你喜欢、频道页推流、我听页猜你喜欢等多种场景,涵盖专辑、节目、听单、直播间等。其他形式。

02推荐系统的演变

推荐系统是为了帮助用户高效地找到自己感兴趣的内容。我们的推荐场景定位是帮助用户更快更好的发现新内容,保证用户面对成千上万的人都能找到自己想要的内容。平台关注的专辑来源基本上都出现在首页feed 上。主页Feed 处理了平台的大部分流量,因此主页Feed 推荐系统的质量至关重要。蜻蜓FM的推荐系统是经过几年的努力才开发出来的。流程和算法不断迭代和更新。推荐首页风格由固定模块推荐改为Feed流推荐。推荐效率逐步完成从日级别的离线推荐到分钟级别的近实时推荐和毫秒级别的实时推荐的转变。召回策略逐渐从传统的个性化模型转变为深度召回模型,排序模型也从树模型替代为复杂的深度学习模型,在线指标取得了显着提升。

03实时推荐系统架构

什么是好的实时推荐系统?至少应满足以下四点:

架构能够处理海量数据并及时响应用户交互;

快速迭代推荐策略和算法;

优雅降级,即使出现服务问题也能推荐个性化结果;

及时、准确、全面记录用户反馈。

我们整个推荐系统主要由四部分组成,包括离线层、Pipeline层、Online层、业务层。业务层包含多种推荐场景,大部分使用同一套推荐框架。如何快速高效地迁移部署到其他推荐场景是我们需要考虑的问题。每一层都履行自己的职责。如何保证每项任务的稳定性和推荐系统的实时性至关重要。

一是如何实时获取用户的实时兴趣。这是非常关键的。用户与App交互并产生一些隐式行为如播放、收藏、搜索点击等,从算法的角度可以准确计算出用户的兴趣。实时兴趣,及时推荐相关内容,满足用户需求,从而让用户在平台停留更长时间,打造沉浸式体验;

二是从架构上满足实时性能要求。从用户触发推荐-召回-粗排序-细排序-重排序,每个环节都需要保证推荐链接在短时间内产生推荐结果。并保证架构的稳定性,尤其是精细排列和重排环节,这是最终向用户展示内容的环节。实时性必须保证在ms级别,模型越好,模型越复杂。带来了线上性能压力,但对于一个好的模型来说,线上的提升指数是巨大的。

召回层审查

传统的实时推荐系统中存在级联结构。在我们的推荐场景中,它包括专辑池、召回、精细排名、重排四个模块。它们就像一个漏洞,不断地过滤掉用户。用户感兴趣的相册,其中回忆模块是一个比较重要的模块。它利用一些算法策略,从数以万计的专辑池中挑选出数百张用户感兴趣的专辑,并将其投资到精品上。通过减小相册的大小,降低了在线排序服务的性能压力。

我们之前的召回计划路线是根据用户的长期和短期兴趣、热度、标签等制定多渠道的召回策略,并根据每个召回策略的在线表现将其划分为不同的优先级,然后使用建模目标是根据优先级融合多通道召回。该方法的优点是速度快、计算量小。缺点也很明显。从十万数量级到数百数量级,这样的过滤泄漏值如果太大,信息损失就会比较大,而且我们所有的融合策略都是基于一些人类经验,这会导致召回精度不足。

困难和挑战:

如何提高召回阶段的准确率一直是我们的难点和需要解决的问题。

粗层审查

面对召回阶段的挑战,我们这里的解决方案是在召回模块和精细排序模块中添加一个称为粗排序的模块。我们的目的是用模型代替人类经验进行筛选,从而带来准确率的提高。在粗排序模块中,我们使用基于DSSM深度学习模型改进的双塔模型。它的网络特点是整个网络结构由用户塔和物品塔组成,每个塔都有自己的输入特征和网络结构,然后通过最后一层输出一个固定维度的嵌入向量,然后进行内层产品计算。在线部署时,我们可以将相对静态的专辑嵌入向量异步写入向量索引。在库中实时在线获取相对动态的用户嵌入向量,然后从专辑向量索引库中调用topK相关专辑列表。

它的优点有很多:

用户塔和相册塔结构是解耦的,在最终内积计算之前,它们的模型结构没有交集;

而且内积计算相关的算力较小,部署上线后性能有保证;

我们可以添加自定义网络结构来增强泛化能力;

还可以通过添加用户的实时行为序列特征来获取用户的实时兴趣;

还可以获得一定程度的排序能力,因为训练时使用的是部分暴露、未打过的样本,所以具有一定程度的排序能力和较强的表达能力。

网上收入:

模型部署到我们的首页Feed进行个性化推荐后,带来了比较大的指标提升。其中,一级指标包括人均收听量提升5.44%,有效UV-PTR提升3.26%,二级指标包括人均点击量、ItemCTR、会员专辑UV- PTR和PV-PTR也带来了不同程度的改进。

困难和挑战:

双塔模型解耦的模型特性使其无法更好地利用用户和物品的交叉特征,从而限制了其泛化和表达能力。我们接下来计划尝试的解决方案是:

借鉴模型蒸馏的思想,将fine-ranking模型训练时产生的部分预测结果代入Twin Towers训练过程中,将fine-ranking模型良好的泛化能力转移到Twin Towers;

加宽双塔模型的宽度。目前的双塔模型是由多层MLP组成的。可以在同一层添加DCN、Self-attention等具有高阶特征交叉能力的模型结构。它由单塔MLP组成。变成多塔,在最后一层设置动态权重,达到增加泛化和表达能力的目的。

排序层回顾

启动基于DeepFM的深度学习排名模型:

近两年我们主要的在线排序模型是Xgboost模型。具有工程简单、效果优异、支持并行训练、跨语言、跨平台部署等优点。基于Xgboost,我们迭代了几个版本,在线指标也有了很大的提升。然而,随着特征维度越来越大,模型变得越来越复杂,随着我们的推荐场景不断丰富,就需要在线预测。地方越来越多,在线预测的性能压力也越来越大。性能优化的成本不再与我们在线获得的收益成正比,在线性能越来越成为我们的瓶颈。这个时候我们迫切需要一个新的模型框架来替代它。

用新模型替代XGboost也面临着不同的困难和挑战:

新的模型框架意味着之前xg开发中积累的经验不再可用,数据基础设施需要从头开始建设,这意味着成本问题;

这也意味着风险,因为XG模型已经在多个版本上迭代,目前的效果已经达到了相对最优的水平。新模式存在达不到当前效果的风险;

在保证效果的同时,还需要满足严格的在线性能要求,即效果和性能之间需要进行权衡。

经过一段时间的研究,我们决定使用deepFM深度学习排序模型。它是华为诺亚实验室与哈尔滨工业大学于2017年联合推出的算法模型,已成功应用于各大一线互联网项目。在互联网的推荐系统方面,业界有很多成熟的经验和借鉴。 DeepFM的整个算法框架主要分为两部分。 FM部分可以理解为浅层神经网络层,具有一定的交叉特性。它赋予模型一定的记忆能力。 DNN部分可以实现特征的更高维交集,这使得模型具有一定的泛化能力。它不仅可以在一定程度上减少人工特征的挖掘工作量,而且这两部分的Embedding网络层是共享的,大大降低了模型的复杂度。它比较擅长处理大规模的ID稀疏特征,像我们成千上万的个体的相册ID其实也可以作为一个特征加入到模型中进行训练。这些都是deepFM相对于xgboost的优势。而我们同时也做了其他的优化尝试:

重新定制了多种适配deepFM的特征库;

前期我们利用Spark Streaming实时计算框架开发定制了多种实时动态序列特征,可以更好地捕捉用户的实时兴趣;

我们将特征工程和预测服务做成统一的API接口供外部调用,并部署到我们的容器云平台;

上线前,我们多次优化代码、简化模型结构,在保证训练效果的同时,尽量降低模型的复杂度。同时,我们还进行了多次真实场景的离线模拟压力测试。我们的平均rt时间控制在30ms左右,基本满足我们的性能要求。

网上收入:

我们在多个推荐场景中部署了新模型。其中,首页Feed个性化推荐场景中,一级指标用户收听时长增长10.94%,有效UV-PTR增长9.26%,有效收听ItemPTR增长7.83%。其中两项等级指标也得到了大幅提升。

同时我们还在首页投放场景和频道页面推荐场景部署了deepFM。我们可以看到,上线前后各项指标都有了很大的提升。

在线推荐节目

为了探索推荐系统的更多可能性,我们进行了节目推荐的第一阶段探索,目的是探索推荐触发时高效回忆节目的方法,包括节目到节目、节目之间的相互影响和发现。专辑,还有专辑和节目。

程序回忆:

根据节目推荐的特点,目前我们制定了以下召回策略:

基于GraphEmbedding的EGES向量相似度召回策略:针对一般Word2vec嵌入方法无法准确获取用户广播节目序列的节目向量以及新上线节目无法获取嵌入的冷启动问题,我们采用基于EGES的图开发了嵌入训练方法。基于节目ID,获得类别ID、标签ID等多维Side-Information,采用DeepWalk的随机游走采样方法和Skip-gram模型训练方法。准确高效地获取节目嵌入结果,在缓解新节目上线冷启动和中后期节目覆盖方面效果得到大幅提升。

基于Bert的语义相似度召回策略(覆盖约3万个节目,可作为补充策略):基于业界先进的Bert自然语言预训练模型,提取每个节目标题的文本向量,并使用近似最近邻搜索框架faiss,为每个节目标题匹配最相似的topK相关节目,并利用文本多分类的下游任务进行微调,使提取的节目标题语义向量更加准确,进一步提高效果。

基于二级分类(时间窗口2周)的热门节目召回策略,同时考虑流行度和时间衰减。

追赶策略:作为每日推送策略,与当前节目回忆相结合,通过计算用户追赶状态的专辑,向用户推荐新发布的节目。

网上收入:

同时,我们针对如何在线上穿插不同形式的专辑和节目,以及如何高效过滤和节目推荐风格进行了AB实验。最后我们第一期取得了不错的盈利,其中专辑+节目整体收入占比,一级指标包括人均收听时长提升5%、有效收听UVPTR提升7%等各项指标都有了很大的提高。

改进方向:

目前专辑召回和程序召回都是独立构建同构图,最终生成Embedding向量。稍后我们会考虑将专辑和节目表示到同一个向量空间中,并使用Metapath2vec方法共同形成异构图。基于图上节点的元路径引导,对序列进行采样后,通过skip-gram生成元路径语义下的表示,最后将表示进行融合,得到节点的最终表示。

节目整理及在线MMoE:

近期,我们通过分析发现,用户平均收听时长、专辑完成率、专辑收藏数与用户留存率呈正相关。这些隐性行为在一定程度上影响了用户留存。我们当前的建模是单目标预测。目标是通过直接增加PTR来间接增加用户的收听时间。这里有一个问题是,如果我们只关注专辑是否播放,那么用户可能会发现自己不喜欢这个专辑或者专辑质量很差,感觉体验太差,用户可能会流失。也有可能用户非常喜欢,愿意将其加入收藏,有时间再听。这间接增加了用户粘性和回访率,所以我们正在改进。除了PTR之外,还需要提高专辑的收藏转化率。这不仅可以增加留存,还可以间接向用户推荐优质相册,提高用户体验。

这同样适用于程序排序。第二阶段,我们开发了基于MMOE的多目标排序,其中是否播放和是否完成播放作为我们的早期预测目标。与ESMM相比,MMOE基于SharedBottom模型,不同任务的门控网络可以学习组合专家的不同模式,捕获不同任务的相关性和差异性,并且可以减少任务差异和数据分布的影响,因此MMoE是我们的第一选择。多目标排名模型。

这里我们选择了三个专家网络。我们可以看到,不同的Label对不同的Expert有不同的依赖关系。目前两个任务已经通过Gate网络获得了对不同Expert网络的依赖。 Label1的权重更依赖于expert2,Label2的权重更依赖于expert1。

网上收入:

首页Feed上线一个月后,专辑+节目全球流量一级指标UV-PTR、人均播放时长增长约3%。

改进方向:

MMoE第一阶段的特征中,目前仅添加了30多维特征,后续将挖掘更高效的特征,包括交叉特征、序列特征等。

MMoE的网络结构在底层采用了简单的Embedding层concat形式。后期我们会尝试参考DIN和DeepFM对现有的网络结构进行升级,融合Attention和FM的网络结构来增强泛化性能。 力。

目前的目标包括两个目标:是否玩和是否玩完。后期会整合是否收藏、评论、下载等多个目标。

稍后,我们将尝试使用PLE新的多目标排名模型。与MMoE相比,优点在于它消除了任务塔网络与其他任务的特定任务专家之间的联系,允许不同类型的专家执行更有针对性的任务。互相学习,互不干扰。

当MMOE离线训练时,任务之间的收敛速度和损失大小可能会有所不同,例如分类问题和回归问题。需要一种机制来动态调整训练过程中每次损失的权重,例如GradNorm。

当MMOE部署到线上时,需要将每个任务的预测分数乘以相应的权重,得到最终的分数,然后进行排序。目前有两种方法:加法融合和乘法融合。目前,我们使用加法融合。最优权重也可以通过Cassian优化的方法找到。

重新排序图层审核

排序模型通常以逐点的方式进行训练,这很容易导致相似内容的聚类。为了提高用户体验和内容多样性,我们也尝试了几种提高多样性的方法和策略:

1.动态刷新

目前,Feed 提供个性化推荐结果。理论上,当用户不触发推荐行为时,用户的整个推荐结果不会改变。从数据来看,大多数用户停留在前3个页面,因此用户在触发推荐之前多次触摸首页,看到的内容可能是相同的。这时,推荐的多样性就会大大降低。简单粗暴地对曝光的专辑进行过滤,可能会过滤掉一些产生无效曝光的专辑,而如果过滤力过大,还会造成没有优质专辑可推广的情况。

我们的目标是确保用户在不触发推荐的期间,每次打开首页feed 时,推荐结果都会发生一定程度的变化,一定程度上解决内容多样性的问题。

重排层添加动态刷新机制。在召回集基本不变的前提下,优先动态调整集合内的排序。即,将排序分数除以权重减少系数,曝光次数较多的相册在重新排列时会向后移动,引入时间衰减。最近曝光的专辑向后移得更快,以后曝光的专辑则恢复正常顺序。

2.MMR

MMR 是一种近似贪心算法。它的全名是最大边际相关性。第一个Sim代表某个专辑的排名分数,第二个Sim代表该专辑以及生成的结果集中的专辑。 越大,表示越接近原始排序结果。 越小,越强调多样性。

同时,我们还在计算结果和工程效率上做了一些优化。一是mmr基于多轮迭代策略。候选集数量越多,计算量越大,因此我们只选择将排名分数固定在topK中,通过mmr计算候选集,在计算效率和多样性效果上做出了权衡。另一个是突出用户兴趣的实时性。我们将各个候选集的速率系数相乘。通过加权操作,某些候选集可以在多样性分散后排名靠前。

3.民进党

行列式点过程(DPP)是一种基于行列式点过程来提高推荐多样性的算法。它使用贪心算法来推理最优行列式点过程,并使用Cholesky来加速线性点过程的推理,我们使用word2vec计算出的16维嵌入向量来构造核矩阵,并做了一些工程优化。

网上收入:

经过一段时间的AB测试,我们发现加权MMR在线效果最好。可以保证多样性指标包含人均暴露的一级和二级品类数量,同时不会下降其他转化指标。均增幅超过10%。

改进点:

接下来我们会考虑使用list-wise的思想,考虑整体推荐列表中item的顺序,整合当前item的上下文信息,即列表中其他item的特征信息,使用RNN或者Transformer进行分析每个项目。输入的对应位置进行特征融合,并根据新预测的分数对项目进行重新排序,以从整体列表中获得最大收益。

推动特征工程和算法模型中的微服务

在平时的算法开发工作中,我们需要具备快速迭代、快速试错的能力。然而,在过去开发和部署模型的过程中,我们经常遇到部署效率问题。原因是我们线上一般都是同时部署多个模型、多个版本进行AB测试。每次开发出一个新的排序模型,后端同学都需要将离线的特征拼接过程复制到线上。我们的线下训练是scala。语言开发,网上是Go语言开发。在这种跨语言、跨平台的场景下,特征拼接很容易出现线上线下不一致的情况。出现问题需要人工审核逐步排查,费时费力。不用说,定位问题也很困难。同时,迁移部署到其他推荐场景时,会增加重复代码,不仅大大降低了部署效率,还增加了出现问题的概率和隐患。

同样,解决这个问题也会遇到一些困难和挑战:

如何无需人工比较特征拼接结果,保证特征工程线上线下的一致性;

如何进行特征工程和模型的多版本部署、多模型扩展以及热加载;

如何提高部署效率,快速迁移部署到其他推荐场景。

解决方案:

首先,我们进行特征工程配置处理。我们将每个版本的特征处理对应的配置文件存储到redis中,并分别制定了stg和prd流程,方便离线测试后stg上线测试。部署prd环境;

通过配置中心,可以实现多场景、多版本、多模型的统一部署和管理。通过配置中心可以控制不同类型、不同版本的模型文件路径的读取,读取对应版本的特征工程配置文件。方便一键部署和版本回滚;

将此服务框架开发为端到端的微服务框架,部署到容器云平台进行统一管理,方便多场景的迁移部署。后端通过发送即可轻松获取deviceID、recallSet、modelType、modelVersion。用户最近的专辑推荐列表。

网上收入:

线上部署模型效率提升,将5个工作日缩短至半个工作日;

从离线训练到模型部署的周期从数月缩短至数周;

提高模型快速迭代和试错的能力;

整个框架已在上海算法平台推广,并成功应用于推荐和搜索的多个推荐场景。

总结与展望

蜻蜓FM是国内音频内容领域的顶级产品。推荐系统一直发挥着重要作用。我们一直关注推荐领域相关算法的前沿动态,并结合我们对业务的深刻理解,从算法和工程的角度出发,不断探索和实践,并已取得了良好的成绩。我们希望能够给相关领域的同学一些思考和启发,同时让我们发现很多需要改进的地方。接下来我们还要从如何保证推荐系统开始。我们将不断完善推荐系统和内容生态,以实现实时性,提高推荐内容的多样性,保证推荐内容的质量,提高用户对推荐内容的满意度,提高用户留存。为用户带来更好的聆听体验。

用户评论

无所谓

每次都觉得蜻蜓FM的推荐越来越精准了!从早期的几个热门节目到现在的定制化内容, echt 我已经完全沉浸在它带来的音频世界里了。真的超级好用啊!

    有12位网友表示赞同!

景忧丶枫涩帘淞幕雨

作为蜻蜓FM的用户多年了,感觉他们的实时推荐系统确实很强大,总能推给你一些你感兴趣却没发现的宝藏音频。 不过,偶尔也会出现推送过于同类型节目的情况,希望能更加个性化!

    有10位网友表示赞同!

无寒

我很好奇蜻蜓FM是怎样实现实时优化的?这套系统能分析用户的收听习惯和偏好真是厉害啊!希望他们的技术继续发展,为我们带来更丰富、更精准的音频内容推荐。

    有11位网友表示赞同!

青衫负雪

感觉实时推荐系统的改进越来越大了!从过去单纯的分类到现在的AI智能分析,我能感受到蜻蜓FM一直在努力提升用户体验。期待他们未来还能给我更多惊喜!

    有16位网友表示赞同!

封心锁爱

虽然蜻蜓FM的用户界面还是比较友好,但希望他们能把这个实时推荐系统做得更透明一些,比如直接展示算法是如何工作的,这可以帮助用户更好地理解推荐依据,更加信任系统。

    有13位网友表示赞同!

微信名字

对于音频内容的更新频率和推送速度,我觉得蜻蜓FM还可以加强。有时候我想要寻找某个特定主题的节目,还得手动搜索,实时推荐系统的反应速度上似乎还有提升空间。希望他们能在这个方面进行改进!

    有7位网友表示赞同!

葵雨

说实话,这个实时推荐系统一开始我还不太适应,总觉得它会把我的喜好“框起来”。但是渐渐地发现,它确实能够帮助我了解到不同的音频类型,开拓了我的听力视野。最后还是要感谢蜻蜓FM的不断创新和尝试!

    有13位网友表示赞同!

暖瞳

我真的爱上蜻蜓FM的个性化推荐功能了! 它总能提前感受到我的需求,推荐给我一些我从未关注过的主题节目,真是太智能啦!让我每天都充满了新鲜感。

    有17位网友表示赞同!

殃樾晨

这几年蜻蜓FM发展确实迅速,实时推荐系统也是一大亮点。不过,我希望他们能够在保证个性化推荐的同时,能够平衡推荐的多样性。避免出现过度同质化的现象,让用户能更全面地体验到不同的音频内容。

    有6位网友表示赞同!

见朕骑妓的时刻

希望蜻蜓FM越来越好!这款实时推荐系统已经帮助我找到了很多宝藏节目,它像一位贴心的音频管家,懂我的喜好,引领我走进精彩的音频世界!

    有7位网友表示赞同!

*巴黎铁塔

虽然蜻蜓FM的实时推荐系统越来越智能了,但我有时候还是希望能够手动选择推荐的内容。因为每人对听歌的需求都不同,有时候我想要聆听某一类型的音乐或某个嘉宾的声音呢?

    有9位网友表示赞同!

容纳我ii

总觉得现在的推荐系统有些过于商业化了,推荐的都是比较热门的节目,缺少一些冷门作品和独立创作者的声音。希望蜻蜓FM能更加重視内容的多样性和深度

    有13位网友表示赞同!

淡写薰衣草的香

我感觉蜻蜓FM的实时推荐系统偶尔会推送一些不太相关的音频内容,这让我很困惑,它应该更加精准地分析用户的听歌习惯,避免出现这种“误判”情况。

    有5位网友表示赞同!

秘密

希望蜻蜓FM能够不断完善实时推荐系统的个性化算法,比如可以根据用户的具体时间段、情绪状态等信息进行更人性化的推荐。

    有19位网友表示赞同!

封锁感觉

蜻蜓FM的实时推荐系统确实让人耳目一新,它能根据我的兴趣爱好推荐最新的节目和热门主播,但我希望他们也能更加重视音频内容的质量,避免推送一些低俗或毫无意义的内容!

    有9位网友表示赞同!

折木

我越来越依赖蜻蜓FM的实时推荐系统,因为它能够帮我快速找到自己感兴趣的音频内容。 但我希望他们在继续优化算法的同时,保持对用户隐私的保护,不要过度收集和利用用户的个人信息。

    有13位网友表示赞同!

漫长の人生

觉得蜻蜓FM的实时推荐越来越智能了,还能跟我聊天互动,预测我的听歌需求,真的太厉害了!希望它能够成为真正的智慧音频助手!

    有10位网友表示赞同!

热点资讯