如何将一首没有用户交互行为的歌曲分发给用户呢?我们采用的是间接建模方案:把歌曲到用户(I2U)问题转化为歌曲-相似歌曲-用户(I2I2U)问题,即先找到与这首冷启动歌曲相似的歌曲,然后这些相似的歌曲与用户有一些历史交互记录,例如收藏等比较强的信号,可以找到一批目标用户。然后将这首冷启动歌曲分发给这些目标用户。
具体的做法如下,首先第一步是监督学习的任务。在歌曲特征方面,除了刚才提到的多模态信息外,还包括歌曲的标签信息,如语种、曲风等,以此来帮助我们进行个性化建模。我们将所有特征聚合到一起,输入到一个 encoder 中,最终输出歌曲向量,每个歌曲向量的相似度可以通过向量内积来表示。学习的目标是基于行为计算出的 I2I 的相似度,即协作过滤的相似度,我们在协同过滤数据的基础上加了一层后验校验,即基于 I2I 推荐后,用户反馈效果较好的一对 item 对作为学习的正样本,以确保学习目标的准确度。负样本采用全局随机采样构建。损失函数采用 BPR loss。这是推荐系统中非常标准的 CB2CF 的做法,即基于歌曲的内容、标签信息去学习歌曲在用户行为特征上的相似度。
第二步迭代,在上述做法的基础上引入了对比学习的方法。之所以要引入对比学习,是因为这一套流程学习的仍然是 CF 数据,需要基于用户的交互行为进行学习,会出现“热门物品学得多,冷门物品学得少”的问题,导致存在偏差。虽然我们的目标是希望从歌曲的多模态内容到歌曲的行为相似性进行学习,但实际训练中发现仍然存在热门和冷门的偏差问题。
因此我们引入了一套对比学习算法,旨在增强冷门 Item 的学习能力。首先,我们需要有一个 Item 的表征,这个表征是通过之前多模态 encoder 学习得到的。然后,对这个表征进行两个随机变换,这是 CV 中一些常见的做法,在特征上做随机的 mask 或者加噪。由同一个 Item 产生的两个经过随机变化的表征被认为是相似的,由不同Item 产生的两个表征被认为是不相似的,这样的对比学习机制是对冷启动学习的数据增强,通过这样的方式生成对比学习知识库样本对。
在特征增强的基础上,我们还引入了关联分组机制。
关联分组机制:首先计算 item 每一对特征之间的相关性,即维护一个相关性矩阵,且该矩阵会随着模型训练更新。然后依据特征间的相关性将 item 的特征分为 2 组,具体做法是,随机选择一个特征,然后将与该特征最相关的那一半特征放入一组,将剩下的放入另一组。最后分别对每组特征进行随机变换,从而形成对比学习的样本对。这样,一个 batch 内 N 个 item 将生成 2N 个 view,来自同一 item 的一对 view 作为对比学习的正样本,来自不同item的一对 view 作为对比学习的负样本。对比学习的 loss 采用 infoNCE,并与前面监督学习部分的 BPR loss 叠加作为最终 loss。