背景
推荐系统在信息时代扮演着越来越重要的作用。为了使模型在动态的环境中保持好的性能,实际的推荐系统往往都需要定期地进行重训练。而怎样更好地进行重训练是一个实际的且具有高价值的问题,但是学术界却很少进行讨论。在本文之前,主要存在以下几类方法:(1)Full-retraining,这种方结合所有历史与新数据集一起对模型进行重训练。这类模型往往可以较好地捕捉用户整体的兴趣,但是由于历史数据的比例过大,其会过多地强调长期兴趣而一定程度忽略近期的短期兴趣,更糟糕的是,这种方法往往会有较大的存储以及计算资源的开销。(2)fine-tune,它只用新收集的数据来进行训练,这类方法优点在于资源消耗少,但会遗忘一些长期的兴趣。(3)基于采样的方法,是前面两种方法的折中,其后采样一部分历史数据来保存,并与新数据一起来加入重训练,这种方法可以同时捕捉长短期兴趣,但是其性能往往不是最好,且人为设定的采样方法只使用于预设定的推荐场景,无法推广。并且这些方法存在一个共同的缺点就是没有显式地把重训练的目标(在下一阶段推荐效果好)加入到优化过程中去,很难保证获得最优结果。为了显式地把重训练目标加入优化过程以及克服之前方法的一些缺点,我们提出了一种新的重训练方法(SML)。我们的方法主要有以下两个核心的想法:
历史数据已经训练过历史模型了,那么历史的模型理论情况下已经包含历史数据中大部分信息。所以可以用历史的模型去代表历史数据。
可以结合元学习的思想,利用下一阶段的数据来学习一个可以结合历史模型与新数据的元模型,从而实现把重训练目标显式地加入优化的目的。
基于这两点想法,我们为重训练设计了一个新的模型框架,且设计了一个可以结合历史与当前知识的知识迁移组件Transfer以及框架对应的训练方法SML。
我们设计的框架如上图所示,其共有四部分: 是历史模型,在重训练阶段是固定的,包含历史数据的知识; 被用来捕捉新数据的知识;Transfer被用来结合 , 中的知识,是本框架关键模块; 是最终得到的模型,其期望包含两部分知识,同时包含长短期兴趣,是transfer的输出。除 外,所有的部件需要被更新。Transfer设计极为关键,需要有正确结合两部分知识的潜力,且还需设计一个训练算法使得框架获得所被期望的能力。Transfer的设计如图3所示,其包含三部分:stack layer主要对输入(参数)进行整形成图片形式。其会获得一个具有三列的矩阵输出;卷积层,采用特殊的1维卷积,作用在不同的W的同一维度之间,被期望可以捕捉兴趣的出现,消失,以及迁移等信息;最后一部分,全连接(FC)层主要捕捉参数不同维度之间的关系,输出(output)层用来重构生成新参数 。模型的训练方式总结如算法1,在每一个重训练阶段,其会交替地训练 与Transfer( ).也即在每一轮训练中,有两个关键的步骤:(1)固定住Transfer,在当前数据 上训练 ,以捕捉当前阶段数据中的知识;(2)固定 ,在 上进行训练transfer的参数 ,引导transfer朝着生成使得下一阶段表现好的新模型的方向更新,正确地或者泛化性更好地结合 与 中的知识。步骤(2)的操作实现了把重训练目标直接加入到优化过程的目标。主要验证模型推荐效果以及计算开销。关于推荐性能,我们在两种不同类型的数据集上进行了验证。Adressa是新闻数据集,其时效性强,短期兴趣更重要。Yelp是用户与商户的的交互数据,其时间跨度长,长期(固有)兴趣更加重要。在论文我们使用了recall@k,NDCG@K两种指标,这里我们仅展示了recall。表1展示了测试阶段的平均推荐效果,可以看到,我们基于MF实现的SML取得了最好的结果,并且相较于其他MF方法,我们的SML可以在两种不同类型的数据集上都表现的好,这证明了我们方法的优越性,其可以对不同的推荐场景自适应。关于模型的计算资源消耗,对比了测试阶段的训练开销,其结果如表2所示,可以看到相较于Full-retrain,我们的方法大约快了18倍。相较于与Fine-tune,SML本身会更慢,但是其变体SML-S会更快,这证明了我们的方法的计算开销小。