Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)

来源:

  • KDD'2023
  • Google Research

长尾问题是个老大难问题了。

在推荐中可以是用户/物料冷启动,在搜索中可以是中低频query、文档,在分类问题中可以是类别不均衡。长尾数据就像机器学习领域的一朵乌云,飘到哪哪里就阴暗一片。今天就介绍来自Google的一篇解决长尾物品推荐的论文。

真实推荐场景下,大部分物品都是长尾物品,即小部分物品占据了绝大部分的交互,大部分物品的交互次数很少。人们一直都致力解决这个问题,但往往不能在真实环境下部署,要么对整体的效果大打折扣。在这篇论文里,作者致力于维持整体效果、保成本的条件下提高长尾物品的推荐效果(是否需要专门评估在长尾物品上的推荐效果?)。为了达到这个目标,作者设计了Cross Decoupling Network (CDN)。

CDN借鉴了计算机视觉里的一个想法[1](借鉴的这篇论文也是研究长尾问题的,感觉值得阅读一下),该方法的核心思想是两阶段的学习策略:第一阶段在长尾分布的数据集上学习物品表征,第二阶段在平衡的数据集上训练预测器(如分类器)。但是这种方法在推荐场景中,这种方法会导致严重的遗忘问题,即第一阶段学到的知识会在第二阶段遗忘。并且两阶段训练比联合训练的成本更高。而CDN则兼顾了解耦(decoupling)的思想,并克服了遗忘问题。

长尾问题分析

长尾问题的本质是什么呢?

先来抛个砖:个人认为长尾物品推荐效果不好的本质原因是否是因为物品的特征计算不准确,由于交互较少,按照正常的计算逻辑得到的结果是有偏(biased)的。感觉现在推荐里卷来卷去,如何去偏慢慢得到大家的重视了。

论文中,作者理论上分析(有点意思,具体分析可以参考论文,但是感觉有点牵强)得到长尾问题不利于整体效果的原因是因为对用户偏好的预测是有偏的,这个偏差又来自两部分(这里借鉴石塔西大佬的解释和观点[2]):

  • 物品本身特征学习的质量与其分布有关。对于热门物品,是那些容易记忆的特征发挥作用,比如item id embedding,如果学好了,是最个性化的特征。但是对于长尾物品,恰恰是在模型看重这些特征上都没有学习好(因为缺少训练数据,不可能将长尾item id embedding学好)。
  • 用户对物品的偏好不容易学好。训练集中正样本以热门物品居多,从而让user embedding也向那些高热物品靠拢,而忽视长尾物品。

对于第一种偏差,要解决模型对那些冷启友好特征不重视的问题。对于冷启,单单增加一些对冷启友好的特征是没用的,因为模型已经被老用户、老物料绑架了。以物料冷启为例,模型看重的item id embedding这些最个性化的物料特征,但是恰恰是长尾物品没有学好的。长尾物品希望模型多看重一些可扩展性好的特征,比如tag / category,但是模型却不看重

CDN从以下两个方面解决长尾问题:

  • 物品侧,解耦头部和尾部物品的表征的学习,即记忆(memorization)和泛化(generalization)解耦。具体做法是把记忆相关的特征和泛化相关的特征分别喂进两个MOE中,让这两个MOE分别专注于记忆和泛化,然后通过门控机制对二者的输出进行加权。
  • 用户侧,通过正则化的双边分支网络(regularized bilateral branch network[3])解耦用户的采样策略。该网络分成有两个分支,一个分支在全局数据上学习用户偏好,另一个分支在相对平衡的数据上学习。

CDN

CDN的整体结构如上图所示,左右两边分别对应物品侧和用户侧。

Item Memorization and Generalization Decoupling

既然要通过划分记忆和繁华特征来解耦,那么怎么划分输入的特征呢?

记忆特征(Memorization features)

记忆特征使模型能够记住数据集中出现频繁的模式,通常是满足以下性质的类别特征:

  • Uniqueness。对于特征空间\(\mathcal{V}\),存在单射函数\(f_{in}:\ \mathcal{I} \rightarrow \mathcal{V}\);
  • Independence,即特征空间的任意两个元素之间是独立的,互不影响的。

对于记忆特征的embedding,其一般只会被指定的物品更新(uniqueness),并且不同物品的记忆特征一般不同(independence)。因此,记忆特征一般只记住与物特定品相关的信息。物品ID就是一种很强的记忆特征(还有哪些记忆特征呢?)。

泛化特征(Generalization features)

泛化特征通常是那些能学习到用户偏好和物品之间关系的特征,这些特征通常是物品间共享的特征,如物品的类别、标签等。

物品表征学习

作者采用基于频率的门控的MoE(Mixture of Expert)来解耦记忆和泛化。

对于一个训练样本\((u, i)\),物品表征表示如下(方便起见,向量没有用黑体):

\[y = \sum_{k=1}^{n_1} G(i)_k E_k^{mm}(i_{mm}) + \sum_{k=n_1 + 1}^{n_1 + n_2} G(i)_k E_k^{gen}(i_{gen})
\]

其中\(E_k^{mm}(\cdot)\)表示专注于记忆的第\(k\)个专家网络,输入为记忆特征\(i_{mm}\);\(E_k^{gen}(\cdot)\)表示专注于泛化的第\(k\)个专家网络,输入为泛化特征\(i_{gen}\)。注意,这些特征一般是把对应特征的嵌入拼接起来。\(G(\cdot)\)为门控函数(输出为向量),\(G(i)_{k}\)表示门控输出的第\(k\)个元素,且\(\sum_{k=1}^{n_1 + n_2} G(i) = 1\)。简单的理解,就是门控的输出对记忆和泛化网络的输出进行动态加权。此处的动态加权即是关键,即根据物品的热度动态调整记忆和泛化的比例。作者建议用物品频率作为门控的输入,即\(g(i) = softmax(W i_{freq})\)。

记忆和泛化解耦后,泛化的专家网络的更新将主要来自于长尾物品,而不会损害记忆专家网络从而导致整体性能的下降。

User Sample Decoupling

这一部分解耦的是用户的交互,提出了正则化的双边网络(Regularized Bilateral Branch Network):

  • main分支在原始数据\(\Omega_m\)上训练。显然这个数据集中物品的交互是有偏的,这对用户在长尾物品上的偏好的学习是有偏的;
  • regularizer分支在均衡后的数据上\(\Omega_r\)训练,即对热门物品的交互进行降采样。显然,用户对长尾物品的偏好学习被提权了。

这两个分支有一个共享的基座(User Tower),以及各自一个分支特定的网络。在训练阶段,对于\((u_m, i_m) \in \Omega_m\)和\((u_r, i_r) \in \Omega_r\)分别进入main和regularizer分支,不同分支计算出来的用户表示为:

\[x_m = h_m(f(u_m)),\ x_r = h_r(f(u_r))
\]

其中\(f(\cdot)\)就是两个分支共享的基座,\(h_m(\cdot), h_r(\cdot)\)分别是两个分支特有的。main和regularizer可以同时训练,但是在推理时只使用main分支。

Cross Learning

最终物品和用户的表征通过一个\(\gamma\)-adapter来融合,并控制训练过程中模型的注意力转移到长尾物品上。训练时的logit计算方式为:

\[s(i_m, i_r) = \alpha_t y_m^T x_m + (1 - \alpha_t) y_r^T x_r
\]

其中\(\alpha_t\)就是\(\gamma\)-adapter,它是训练轮数的函数:

\[\alpha_t = 1 - (\frac{t}{\gamma \times T})^2,\ \gamma > 1
\]

其中\(T\)是总的训练轮数,\(t\)是当前轮数,\(\gamma\)是正则化率,对于越不平衡的数据集,\(\gamma\)的取值一般越大。得到\(s(i_m, i_r)\)后,用户对物品的偏好通过以下方式计算:

\[p(i | u) = \frac{e^{s(i_m, i_r)}} {\sum_{j \in \mathcal{I}} e^{s(j_m, j_r)}}
\]

损失函数为:

\[\begin{align}
L &= - \sum_{u \in \mathcal{U}, i \in \mathcal{I}} \alpha_t\ \hat{d}(u_m, i_m)\ log p(i | u) + (1 - \alpha_t)\ \hat{d}(u_r, i_r)\ log p(i | u) \\
&= - \sum_{u \in \mathcal{U}, i \in \mathcal{I}} log p(i | u)\ [\alpha_t\ \hat{d}(u_m, i_m) + (1 - \alpha_t)\ \hat{d}(u_r, i_r)]
\end{align}
\]

其中\(\hat{d}(u_m, i_m), \hat{d}(u_r, i_r) \in \{0, 1\}\)分别表示\(\Omega_m, \Omega_r\)中的用户偏好(这里论文描述的不是很清楚)。

吐槽以下:论文在训练数据构造和训练过程讲的都不是很清楚。比如同时训练main和regularizer,输入的样本分别是什么,\(u_m, u_r\)是同一个用户吗,\(i_m, i_r\)是用一个物品吗?还有就是\(s(i_m, i_r)\)计算结果是什么含义?

总结

总体来说,这篇论文对长尾问题的认识还是很深的,也确实让人有所启发。特别关于特征解耦的那一部分,感觉以后可以实践一下。但是在后续的两个分支部分语焉不详,且缺乏相关的实现细节,或许是本人公里不够,一些细节错过了。还请路过的大佬指正。

参考


  1. Decoupling representation and classifier for long-tailed recognition, ICLR 2020.

  2. https://zhuanlan.zhihu.com/p/651731184:似曾相识:谈Google CDN长尾物料推荐.

  3. BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition, CVPR 2020.

Empowering Long-tail Item Recommendation through Cross Decoupling Network (CDN)的更多相关文章

  1. 【RS】RankMBPR:Rank-Aware Mutual Bayesian Personalized Ranking for Item Recommendation - RankMBPR:基于排序感知的相互贝叶斯个性化排序的项目推荐

    [论文标题]RankMBPR:Rank-Aware Mutual Bayesian Personalized Ranking for Item Recommendation ( WAIM 2016:  ...

  2. 13、Next Item Recommendation with Self-Attention---自注意力+CML

    一.摘要: 自注意力机制------从用户历史交互中推断出项目-项目关系.学习每个项目的相对权重[用来学习用户的暂时兴趣表示] 二. 模型: 一部分是用于建模用户短期意图的自注意力机制,一部分是建模用 ...

  3. [SIGIR2020] Sequential Recommendation with Self-Attentive Multi-Adversarial Network

    这篇论文主要提出了一个网络,成为Multi-Factor Generative Adversarial Network,直接翻译过来的话就是多因子生成对抗网络.主要是期望能够探究影响推荐的其他因子(因 ...

  4. 20230225 TI Electromagnetic compatibility testing methods and standards

    Hello, and welcome to the TI Precision Labs video, Introducing Electromagnetic Compliance Standard T ...

  5. CABaRet: Leveraging Recommendation Systems for Mobile Edge Caching

    CABaRet:利用推荐系统进行移动边缘缓存 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文.由于时 ...

  6. 《DRN: A Deep Reinforcement Learning Framework for News Recommendation》强化学习推荐系统

    摘要 新闻推荐系统中,新闻具有很强的动态特征(dynamic nature of news features),目前一些模型已经考虑到了动态特征. 一:他们只处理了当前的奖励(ctr);. 二:有一些 ...

  7. 近年Recsys论文

    2015年~2017年SIGIR,SIGKDD,ICML三大会议的Recsys论文: [转载请注明出处:https://www.cnblogs.com/shenxiaolin/p/8321722.ht ...

  8. Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases

    INTRODUCTION   In modern distributed cloud services, resilience and scalability are increasingly ach ...

  9. Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue

    概要 本章对Java.util.concurrent包中的ConcurrentHashMap类进行详细的介绍.内容包括:ConcurrentLinkedQueue介绍ConcurrentLinkedQ ...

  10. Windows Phone自带的语音识别

    WindowsPhone下语音操作包括: 1.程序内部的语音识别,用户可以通过语音识别进行输入或完成相关任务 2.控制程序的语音命令,控制程序启动.打开,并可对页面跳转等进行操作 这篇文章将构建一个简 ...

随机推荐

  1. Java的CAS操作

    介绍 CAS 技术是为了解决问题而生的,通过 CAS 我们可以以无锁的方式,保证对共享数据进行 "读取 - 修改 - 写回" 操作序列的正确性. CAS 是乐观锁设计思想的实现.C ...

  2. 聊聊ElasticeSearch并发写的乐观锁机制

    概述 ES的多客户端并发更新是基于乐观并发控制,通过版本号机制来实现冲突检测. 关键对象 ES的老版本是用过_version字段的版本号实现乐观锁的.现在新版增加了基于_seq_no与_primary ...

  3. 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览

    百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Infer ...

  4. 玩转服务器之数据传输篇:如何快速搭建FTP文件共享服务器

    FTP 文件共享服务器介绍 FTP服务(File Transfer Protocol,FTP)是最早应用于主机之间数据传输的基本服务之一,是目前使用最广泛的文件传送协议.FTP文件共享服务器在日常办公 ...

  5. [MAUI程序设计] 用Handler实现自定义跨平台控件

    @ 目录 Handler 与Xamarin.Forms实现的区别 为什么要用Handler代替Renderer 解耦 生命周期管理 更细粒度的控制 用Effect来实现呢? 自定义手势监听控件 在各平 ...

  6. Python 列表、字典、元组的一些小技巧

    1. 字典排序 我们知道 Python 的内置 dictionary 数据类型是无序的,通过 key 来获取对应的 value.可是有时我们需要对 dictionary 中的 item 进行排序输出, ...

  7. Galaxy Release_20.09 发布,新增多个数据上传组件

    Galaxy Project(https://galaxyproject.org/)是在云计算背景下诞生的一个生物信息学可视化分析开源项目. 该项目由美国国家科学基金会(NSF).美国国家人类基因组研 ...

  8. 【技术积累】Python中的NumPy库【一】

    NumPy库是什么 NumPy是Python科学计算的核心库之一,用来进行科学计算,数值分析等矩阵运算.主要提供了以下几种功能: 1.多维数组(ndarray)对象,可以进行快速的数值计算和数组操作: ...

  9. asp.net程序通过Microsoft Azure令牌授予流获取UserInfo终结点实现单点登录--隐式授予流(OIDC协议)

    1. Microsoft Azure令牌授予流 令牌授予流种类如下: 本章节采用: 隐式授予流: 2. 隐式授予流的实现 流程:重定向到authorize--->拿到access_token-- ...

  10. 组合数学知识整理_USTC-IAT期末复习版(已完结)

    组合数学知识整理_USTC-IAT期末复习版(已完结) 第一章 排列与组合 第二章 递推关系与母函数 第三章 容斥原理与鸽巢原理 第四章 polya定理