前言;
工作中时不时就会有需求,新介质需要添加,或者要另起一个新版本。比如信息流推荐里需要添加微博,小视频,结构体,需要做精英版,极速版等等。而且每次新场景新介质和老场景老介质之间特征有很大差异,不仅独有特征存在差异,共有特征也存在分布的巨大差异。导致老模型在新介质新场景上效果比较差。
这常常困扰着我们,因为新介质没有推全,模型没见过所以推荐效果不好,推荐效果导致我们迟迟又上不了线,反过来影响着模型效果提升,这就成了一个死循环。我们怎么才能更好解决这个问题呢?
介绍一些,之前我们遇到这些情况的解法吧,欢迎拍砖。
一 ,样本挖掘,新老场景的样本分布不一致,我们可以通过加权,正则,采样等方式,过滤出一批目标域近似的样本加强。让源域数据更接近目标域。比如精英版,我们就从老场景中过滤出精英人群消费的样本。通过规则我们尽量挖掘一些和新频道更相关的老样本,从而增强新模型的适应能力。
二 ,我们用新场景有少量相关的样本,可以先用老场景样本训练,再用新场景样本进行fintune。
三, 伪样本
有时候新老场景中新介质之间特征有很大差异,不仅独有特征存在差异,共有特征也存在分布的巨大差异。并且可能老场景中也没有或者很少相关的介质,那咋办呢,我们可以利用老模型,对新场景的内容进行打分,产生伪样本,然后用伪样本对新模型进行训练。如google《Meta Pseudo Labels 》在带标签数据集上训练老师模型,老模型在无标签数据集上生产伪标签,让学生模型学习。
伪样本的制作流程如下
伪样本在使用上,我们还要注意,如果模型已经有了数据,或者是小介质在大场景中,我们需要避免伪样本带来的负迁移。比如我们可以在伪样本训练的过程中新建一个对偶的上层模型,或者对上层做梯度阻断,只让伪样本更新特征向量,减少负迁移的产生。
另外在生成的伪样本上,我们也可以尽量挑选一些模型更置信的样本。如《ESAM: Discriminative Domain Adaptation with Non-Displayed Items to Improve Long-Tail Performance》我们可以通过选择两端模型比较明确的样本,而不是中间老模型也还比较模糊的样本。
四,经验式伪样本,基于的假设是,模型里大量的样本会被模型误判为高分,所以我们依据现有的一些比较致信的经验,制定一批伪样本,辅助模型纠正误差,流程如下图
制定依据的标准有三,1不在用户的画像里,或者用户最近的点击行为分类里,2,模型会对这些内容打高分,3,不是高热内容。规则1是经验上我们可以获取到比较致信的信息,规则2是模型要对这些内容做了误判,规则3是剔除高热导致模型打分高的情况。制定这些规则的依据是,我们认为用户对一个内容感兴趣主要是由三块兴趣组成,第一他的长期兴趣(画像表达),短期兴趣(点击序列表达),以及是否最近热点(统计热度),如果这三样都不符合,但是模型又给打了高分,那大概率是模型存在某些推荐偏差需要进行矫正。
得到伪样本后,可以作为一种负样本,也可以增加一个预估tower,作为最终融合。实践中我们采用了添加一个目标使用,好处有两点,一是直接作为负样本容易影响模型的正负样本比例,二是生成的伪样本量如果不是特别多,作为负样本没有添加目标效果直接。
实践上看,我们发现不仅是对新场景,就是成熟的业务场景中,加入经验式的伪样本,也可以明显提升业务指标,并且对生态指标也起到很好的矫正作用。
当然可以制作负样本,也就可以制作正样本,就不累述了。
类似的思路可以参考百度的《MOBIUS: Towards the Next Generation of Query-Ad Matching in Baidu's Sponsored Search》