文章插图
整个推荐漏斗是分层设计的,每一层都做了过滤与截断 。如何在过滤截断的分层设计中达到效率最高呢?前面也提到会做模型的联合训练 。另外,特征设计的维度上也可以做相关的设计 。这里也存在一些问题:
- 首先,为了提升漏斗通过率,召回和粗排直接拟合精排打分或者精排序,会导致马太效应进一步加强 , 此时,召回/粗排模型并非用户行为驱动学习过程,而是拟合漏斗 。这不是我们希望看到的结果 。正确的做法是推荐漏斗各层模型解耦合设计,而不是直接拟合下层的漏斗 。
- 第二是粗排方面 , 理论上与召回靠得更近 , 本质上相当于是统一召回的出口 。所以粗排这一层,可以引入更多召回的信号,例如协同推荐的人群投票信号,图索引的路径等等,以便粗排能够与召回队列联合优化,使得进入精排的资源的召回效率能够最优化 。
- 第三是计算复用,在降低计算量的同时又能够提升模型的鲁棒性 。此处要注意的是,常有级联类的模型,第二级模型使用第一级模型的打分作为特征,这种做法的风险很大,因为模型最终的预估值是不稳定的分布,如果直接使用第一级模型的预估值当做特征,会使得下层模型有非常严重的耦合,造成系统的不稳定 。
三、算法接下来介绍核心算法的设计 。
1、系统视角下的排序模型首先来看推荐排序模型 。一般认为,精排是推荐系统中精度最高的模型 。业界有一种观点认为粗排附属于精排,对着精排学就可以了 , 但具体实践中发现粗排并不能直接对着精排来学 , 可能会带来很多问题 。

文章插图
从上图可以看出,粗排与精排的定位不同 。一般来说,粗排的训练样本与精排一样 , 也是展现样本 。每次召回候选供粗排打分的结果有数万条之多 , 这里面 99% 以上的资源是没有被展现的,而模型仅使用最终展现的十几条资源来做训练,这就打破了独立同分布的假设,在离线模型分布差异极大 。这种情况在召回是最为严重的,因为召回的候选集都是数百万、数千万甚至数亿 , 最终返回的结果大多数也都是没有被展现的,粗排一样相对也比较严重,因为候选集通常也在数万级别 。而精排就相对好很多,通过了召回与粗排两层漏斗后,资源的基础质量是有保证的,它主要做优中选优的工作 。因此 , 精排在离线分布不一致问题不是那么严重,不需要过多地考虑样本选择偏差(SSB)的问题,同时由于候选集合?。?梢宰鲋丶扑?,精排重点在于特征交叉 , 序列建模等 。
但是粗排这一层,并不能直接对着精排学,也不能直接做类似于精排的重计算,因为其计算量是精排的数十倍,如果直接用精排的设计思路,线上的机器是完全不可承受的,所以粗排需要高度的技巧平衡性能与效果,它是一个轻量级模块 。粗排迭代的重点与精排不同,主要解决样本选择偏差 , 召回队列优化等问题 。由于粗排与召回关系紧密,更关注的是返回精排的数千资源的平均质量,而不是精确的排序关系 。精排则是与重排关系更紧密,更关注的是单点的 AUC 精度 。
因此在粗排的设计上,更多的是做样本的选择与生成,和泛化特征与网络的设计 。而精排的设计可以做复杂的多阶交叉特征、超长序列建模等等 。
2、超大规模离散 DNN 的泛化前面介绍的是宏观层面的,下面来看一下微观层面 。

文章插图
具体到模型的训练过程,目前业界主流的是使用超大规模的离散 DNN,泛化问题会是比较严重的 。因为超大规模离散 DNN,通过 embedding 层,主要做的是记忆的功能 。参见上图,整个 embedding 空间是非常庞大的矩阵,通常都是千亿或者万亿行,1000 列 。所以模型训练都是全分布式 , 数十乃至上百台 GPU 做分布式训练 。
理论上,对于这么大的矩阵 , 并不会直接做暴力计算,而是采用类似矩阵分解的操作 。当然这个矩阵分解和标准的 SVD 矩阵分解并不一样,这里的矩阵分解是先学到低维的表征,通过 slot 之间的 parameter 的 share 来降低计算跟存储量,也就是分解成两个矩阵的 learning 的过程 。首先是特征、表征矩阵,会学习特征跟低维嵌入的关系 , 这个嵌入很低,通常会选择十维左右的嵌入 。另外一个是嵌入和神经元矩阵,每个槽位之间的权重是共享的 。通过这种方式既降低了存储量,又能够提升效果 。
推荐阅读
- 面膜排行榜前十名 按照效果排名的面膜推荐
- 谁说国货护肤品现在不好?平替外国大牌的国货护肤品推荐
- 猫薄荷对猫有什么作用百度百科 猫薄荷对猫有什么作用
- 2024最火女发推荐:从烫到染,引领潮流的100多款发型
- 盘龙香百度百科 盘龙香的养殖方法与注意事项
- 如何在百度上回答别人的问题
- 什么样的内容是百度认为的优质内容
- 面向推荐系统的深度强化学习算法研究与应用
- 检测文章原创度的免费软件有哪些,百度检测文章原创
- 推荐一部历史古装美剧,要剧情有剧情,要看点有看点
