忽冷忽热:简评腾讯的Cold & Warm Net

腾讯讲新用户冷启的文章《Cold & Warm Net: Addressing Cold-Start Users in Recommender Systems》,有值得借鉴的地方,也有让我不以为然的地方。

基本结构:Multi-Expert

整个结构就是一个Multi-Expert架构。

用户有三种特征:

  • 上图中的Ua:基于用户画像信息的特征。这也是新用户能够拿到的信息。
  • 上图中的Ub: 基于用户行为历史提炼出的特征,这是只有老用户,也就是warm users才有的特征。
  • 上图中的Uc:是user group的信息。先用一个pre-trained model把一些active users压缩成embedding,这些active users embedding再聚类,聚类成m个user group。Uc就是由这m个user group的中心组成的m个embedding。唉,凡是这种需要两阶段,而非end-to-end训练出来的embedding,是后维护起来都是个麻烦

cold-start expert的输入只有Ua(静态画像信息)和来自Uc的信息。来自Uc的信息,具体来说,就是由Ua(静态画像)对m个user group center embedding做一个attention。这里我担心只有user profile信息作为query,能做好这个attention吗?根据我的经验,凡是性别、年龄这样的信息,都是鸡肋。唉,反正也没别的信息了,聊胜于无吧。

warm-up expert就非常常规了。把Ua(用户静态画像)、Ub(用户行为历史)、Uc的信息都喂进去。这里来自Uc的信息,就是Ua+Ub再鼓捣出一个向量当query,去Uc中做attention。

Multi-Expert架构里怎么能没有gate?这里的gate是拿用户活跃状态(是否登陆、活跃几次之类)当输入,鼓捣出两个权重,分别乘上cold-start output与warm-up output,最终的user embedding就是cold-start output与warm-up output的加权平均。接下来的事情,就和普通双塔无异了。

这里所讲的方法就和我的《互联网大厂推荐算法实战》中介绍用多场景推荐做冷启的思想如出一辙。

同时类似的方法,也被Google用在新物料冷启上,参考我的另一篇文章《似曾相识:谈Google CDN长尾物料推荐》,用item frequency来决定是否启用item id embedding。

蒸馏

  • 由warm-up expert输出的user embedding与item embedding计算出的分数称为,拿它与true label ,计算出一个loss,
  • 由cold-start expert输出的user embedding与item embedding计算出的分数称为,拿它与true label ,计算出一个loss,
  • 如果(论文图中符号还写反了),就说明cold-start expert还没有学好,所以要加上一个蒸馏损失,让cold-start expert模仿warm-up expert的输出。

其实我个人是非常不感冒蒸馏的,因为有的时候,师生关系没有那么明确。比如这里,我有个问题,这个蒸馏对哪些用户有用?

  • 对老用户有用吗?前边所讲的multi-expert结构中,如果一切如作者所愿,老用户user embedding应该由warm-up expert output独自承担,把cold-start expert output训练好有什么用?
  • 对新用户有用吗?新用户又没有多少user behavior,那新用户的warm-up expert output与cold-start expert output谁优谁劣还不一定呢?新用户的warm-up expert配当这个老师吗?

说起蒸馏,我个人比较认可Deezer(一家法国在线音乐公司)的《A Semi-Personalized System for User Cold Start Recommendation on Music Streaming Apps》这篇文章的作法

  • 首先需要明确,训练蒸馏模型只用老用户的数据,因为新用户上的teacher没有任何指导意见。但是在老用户训练出来的模型,却应用于新用户。
  • 选一批老用户,首先拿到他们“成熟”后的user old embedding,当成训练目标。
  • 再拿同一批老用户,只用他们在“青涩”期的特征(比如刚注册1天之内的行为),训练出他们的user young embedding,训练的目的是让一个用户的young embedding与他的old embedding越接近越好。

Bias Net

这一段是最最让我摸不清头脑的。你说新老用户的行为有很大不同,海量的老用户数据实际上给模型引入了很大的偏见(bias),这一点我是相当同意的

但是你这个bias score是用user feature生成的,是几个意思?我们推荐的目的是每次给同一个user推荐不同的物料。这个bias score是基于user feature的,每次给候选物料排序的时候,同一个user,相同的user feature,生成的bias score也相同,给所有的item原来的sim_score上再加上相同bias score,这对排序结果能有啥影响???

bias score加也得加在item侧呀,比如我在《互联网大厂推荐算法实战》中讲“FM增广”的时候描述的。

小结

整体评价一下:

  • Multi-Expert架构,看来在冷启中应用得越来越多了。
  • 冷启中引入蒸馏,是个新颖的想法,但是我更推荐Deezer公司的作法。
  • bias net,恕我看不懂。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)




相关推荐

  • “我,在腾讯做PM月薪6万,离职后突然惊醒:人越努力,只会越平庸”
  • 有哪些深度学习效果不如传统方法的经典案例?
  • 推荐一个发表论文的神器 2.0!
  • 监控 SpringCloud 微服务的实践方案
  • Guava 骚操作,10分钟搞定日志脱敏需求!
  • Jupyter Lab 十大高效生产力插件!
  • 如何将开源项目与商业化完美结合?
  • 华为整体销量已超苹果,成大中华区最畅销手机制造商;iPad 11 或明天发布;OpenBSD 7.4 发布|极客头条
  • 微软全力拥抱 Java !
  • 个人博客网站实现微信扫码登录
  • 一起玩转Vue中的JSX:让你一次性掌握它的特性!
  • 2023 API 排行榜新鲜出炉!第一名实至名归!!
  • 30 个 Javascript 知识点总结,总有你不会的!
  • 谷歌云为医生推出专用生成式AI工具,临床信息一键搜索
  • Netflix 如何真正使用 Java
  • 程序员在 AI 时代何去何从?深圳巅峰对决 | Q推荐
  • 这件事,已被大学生持续关注了 5 年……
  • 玩转并发编程!没到 35k 的 Java 开发都值得好好读一读 | 极客时间
  • MyBatis-Plus主键生成策略[MyBatis-Plus系列] - 第491篇
  • limit很慢,性能如何优化?