写点什么

全民 K 歌内容挖掘与召回

  • 2021-04-15
  • 本文字数:3432 字

    阅读完需:约 11 分钟

全民K歌内容挖掘与召回

推荐系统一般分为两部分,召回阶段和排序阶段。召回阶段是从全量数据中挑选出用户可能感兴趣的一部分数据,供后面的排序阶段使用。全民 K 歌作为一个拥有大量用户上传作品的平台,如何挖掘用户上传的内容作为推荐的候选集,也需要精心设计。


今天的介绍会围绕下面四点展开:

  • 内容挖掘

  • 召回模型

  • 召回模型实践

  • 总结和展望

内容挖掘

首先和大家分享下全民 K 歌进行内容挖掘在业务上的必要性。

1. 内容挖掘--重要性


跟普通的召回相比,全民 K 歌作为一个 UGC(User Generated Content,也就是用户生成内容,即用户原创内容),存在着两种用户:内容创作者和内容消费者。两者对于平台的诉求是不一样的:内容消费者和其他平台的用户一样,希望看到好的内容,获得好的用户体验。而内容创作者更看重自己发布的作品被更多的人去看到,去喜欢。所以如果单纯从个性化分发的角度去看待问题,推荐的目标是为了满足内容消费者短期的需求,在短期内可能对于消费规模上会有一个增益。但是长期来看,这种方式会导致推荐流量分配越来越集中到少数作者。大量作者因为得不到推荐流量,缺少创作激励,会导致平台创作者的流失。这样对于平台的生态来说是不理的。所以除了个性化分发的视角以外,还有一个从内容生态视角进行考虑的,从内容生态视角触发的一个机制。这个机制就是内容挖掘机制。

2. 内容挖掘—目标

内容挖掘的目标是持续发现优质内容,建立优质流量通路。为了实现这个目标,内容挖掘主要分为两个模块

  • 内容准入机制:从内容创造者上传的内容中筛选出优质作品,进入到推荐系统链路

  • 分发通路:内容创作者上传内容中筛选出优质作品之后,需要一个稳定的分发通路,保证这些优质资源能够让用户看到。


这两个模块也是经历了一系列的迭代和优化过程,下面将详细介绍迭代过程。

3. 内容挖掘—迭代



在内容准入方面,一开始用的是人工存量挖掘。靠人工对上传的资源进行打分。这样做可以获取到高质量的资源,但是人工操作费时费力,效率很差,时效性也无法获得保证。后面为了提高效率尝试用一些人工标注的特征进行模型预估来识别优质内容,但是这些模型都存在一些问题。现在用的方案是基于视频音频本身的特征来做优质内容的识别,然后用人工的一些辅助审核来帮助实现的内容准入。


在内容分发方面,一开始完全是基于推荐系统的自然分发,然后在此基础上,为了更好的激励内容创作者,增加了冷启动内容保量机制。现在采用的是多级分发,针对不同的反馈效果去给一个作品做多流量的分发机制。

4. 内容挖掘—方案

从整体上看,内容挖掘一共有三部分组成:


① 内容准入:内容准入部分是由 TME 创新团队提供的深度神经网络模型,将一些普通内容和优质内容进行人工标注之后训练模型。对于新发的音频和视频资源,模型会根据他的唱功、视频质量等一系列特征来判断内容好坏。对于音频资源通过模型打分之后直接进入到推荐候选池中,对于音频资源还需要通过人工审核才能入库。通过这样的流程就可以很高效的从每日发布的 500w 资源中挖掘出可以推荐的资源。

② 分级分发:从用户创作的内容挖掘出优质资源之后,跟着的就是冷启动阶段。根据用户的账号等级,给资源初始曝光量,在曝光量打到设定的值之后根据反馈的数据与资源的平均数据进行对比,如果反馈效果更好的话就增加曝光量,在扩大曝光几次之后,如果资源的反馈仍然比较好,就用双塔模型对资源进行一个保量。

③ 召回:召回模型采用的是双塔模型,不过和传统的双塔模型相比,这里只用到了作品的源信息,没有用到后续的信息。

在完成保量过程之后优秀的作品会转入到流量流转阶段,这个阶段和分级分发类似,每个推荐周期结束后根据一些指标对内容进行评估。比如看点击率、完播率这些,根据这些表现来确定是不是要把它放到更大一级的流量池里面去分发。

召回模型

完成了内容创作者资源的挖掘之后,从每日上传的内容里面可以获取到比较优秀的内容,构建内容池,然后对这个内容池来做个性化召回。

1. 召回模型—总览


全民 K 歌的召回主要分为三类:

  • 属性召回:用户在看什么内容,说明用户对于这类属性的物品有一个偏好,然后可以根据这些偏好去做点对点的召回,召回一些带有用户偏好属性的内容;

  • 模型召回:从用户和 item 的建模角度,把用户和 item 建模到同一个向量空间,之后可以按照相关检索去为用户做一个召回;

  • 其他召回:除了上述两种召回以外,基于实时热门内容、LBS(基于位置服务)、关系链召回也可以召回少量数据作为补充。

2. 召回模型—画像属性召回

基于用户画像的属性召回的原理比较简单:根据全平台的流水(如搜索、播放、点赞、分享、关注和点唱等用户行为),实时计算用户在我们平台的各个维度(如音频标签、视频标签、伴奏、歌手、创作者)的偏好。最终选取用户比较高的偏好维度的一系列属性来为用户去做召回。这种召回对于用户的感知性很强,因为召回结果和用户的实时行为时有强相关的关系。

3. 召回模型—属性向量化

单纯用点对点的属性召回是存在问题的:这样的召回比较死板,没有考虑到属性之间的相似性。为了解决这个问题,这里引进了属性向量化,训练属性的 embedding,根据属性直接的相似关系进行相似扩展。比如用户喜欢的伴奏,可以扩展到相似的伴奏然后寻找作品。用户喜欢某个作者,也可以扩展到风格相似的作者。

召回模型实践

在介绍完召回模型的理论部分之后,下面介绍一下召回模型的实践以及实践中的探索优化

1. 召回模型实践—模型化召回

模型化的召回是相似性的表征建模:通过模型把用户和物品 encode 到相同维度的向量空间,在最后一层进行相似性交互(cosine,dot 等相似性计算方法),线上通过最近邻来召回最相似的内容。

模型化召回典型结构有三种:

  • 只有 Embedding 层:矩阵分解

  • 用户单塔+softmax:Youtube-DNN

  • 双塔+cosine:DSSM


全民 K 歌线上采用的是第三种结构,和排序模型相比有几个需要注意的问题:

  • 相比排序,召回面临的搜索空间更大。排序只是把少量内容进行打分然后按照分数从高到低排序,但是召回要面临的数据更多,而且数据分布也不相同,所以选择负样本非常重要。

  • 线上检索速度有要求,时间太长会影响用户体验,所以无法引入用户的 item 的交叉特征,导致模型的表达能力比起排序模型偏弱。

  • 作为个性化分发的起点,需要引入 debias 机制,缓解 bias 循环

2. 召回模型实践—负样本选取

在排序和召回模型两块工作中,看到的内容视角是不一样的。在召回阶段,候选的物品是整个全集;而在排序阶段,候选的物品只是全集的子集,因为待排序的物品是召回模型筛选之后的结果。正是视角的不同,所以召回和排序的采样方法不一样。在召回阶段,随机负采样的效果往往优于曝光未点击。

3. 召回模型实践—增强单塔的表达能力

用于召回的双塔模型存在一个问题:不能用到用户和 item 之间的交互特征,前面说过这样导致的结果就是导致表达能力偏弱。所以需要做一些优化来增强单塔的表达能力。具体的做法是利用用户比较稳定的一些行为序列,再加上用户的用户画像的的一些基础信息,根据这些来构建用户的隐藏的表征。然后基于这个表征,去筛选用户的动态,比如播放、点击这种比较稳定的行为动态,这样就能得到一些和当前预测目标更相关的信息。

4. 召回模型—最终模型

最终经历了热度负采样、Hard-Negative Mining 和序列 Attention 三个优化之后,整体的模型上线之后效果得到了比较不错的提升,说明这些工作是有效的。

5. 召回模型实践—Debias

实践中发现推荐系统中存在着比较明显的 bias 循环:用户对于一个物品的转化,包括一个曝光的漏斗和一个曝光到转化的漏斗。如果我们只考虑转换这一层的漏斗,就会有夸大高曝光物品的可能,这就会偏离用户的真实偏好。

为了验证这个猜想,在全民 k 歌中选取了一个场景来做测试,采用的方案是全局样本补充+IPS 加权的方案,包括以下的操作:

  • (user,item,rating)从推荐场景扩充到全平台主动性为

  • Rating 的置信度与 Propensity Score 关联起来,降低高曝光正样本的权重,增加低曝光正样本的权重

  • IPS 变换和截断


这个方案上线以后也取得了一定的收益,说明 bias 的循环是存在的。采取上述方案 Debias 是成功的。

总结和展望


在未来,我们还会在三个方面进一步探索,一是通过更精细的流量分发控制提升优质内容的冷启及进入高展的速度;二是实时画像又统计方式切换到模型方式;三是模型召回也加入多目标的思考。


文章作者:

timmyqiu

腾讯音乐 | 应用研究

2016 年南京大学计算机系硕士毕业,同年加入腾讯 SNG 数字音乐部,先后负责过 QQ 音乐的画像和每日 30 首推荐的算法相关工作。2018 年底至今在全民 K 歌负责 UGC 作品的推荐算法开发与相关的工程实现。


本文转载自:DataFunTalk(ID:dataFunTalk)

原文链接:全民K歌内容挖掘与召回

2021-04-15 07:002775

评论

发布
暂无评论
发现更多内容

深入理解Python内存管理与垃圾回收

宇宙之一粟

Python 内存管理 1月月更

ReactNative进阶(三十五):应用脚手架 Yo 构建 RN 页面

No Silver Bullet

React Native 1月月更 BloC yo

使用 Lambda 表达式实现超强的排序功能

CRMEB

面试突击19:为什么ConcurrentHashMap不允许插入null值?

王磊

一文了解 MySQL 中的锁

Ayue、

MySQL 数据库 1月月更

TortoiseSVN 执行清理( cleanUp )失败的解决方案

编程三昧

svn 开发工具 1月月更

华为云FusionInsight连续三次获得第一 加速释放数据要素价值

数据湖洞见

大数据 FusionInsight 华为云

混沌工程之ChaosMesh使用之模拟CPU使用率

zuozewei

混沌工程 Chaos Mesh 1月月更

模块一

Geek_f3e842

架构实战营

微信业务架构图 & 学生管理系统架构设计

smile

架构实战营

微信业务架构、学生管理系统(草稿)

Geek_16d2b8

架构训练营

一条SQL查询语句是如何执行的?

蝉沐风

MySQL sql 面试

一个cpp协程库的前世今生(二十四)对象池与栈内存池

SkyFire

c++ cocpp

低代码实现探索(三十)低代码设计器设计方式

零道云-混合式低代码平台

面试官太难伺候?一个try-catch问出这么多花样

阿Q说代码

效率 字节码指令 1月月更 try-catch finally-return

Flink 流批一体平台 StreamX 1.2.1 正式发布

ApacheStreamPark

spark FlinkSQL 流批一体 Flink 平台 一站式平台

征文投稿丨在轻量应用服务器上部署SpringBoot项目

阿里云弹性计算

阿里云 用户投稿 轻量应用

用 K3s 来运行安装和极狐GitLab Runner

极狐GitLab

Android C++系列:JNI中的Handler--ALooper

轻口味

c++ android jni 1月月更

代码之外的生存指南,先掌握这五步。

叶小鍵

征集用户| 填写 2022 Apache Pulsar 用户调查问卷,抽取丰厚礼品

Apache Pulsar

开源 云原生 中间件 Apache Pulsar 社区

告警关联中的频繁项集挖掘问题

云智慧AIOps社区

算法 智能运维 智能告警 人工智能「 云智慧

微信业务架构图及学生管理系统架构设计实践

IT屠狗辈

系统架构 架构实战营 微信业务架构图

Web or Native 哪个才是元宇宙的未来(下)?

Orillusion

WebGL 元宇宙 Metaverse webgpu

Awesome DAO 文章和资源推荐(8/100)

hackstoic

DAO

面向复杂度架构设计之学生管理系统

晨亮

「架构实战营」

Fabric.js 将本地图像上传到画布背景

德育处主任

前端 数据可视化 前端可视化 FabricJS Fabric.js

为什么需要闭包?闭包是什么概念?

蜜糖的代码注释

Java 后端 开发

OpenCloudOS开源操作系统社区迎来首个正式版本

科技热闻

如何使用JavaScript开发AR(增强现实)移动应用

汪子熙

JavaScript AR 1月月更 增强现实

微信业务架构+学生管理系统毕设方案

李大虾

#架构实战营 「架构实战营」

全民K歌内容挖掘与召回_AI&大模型_DataFunTalk_InfoQ精选文章