互联网大厂推荐算法实战 问答

特征工程

  • 为什么说,用物料的后验消费数据做召回存在“幸存者偏差”?能将这些消费数据用于排序吗?

  • 使用物料的后验消费数据做召回,会放大“马太效应”,对新物料不友好,如何缓解?


  • 解释什么是bias特征?你能举出哪些bias特征的例子?

  • bias特征怎样接入模型?能否和其他正常特征一起喂入DNN底层?为什么?


  • 某男性新用户对“体育”这个分类的喜好程度未知,如何填充?

  • 某新物料的后验指标未知,如何填充?

  • 对观看次数、观看时长这样的特征,如何做标准化?

  • 某个物料曝光2次,被点击1次,如何计算它的CTR?


  • 有一个特征“某文章过去1天的点击率是10%”,如何将其构建成一个类别特征,并喂入推荐模型?

Embedding

  • 为什么说Embedding提升了推荐算法的扩展性?

  • Embedding技术还能够将相似的物品或用户映射到相近的向量空间中,从而实现有效的相似度计算。这种相似度计算能够帮助推荐算法更准确地识别用户的兴趣和需求,提供更个性化、精准的推荐结果。

  • FFM针对FM的改进在哪里?

  • 简述阿里Co-Action Network的基本思想?


  • 简述Parameter Server是如何应对推荐系统“高维稀疏”的数据环境的?

  • 什么是异步并发(ASP)中的“梯度失效”问题?即使如此,为什么在推荐系统中仍然常用?

精排

  • FTRL是如何保证“在线学习”的稳定性的?

  • FTRL是如何保证解的稀疏性的?

  • FTRL是如何解决高维稀疏特征受训机会不均匀的问题的?


尽管 FFM 在模型表达能力上有所提升,但由于引入了额外的参数和存储需求,以及更长的训练时间,这可能限制了 FFM 在一些资源受限的场景中的应用。在实际应用中,需要根据具体情况权衡算法的性能和效率,选择适合的模型。

FFM 进行这些改进的目的是为了更好地捕捉不同字段之间的交互信息,提高模型的表达能力和泛化能力。通过引入字段的概念和字段向量,FFM 可以更准确地建模特征之间的相关性,特别是在具有大量特征且特征之间具有强相关性的场景下,有着较好的效果。

FFM相比于FM的缺点在哪里?(提示:效率)

相比于 FM,FFM 算法在效率方面存在一些缺点:

 参数数量更多:FFM 引入了字段矩阵,每个字段的每个特征都有一个对应的字段向量,这会导致模型的参数数量增加。相比于 FM 算法中只有全局隐向量的参数,FFM 的参数数量随字段和特征的增加呈线性增长,这可能会增加模型的训练和推断的计算负担。

尽管 FFM 在模型表达能力上有所提升,但由于引入了额外的参数和存储需求,以及更长的训练时间,这可能限制了 FFM 在一些资源受限的场景中的应用。在实际应用中,需要根据具体情况权衡算法的性能和效率,选择适合的模型。

  • FM相对LR的优势在哪里?

    • 不能只回答自动交叉

    • 是如何解决交叉特征太稀疏、受训机会少的问题的?

    • 是如何提高扩展性的?

  • FM对所有特征两两交叉,岂不是n^2的复杂度?

    • 回答是的,这道题直接fail

    • 回答不是,要追问FM的实际复杂度是什么?如何实现的?

    • FM 算法在计算特征交叉时需要考虑所有特征两两之间的组合,因此存在一个 O(n^2) 的复杂度。

    • 具体来说,在 FM 算法中,特征交叉是通过计算特征向量的内积来实现的。对于具有 n 个特征的数据集,FM 需要考虑 n^2 个特征组合(包括自身和对角线上的交叉)。这导致了一个 O(n^2) 的复杂度。

      然而,FM 算法具有一个重要的性质,就是计算特征交叉的过程可以通过矩阵乘法来加速。通过利用稀疏矩阵和矩阵运算的高效性质,可以将计算复杂度从 O(n^2) 降低到 O(kn),其中 k 是指定的模型维度。这样,即使特征非常多,在合理选择模型维度的情况下,FM 算法的计算效率仍然可以保持在一个合理的范围内。

      需要注意的是,FM 算法的计算复杂度主要涉及训练阶段,而在模型部署和推断阶段,可以利用预先计算好的参数来加速计算过程,从而减少实际的计算成本。

  • FM的缺点有哪些?

    • 提示:其中一个缺点是不灵活,怎么理解?

  • 推荐算法FFM相对于FM的改进有哪些?为什么要这么改进?

    FFM (Field-aware Factorization Machine) 是对 FM (Factorization Machine) 算法的一种改进。相比于 FM 算法,FFM 改进了以下几个方面:

  • 字段指导的特征交叉:FM 算法中,特征交叉是基于特征之间的内积进行计算的,无法区分不同特征的组合对不同字段的影响。而 FFM 引入了字段的概念,对不同字段的特征进行了区分,可以更好地捕捉不同字段之间的交互信息。

  • 字段的隐向量表示:FM 算法中,每个特征都有一个全局的隐向量表示,无法区分不同字段对应的特征之间的差异。而 FFM 引入了字段矩阵,为每个字段的每个特征引入了一个字段向量,可以区分不同字段之间的隐向量表示,进一步提升了模型的表示能力。

  • 模型参数的数量减少:相比于 FM 算法,FFM 在引入字段矩阵的同时,减少了模型参数的数量。FM 算法中,每个特征都有一个全局的隐向量,参数数量随特征的数量线性增长;而 FFM 模型中,每个特征只有一个字段向量,参数数量仅随字段的数量线性增长,大大减少了参数数量,提高了模型的训练效率。

  • 参数数量更多:FFM 引入了字段矩阵,每个字段的每个特征都有一个对应的字段向量,这会导致模型的参数数量增加。相比于 FM 算法中只有全局隐向量的参数,FFM 的参数数量随字段和特征的增加呈线性增长,这可能会增加模型的训练和推断的计算负担。

  • 存储空间更大:由于 FFM 引入了字段矩阵,需要存储每个字段的字段向量,这将占用更多的存储空间。特别是在具有大量字段和特征的数据集中,存储FFM模型所需的内存可能会成为一个挑战。

  • 训练时间更长:由于 FFM 引入了更多的参数,相比于 FM 算法,FFM 的训练时间通常更长。在数据量较大、字段和特征较多的情况下,FFM 可能需要更多的时间来训练模型。

  • 存储空间更大:由于 FFM 引入了字段矩阵,需要存储每个字段的字段向量,这将占用更多的存储空间。特别是在具有大量字段和特征的数据集中,存储FFM模型所需的内存可能会成为一个挑战。

  • 训练时间更长:由于 FFM 引入了更多的参数,相比于 FM 算法,FFM 的训练时间通常更长。在数据量较大、字段和特征较多的情况下,FFM 可能需要更多的时间来训练模型。


  • Wide & Deep是如何做到兼顾“记忆”与“扩展”的?

  • 什么样的特征进Deep侧?什么样的特征进Wide侧?

  • Wide & Deep论文原文中说,训练Wide & Deep侧分别使用了两种优化器,你觉得有哪些道理?


  • DCN解决的是什么问题?

  • DCN v1和v2的差别在哪里?

  • DCN有哪些缺陷?(提示:输入输出的维度)


  • 简述基于Transformer做特征交叉的原理?

  • Transformer做特征交叉的缺点有哪些?(提示:输入输出维度、时间复杂度)


  • 你在建模行为序列中的每个元素时,一般会包含哪些信息?如何Embedding?

  • 每个用户的行为序列长度不同,如何处理?Truncate很简单,关键是如何解决Padding的问题?

    • 不解决的话,两个完全不同的序列,因为被填充的大量的0,而被模型认为相似

    • 提示:可以看看TensorFlow Transformer的源码,看看人家是如何解决的?

  • Target Attention的时间复杂度

  • Self-Attention的时间复杂度


  • DIN的建模思路是怎样的?怎么理解“千物千面”?

  • 每到“双十一”之类的促销季,用户的购买行为与他之前短期行为有较大不同,应该如何建模?

    • 其实就是长序列建模的问题,简单套用SIM不是不可以,但是仍然有效率问题

    • 开放问题,考察候选人的经验,以及思路是否开阔

  • 简述SIM的建模思想?你觉得它的优缺点有哪些?

  • 如果想在召回或粗排中建模用户长序列,怎么做?

召回

  • 传统的协同过滤,User CF和Item CF,哪个在工业界更常用?为什么?

  • 在工业界,Item CF(基于物品的协同过滤)更常用。

  • 首先,Item CF具有更好的扩展性。当用户数量庞大时,User CF(基于用户的协同过滤)算法需要计算用户之间的相似度,这样的计算复杂度较高。而Item CF算法只需要计算物品之间的相似度,计算复杂度较低。在大规模的推荐系统中,Item CF更适合应用。

    其次,Item CF对于冷启动问题有更好的解决方案。在推荐系统中,冷启动问题是指对于新用户或者新物品的推荐困难。User CF需要有足够多的用户行为数据进行相似度计算,才能给新用户进行个性化推荐。而Item CF可以通过物品之间的相似度进行推荐,不需要用户的历史行为数据,因此对于新物品的推荐情况更好。

    此外,Item CF还具有更好的稳定性。User CF算法的计算结果受用户行为数据的影响较大,用户行为的变化可能导致推荐结果的变化较大。而Item CF算法是基于物品之间的相似度,相对稳定,不容易受到用户行为变化的影响。

    综上所述,基于物品的协同过滤(Item CF)在工业界更常用,主要是因为其具有更好的扩展性、较好的冷启动解决方案和更好的稳定性。

  • 大规模、分布式的CF是如何实现的?

  • 基于矩阵分解的协同过滤,要分解的矩阵是超级稀疏的,分解这样的矩阵,需要事先将它缺失的地位都填充0吗?

  • 对于基于矩阵分解的协同过滤算法,如果输入的用户行为矩阵是超级稀疏的,一般不需要事先将缺失的位置填充为0。

    矩阵分解的目标是将原始的稀疏矩阵分解为两个低秩的矩阵,其中一个矩阵表示用户-特征的关系,另一个矩阵表示特征-物品的关系。而稀疏矩阵的特点在于只有少数非零元素。

    如果对于所有缺失的位置都填充为0,那么这些零元素会被算法错误地视为用户对某个物品的喜好程度为0,从而影响模型的准确性。在实际应用中,更常见的做法是使用一些特殊的值来表示缺失的元素,例如使用NaN(Not a Number)或者其他用户不太可能给出的评分值。

    在进行矩阵分解时,一般会使用一种被称为优化目标的损失函数来对模型进行训练,这个损失函数会考虑到缺失位置的处理。通过最小化损失函数,可以得到能够较好地表示用户行为数据的低秩矩阵。

    因此,对于超级稀疏的矩阵,通常不需要事先将缺失的位置填充为0,而是将缺失的元素用特殊的值表示,并将其作为优化目标中的一部分进行模型训练。这样可以更好地应对稀疏矩阵的特点,并获得更准确的模型。


  • 召回模型中如何处理用户行为序列?

    • 回答简单的Pooling的,是常规操作

    • 有没有可能也做target attention?拿什么当target?


  • NCE Loss的基本思想与计算公式

  • NEG Loss的基本思想与计算公式?它与NCE Loss是什么关系?

  • Marginal Hinge Loss的基本思想与计算公式

  • BPR Loss的基本思想与计算公式


  • Sampled Softmax的基本思想与计算公式

  • Sampled Softmax中温度修正的作用?调高温度有什么影响?调低温度有什么影响?

  • 采样修正的Q(t)应该如何设置?


  • 从算法机理来阐述热门物料对模型的影响?

    • 大家都知道热门物料对推荐结果的个性化造成负面影响,我需要你回答出它是如何造成这一负面影响的

  • 为了打压热门物料,热门物料当正样本,应该降采样还是过采样?

  • 为了打压热门物料,热门物料当负样本,应该降采样还是过采样?为什么?


  • Word2Vec中,Skip-Gram和CBOW有什么区别?哪种算法对于罕见词、罕见搭配更友好?

  • Airbnb的I2I召回,相比于word2vec,在正样本上有哪些创新?合理性在哪里?

  • Airbnb的I2I召回,相比于word2vec,在负样本上有哪些创新?合理性在哪里?

  • Airbnb的U2I召回,是如何解决“预订样本”太稀疏这个问题的?

  • Airbnb的U2I召回,在负样本上有哪些创新?

  • 直接套用Word2Vec用作召回,在正样本的选择上有哪些局限性?

    • Airbnb是如何突破这一局限性的?

    • 阿里的EGES是如何突破这一局限性的?


  • 阐述FM用于召回的原理与作法

    • 线下如何训练

    • 线上如何预测

    • 如何做到对新用户更友好


  • 召回随机负采样在实践中到底是怎么做的?提示:

    • 你可以离线采样,借助Spark在更大范围内采样,怎么实现?

    • 你可以Batch内负采样,怎么实现?

    • 你可以混合负采样,怎么实现?

    • 阐述以上几种方法的优劣


  • GCN与DNN在迭代公式上的区别在哪里?(提示:GCN没那么玄,真的只是一个小差别)

  • 如何在一个超大规模图上,训练GCN召回模型?希望听到:

    • Mini-Batch的训练细节

    • 邻居采样,挑出重要邻居

    • 邻居采样时有小Trick,否则会造成数据泄漏

  • 如何在一个超大规模图上,进行GCN推理,得到各节点的Embedding?

    • 希望候选人意识到推理与训练的不同

    • 要避免重复计算节点的Embedding

    • 要避免“邻居采样”那样的随机性

粗排

  • 你对改进粗排有什么思路?或者说,你觉得制约粗排模型性能的有哪些因素?

  • 粗排双塔与召回双塔的异同?提示有以下4方面的不同

    • 物料向量的存储方式

    • 样本,特别是负样本的选择

    • 损失函数的设计

    • 最终用户向量与物料向量的交互方式

  • 你知道双塔模型有哪些改进变形?

  • 用精排蒸馏粗排应该怎么做?

    • 提示:共同训练?两阶段?用什么Loss?各有什么优缺点?

    • 思考:蒸馏的假设有问题吗?

  • 粗排环节存在哪些“样本选择偏差”?如何纠偏?

重排

  • 常用的打散方式有哪些?

  • MMR的核心思路是什么?


  • 基于DPP的重排的核心思想是什么?

  • 如何构建DPP中的核矩阵L?基于怎样的先验假设?

  • 怎么证明如此构建的L是符合我们的先验假设的?


  • 基于上下文感知的重排模型的原理和流程

    • 如何构建样本?

    • 如何构建Loss?

    • 都应该包含哪些特征?

    • 模型训练完毕后,如何排序?(提示:顺序在训练时是已知的,但是预测时是未知的)

多任务 & 多场景

  • 为什么不为每个目标单独建模?

  • 为什么不直接针对最终目标建模?比如直接建模购买率,没必要建模点击率?


  • 你在工作场景中遇到的多目标推荐的问题?

    • 有哪些目标?

    • 使用了怎样的模型结构?

  • 排序时,我们既希望用户点击,又希望用户点开后观看尽可能长,如何建模?

    • 提示:时长目标的单位问题,如果用均方误差,其量纲要远远大于CTR的BCE loss

  • 你在训练模型时,是怎么将多个损失融合成一个损失的?

  • 你在排序时,是怎么将多个目标的打分融合成一个打分的?

    • 提示:要考虑到不同目标的打分存在天然的分布差异


  • 你遇到过多场景推荐的问题吗?你觉得难点在哪里?

  • 你要为一个服务全球的APP设计推荐模型,用户的国籍、语言这些特征要怎么使用?

冷启动

  • 新用户冷启,如何建模成一个多臂老虎机问题?

  • 新物料冷启,如何建模成一个多臂老虎机问题?


  • 怎么用Epsilon Greedy进行新用户冷启?

  • 怎么用UCB进行新用户冷启?

  • Bayesian Bandit的基本原理

  • Thompson Sampling用于新用户冷启的基本原理与流程


  • LinUCB用于新闻冷启动的基本原理与流程?

    • 这里的谁是老虎机?谁是手柄?

    • 如何建模手柄的收益?和哪些因素有关?

    • 如何求出每根手柄的参数?

    • 候选新闻集合是动态变化的,如何处理?

    • 观察到用户反馈后,如何更新每根手柄的收益分布?时间复杂度是什么?


  • 预测时遇到训练时未见过的新特征,是怎么处理的?

  • 训练时遇到训练时未见过的新特征,是怎么处理的?


  • 简述Meta-Learning的基本原理与流程

  • MAML作为一种特殊的meta-learning,特殊在哪里?

  • 简述MAML的训练流程

  • MAML应用于推荐系统的冷启动

    • 每个Task的粒度是什么?

    • 哪些参数需要从最优初值初始化?


  • 简述对比学习的训练流程和应用场景

  • 你将对比学习应用于推荐系统的什么场景?

  • 对比学习与向量化召回有什么异同?

  • 你是怎么做对比学习的?

    • 对比学习的样本从哪里来?

    • 数据增强是怎么做的?

    • 与主任务是怎么协同训练的?


  • 让你建立一个模型,预测新入库物料的后验CTR,以找到那些潜在爆款?

    • 样本怎么选?

    • 怎么设计特征?

    • 标签怎么收集?(提示:注意一下时间范围)

    • 怎么设计Loss?

    • 怎么用这个模型?

  • 设计对新用户友好的特征?你打算在模型中怎么用这些特征?

评估与调试

  • AUC的物理含义

  • AUC用在评价推荐性能时的缺陷

  • GAUC的计算方法

  • GAUC的缺点(提示:权重、位置)

  • NDCG的思路与计算方法


  • AUC能不能用于评价召回模型?

  • 你在评估召回模型时,主要使用哪些指标?

  • MAP的思路与计算方法


  • AB Test中应该如何划分流量?

  • 你在做AB Test时,一般会有哪些注意事项?

  • 用通俗语言解释一下什么是p-value?

  • 解释一下什么是Type I Error, Type II Error, Power?


  • 如何知道某个特征在你的模型中的特征重要性?

  • 一个多层的DNN,你想压缩一下,如何找到"滥竽充数"那一层?


  • 你碰到过“线下AUC涨了,线上AB指标没提升”的情况吗?怎么处理解决的?

  • 解释一下“特征穿越”现象,及如何解决?

  • 你碰到过“老汤模型”带来的麻烦吗?如何解决?

  • 新模型小流量上线后,我收集了一批线上数据D做测试样本,让新老模型都在D上预测并计算GAUC,我的作法有什么问题?正确方式应该怎么做?

  • 解释一下“链路一致性”问题。你有没有遇到过“链路一致性”问题?如何解决的?

其他

  • 以下你两个问题,只要你简历中出现GBDT相关项目,我一般都会问一下,能够答对的人不多

    • GBDT中的G代表梯度,那它是谁对谁的梯度?

    • 给你一个m*n的数据集,m是样本数,n是特征数,问这个梯度向量G有多长?

    • 这两个问题实际上是一体的,你只要搞清楚G的含义,自然知道它有多长

    • 这两个问题答对了,不代表你懂GBDT,但是答不上来,你肯定不懂GBDT。连G是谁对谁的梯度都搞不清楚,就好比你对外宣称自己是德华的忠实粉丝,但是人家问德华姓什么,你却回答不上来一样尴尬。

  • 42
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值