背景
事实上,在推荐系统的学术研究中,我们过于关注模型的创新,而忽视了落地可行性以及实用性。这与模型的新颖度和复杂度不同,是另外一个层面的值得我们考虑的问题。因此,本文中所推荐的论文,是针对推荐系统的定期重训练需求设计的模型。本人认为这是一个不错的话题,因此推荐给大家。但是,本文并非对论文的翻译,而是将文中的想法和思路简明扼要地传递给大家,如想了解论文的全貌还请精读原始论文。
定期对推荐模型进行重训练是十分重要的。因为时间不会为了推荐系统而停止,但离线训练模型的结果却会。也就是说,我们不能用一个月前的离线训练结果来为此刻的用户做推荐。因为,用户的偏好可能随着时间已经发生了改变。这也是重训练的意义所在。我们可以定期更新用户的交互数据,来对模型进行重训练。
挑战
传统的重训练方式需要每隔一段时间重新训练整个用户数据,比如Period0用D0训练好模型之后上线,经过Period1服务用户一段时间后产生用户数据D1,因此为了捕捉用户当前的兴趣偏好,需要一起重新训练之前庞大的历史用户数据D0和新增加的用户数据D1。
以上介绍的传统重训练在策略的选择和资源的消耗上都是具有挑战的。
- 挑战:历史数据量随着时间的推移会越来越大,那么每一次重新训练数据量就越来越大,训练时间也会越来越长,消耗也就越来越大。 解决方案:针对历史数据,模型无需再进行模型训练。也就是说,我们只需要训练一次用户的历史数据即可。在未来的若干次重训练中,我们仅需要训练增量数据(用户新产生的数据)即可。这不仅避免了历史数据的重复计算,而且减少了训练能耗。
- 挑战:重训练只依据用户产生的新数据来更新模型,少量的新数据能够精确、全面、稳定地表达用户偏好信息呢? 解决方案:基于增量数据规模小的特点,模型采用了迁移的思路,将学习历史训练数据的经验,迁移到新的增量数据的学习上。这就避免了重训练仅包含增量数据的问题。
因此作者设计了一种顺序元学习的方法(SML)。该元学习机制是在顺序数据上,所以被命名为顺序元学习方法。
模型
整个模型可以简化为两个部分:
(1)表达转移组件。构建一个表达传递组件,将先前训练中获得的知识转移到新交互的训练中。我们将传递组件设计为卷积神经网络(CNN),该卷积神经网络将先前的模型参数输入为常量,将当前模型的输入作为可训练参数。合理性在于,先前训练中获得的知识会集中在模型参数中,这样,表达性神经网络就应该能够将知识提炼到所需的目的。
重训练的流程可以由下图看到:其中,为当前时刻,表示之前的推荐模型,是基于新的数据的推荐模型。整个转移组件的作用是联合历史推荐模型和新数据推荐模型的知识,并服务于下一时刻的预测。
(2)顺序训练方法。将提出的表达转移组件用于对未来一段时间的推荐,以优化转移组件在推荐上的表现。除了对新收集的交互进行常规训练外,我们还对下一个时间段的未来交互进行了传输CNN训练。因此,CNN可以了解如何将旧参数与当前参数结合起来,目的是预测附近的用户互动。每个时间段的重新训练是一项任务,它具有当前时间段的新交互作为训练集,而下一时间段的将来交互作为测试集。训练集为历史数据与当前时段的新的交互,测试集为下一时间段的未来交互数据。具体顺序性的训练算法如下图所示:
更多模型细节和训练方法请移步论文原文:
Paper: How to Retrain Recommender System? A Sequential Meta-Learning Method
Link: https://arxiv.org/pdf/2005.13258.pdf
Code: https://github.com/zyang1580/SML