微信视频号推荐算法上分神技!

2021-07-02 17:22:41 浏览数 (1)

作者:DOTA

躺平了一段时间之后,排行榜已经发生了翻天覆地的变化,emmm....不由的佩服年轻人的精力,作为老年选手,只能使用大局观了(此处内涵一下我大酒神,手动狗头)。好久没写文章了,本文拿出 炼丹笔记 里的一波上分技巧分享一下。

之前写过的微信视频推荐算法大赛的两篇文章:

  • 乘风破浪的微信视频号推荐算法
  • 当推荐系统遇上多模态Embedding

(1)几种Embedding

在词里面,一个词可能会有多个不同的意思,这个时候我们会使用Multi-sense的embedding来处理此类情况,同样的,CTR/CVR任务随着上下文的不同也会有不同的意思,Operation-Aware的embedding可以帮助我们在不同的上下文中学习到不同的特征表示。

01

OneHot Embedding

One-hot embedding是最早的embedding,它可以很好地表示类别信息,有就在特定位置标记为1,没有就是0,但是one-hot embedding却存在非常大的一个问题,在做关联操作的时候,我们会得到非常多的“不合理”的0。

比如有三种颜色:红|粉红|蓝;有两种性别:男|女,用one-hot表示二者的关系,假设满足男和红是1,那么其他的组合全部都会是0,很明显,这是不合理的,因为男和粉红以及男和蓝的关系肯定是不一样的,这类比到搜索推荐中也是一样,我们用one-hot表示用户和某个视频的关系,存在关联就是1,没有就是0。

现在来了一个视频,历史上用户没有和该视频有过明显的关联,那么我们的用户和该视频的关联性就会变为0,很明显这是有问题的。所有one-hot的形式是不足够的。

02

Normal Embedding

Normal embedding就是我们常说的embedding操作,我们将每个类别变量映射到一个低维度的dense向量上面,得到一个新的向量,后面再用该向量去做对应的操作。这么做相较于one-hot embedding的优势就较为明显了,同样的现在来了一个商品,历史上该用户没有和该商品有过明显的关联,但我们的用户和该商品的关联性在这个时候一般也不会是0。

03

Operation-aware embedding

Operation-aware embedding 故名思议就是和Operation相关的embedding,一个operation对应一个embedding(注:相同的操作在不同的特征上也被认为是不同的操作),我们发现原先我们的类别特征每次转化为一个embedding向量,想再是个embedding向量,

  • Normal embedding:
  • Operation-aware embedding:

(2)特征交叉

如果直接将两个特征的关系拼接起来会得到非常稀疏的表示,并且会因为训练不充分导致效果不佳,FM等模型用积(内积/外积)的形式来表示两个潜在向量之间的关系。同时大量的实验也验证来这一点带来的好处。

  • LR
  • Poly2
  • FM
  • FFM
  • MLP
  • WDL(DLRS16)
  • DeepFM(IJCAI17)
  • NFM(IJCAI17)
  • AFM(IJCAI17)
  • xDeepFM(KDD19)
  • TFNET(SIGIR20)
  • ONN/NFFM(Arxiv19)
  • AoAFFM(AAAI20)
  • AutoFIS(KDD20)

上面所有的模型可以大致分为四个部分,特征embedding,特征低阶高阶显示交叉,特征隐式交叉,特征筛选。具体文章可以看 炼丹笔记 之前的文章《CTR神经网络特征交叉汇总》。

ONN和xDeepFM是目前在数据竞赛中经常用到的模型(据本人所知,2020年之前的CTR竞赛最多的处理categorical的特征还是这两类模型),19年的腾讯赛冠军也是用的NFFM模型,二者的对比如下(18年的腾讯数据),整体来看,NFFM的效果要略好于xDeepFM,但二者融合效果还是极棒的!

目前神经网络的特征交叉研究的方向主要是:

①.深化二阶特征的交叉(内积,element-wise,加入attention系数,加入张量细化);

②.探索显示的高阶交叉;

③.探讨噪音&冗余特征的处理;

④.探索embedding的合理性;

(3)多任务学习不可避免的问题

短视频推荐等问题中, 用户的满意程度很难衡量,我们需要从用户的点击,是否看完视频, 分享,喜欢,评论等角度来刻画,所以多任务学习在推荐领域已经成为主流的方法。但是在使用MTL建模时,在我们调整模型的时候经常会碰到下面的现象:

  • 跷跷板现象:某一个任务的指标上升,但是另外一个任务的指标会下降;

那么是否可以通过利用不同任务的信息共享做到多个任务的指标同时上升呢?

做深度多任务学习不可避免的都会碰到下面的几个问题:

  • 不同任务的loss设计问题(辅助loss设计);
  • 不同任务之间特征层的共享问题(如何避免负迁移);
  • 不同任务之间的loss权重设计(有些任务是MSE,有些是二分类)等;
  • 模型优化,不同任务如何优化;(不同任务不同梯度设计等)
  • 什么样的任务使用MTL任务是最好的, 能带来较大的帮助?(理论暂无)
  • 其他

如何做到MTL任务能帮助我们多个任务提升?在 炼丹笔记 文章《多任务学习如何做到你好我也好?》中介绍了在多任务loss固定的情况下很好地缓解了这些问题,并且给所有的任务带来了不错的提升。

(4)正负反馈的艺术

做数据挖掘相关的朋友,大多数都听说过特征工程这个艺术的词汇,却鲜有人知道标签工程这个伟大的词汇,诶,为什么很少有人知道呢?因为这个是我们自己造出来的,轻喷......但是这个词却真的非常契合该章节的核心思路,大家都知道标签脏或者模糊的问题,这个是所有数据里面不可避免的,那么如何解决或者缓解此类的问题呢?让标签更加置信....

无论是显性反馈还是隐性反馈都能反映用户对商品的意见,这对于学习推荐中的用户偏好至关重要。然而,目前大多数推荐算法只关注隐式的正反馈(如follow),而忽略了其他信息丰富的用户行为。然而联合考虑显式/隐式和正/负反馈,才可以了解用户的无偏偏好。具体细节可以在《颤抖吧,标签工程》找到。

在推荐系统中,显式和隐式的反馈都是有价值的,许多工作使用特征mapping以及迁移学习的方式来构建显示和隐式反馈的关系,目前大多数算法使用多任务学习方式将显式和隐式反馈结合来联合处理ranking和rating的任务。

参考资料

  • 腾讯赛霸榜神技ONN_NFFM
  • 曾今的CTR竞赛王者NFM
  • CTR神经网络特征交叉汇总!
  • 多任务学习如何做到你好我也好?
  • 颤抖吧,标签工程来了!

0 人点赞